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

您要求汇编此指令(英特尔语法):

mov bx, [t1 + di * 2]

您不能像那样缩放 16 位寄存器(di在这种情况下)。只有 32 位寄存器可以像这条指令一样缩放:

mov bx, [t1 + edi * 2]

有关有效的操作数编码,请参阅 Intel 或 AMD 的官方 CPU 文档。

于 2012-08-04T10:47:19.877 回答