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 内) からデータ (一度に 1 バイト) にアクセスするには、以下を使用します。

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

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

次の問題は、ローカル変数へのアクセス方法です。主に 2 つのスタイルが使用され、どちらも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 array[] にはアクセスせず、スタック内の任意のバイトにアクセスします。

于 2012-10-15T06:54:57.597 に答える