【发布时间】:2013-07-17 21:01:04
【问题描述】:
我在 Visual Studio 2012 Professional 中工作,我有这个代码:
char* array = (char*) malloc(100);
array[0] = 'H'; array[1] = 'e'; array[2] = 'l'; array[3] = 'l';array[4] = 'o';
__asm {
// Missing code here
}
例如,如何使用内联汇编访问数组中的字符? 我试过了,但它只适用于数组中的第一个字符:
mov eax, array[0]
mov al, [eax] // Now al contains the 'H'
Buf 如果我将代码更改为“mov eax,array[1]”,它将不再起作用(访问冲突)。 我如何循环遍历数组?
编辑,已解决(我在 8 小时内无法回答自己的问题): 我发现代码有什么问题:
mov eax, array[0]
mov al, [eax]
实际上有效,但是 eax 值发生了变化,因为我修改了作为 eax 寄存器一部分的 al 寄存器,所以当我将它放入循环时,eax 值不再有效。 例如,将 eax 更改为 ebx 可以使其正常工作。
【问题讨论】:
-
需要加载有效地址。 lea eax, array 然后在需要时将 eax 作为指针递增。然后作为 mov al,[eax] 访问,但这可能只对 32 位系统有效。
-
@huseyin 不幸的是,这不起作用,al 寄存器中的最终值不是我放入数组中的任何字符。
标签: c++ visual-studio visual-c++ assembly inline-assembly