在内联汇编中访问动态字符数组(VS2012)

时间:2013-07-18 18:41:48

标签: c++ visual-studio visual-c++ assembly inline-assembly

我在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'

如果我将代码更改为“mov eax,array [1]”,则它不再起作用(访问冲突)。  我怎么能通过阵列循环?

编辑,已解决(我无法回答我自己的问题8小时): 我发现代码出了什么问题:

mov eax, array[0]
mov al, [eax]

实际上有效,但是eax值会改变,因为我修改了作为eax寄存器一部分的al寄存器,所以当我把它放在一个循环中时,eax值不再有效。 例如,将eax更改为ebx使其无任何问题地工作。

1 个答案:

答案 0 :(得分:0)

我发现代码出了什么问题:

mov eax, array[0]
mov al, [eax]

实际上有效,但是eax值会改变,因为我修改了作为eax寄存器一部分的al寄存器,所以当我把它放在一个循环中时,eax值不再有效。例如,将eax更改为ebx使其无任何问题地工作。