1

私はさまざまなアドレッシング モードを試し、このテーマについて調査を行ってきました。インデックス付きアドレッシング モードを使用しようとして、SO のさまざまな例からコードを借りてきました。以下の例では:

outerLoop:
cmp edi, 50                  ;each element is 2 bytes (2 ascii characters)
ja  endloop                  ;we need 50 because it's 5 elements per row
mov esi, 0                   ;and 5 rows
innerLoop:
cmp esi, 5                   ;Compare esi(inner loop index) to 5
jae innerEnd                 ;jump if it reached the end of the row
mov ax, matrix[edi + esi*2]
cmp ax, cx
jg  biggerThan
mov cx, ax

作成者は、ネストされたループを使用して 2 次元配列を解析し、最小の数を見つけています。私が本当に興味を持っているのは(ケース1)です:

mov ax, matrix[edi + esi*2]

この部分は、コードをコンパイルするときに問題を引き起こすようで、エラーが発生します:「コンマ、コロン、または行末が必要です」ただし、コードを次のように変更すると(ケース2):

[matrix + edi + esi*2]

すべてがうまくいっているようです。

正しいインデックス付きアドレッシング モードはどれですか? 私の直感では、「マトリックス」は配列であるため、左ブラケットの外側に配置する必要がありますが、実際にはそうではないようです。ケース1とケース2の違いを説明していただけると助かります。

4

0 に答える 0