0

我在 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 可以使其正常工作。

4

1 回答 1

0

我发现代码有什么问题:

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

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

于 2013-07-19T12:03:46.693 回答