0

以下は、インデックス付きアドレッシング モードの例として使用しているサンプル プログラムです。

.section .data
t1:
.int 1,3
.section  .text
.globl _start
_start:
mov $0, %di
mov t1(,%di,2), %bx
mov $1,%di
mov t1(,%di,2), %cx
add %cx,%bx
movl $1,%eax
int $0x80

上記のコードをアセンブルすると、以下のエラーが発生します。

$ as indexed-add.s -o indexed-add.o
indexed-add.s: Assembler messages:
indexed-add.s:9: Error: `t1(,%di,2)' is not a valid base/index expression
indexed-add.s:11: Error: `t1(,%di,2)' is not a valid base/index expression

私が間違っているアイデア

4

1 に答える 1

2

この命令をアセンブルするように要求しています (intel 構文):

mov bx, [t1 + di * 2]

そのように16ビットレジスタ(diこの場合)をスケーリングすることはできません。次の命令のようにスケーリングできるのは、32 ビット レジスタのみです。

mov bx, [t1 + edi * 2]

有効なオペランド エンコーディングについては、Intel または AMD の公式 CPU ドキュメントを参照してください。

于 2012-08-04T10:47:19.877 に答える