0

我的任务是使用嵌入到 C 中的程序集找到数组中的最小字母。我不确定如何访问数组的每个元素。我尝试使用谷歌搜索,发现有些人正在执行以下操作:

mov ecx, arrayOfLetters

然后增加 ecx 以访问每个元素。这是对的还是我写的是正确的?

请帮忙,我很困惑。

    char findMinLetter( char arrayOfLetters[], int arraySize )
{
    char min;

    __asm{
        push eax
        push ebx
        push ecx
        push edx
        mov dl, 0x7f        // initialize DL


        xor ebx, ebx //EBX started off as 0

        //moves letters from array to registers
        mov ecx, arrayOfLetters[ebx]
        mov edx, arrayOfLetters[ebx+1]
4

1 回答 1

0

首先要了解的是传递给子例程的“arrayOfLetters”是一个指针。

要从汇编器中的指针(在 ecx 中)访问数据(一次一个字节),请使用:

mov al, [ecx]
mov al, [ecx+1]
...  or ...

mov al, [ecx]
inc ecx
mov al, [ecx]

下一个问题是如何访问局部变量:使用了两种主要样式,并且都使用了stack

mov ecx, _localvariable_ ; this translates to either

mov ecx, [ebp + offset]  ; style (1) or
mov ecx, [esp + offset]  ; style (2)

如果有一个汇编器支持指令 mov ecx, _localvariable [+1],那很可能会转换为:

mov ecx, [ebp + offset + 1]

这不会访问 char 数组 [],而只是访问堆栈中的一些任意字节。

于 2012-10-15T06:54:57.597 回答