私はさまざまなアドレッシング モードを試し、このテーマについて調査を行ってきました。インデックス付きアドレッシング モードを使用しようとして、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の違いを説明していただけると助かります。