将数组元素移动到寄存器组件

时间:2012-10-15 02:54:07

标签: c assembly x86

我的任务是使用嵌入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]

1 个答案:

答案 0 :(得分: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数组[],而是访问堆栈中的任意字节。