我的任务是使用嵌入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]
答案 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数组[],而是访问堆栈中的任意字节。