2012-10-15 30 views
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] 

回答

0

要理解的第一件事是傳遞給你的子程序的'arrayOfLetters'是一個指針。

訪問數據(每次一個字節)的指針(在ECX)在彙編中,使用:

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

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

下一個問題是局部變量是如何訪問:有使用的兩種主要方式和兩他們使用堆棧

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數組[],只是堆棧中的一些任意字節。

+0

另外mov ecx,_localvar_ + offset + [ebx]將是完全合法的組合(取決於彙編程序)。這將轉換爲mov ecx,[offset_X + ebp + ebx];這是一個有效的尋址模式,但不會做有意的事情 –

相關問題