以下是我使用的示例程序作为索引寻址模式的示例
.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
我出错的任何想法
答案 0 :(得分:2)
您要求汇编此指令(英特尔语法):
mov bx, [t1 + di * 2]
您无法像这样扩展16位寄存器(在这种情况下为di
)。只能在此指令中缩放32位寄存器:
mov bx, [t1 + edi * 2]
请参阅Intel或AMD的官方CPU文档,了解有效的操作数编码。