错误:`t1(,%di,2)'不是有效的基数/索引表达式

时间:2012-08-04 10:35:55

标签: assembly x86

以下是我使用的示例程序作为索引寻址模式的示例

.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

我出错的任何想法

1 个答案:

答案 0 :(得分:2)

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

mov bx, [t1 + di * 2]

您无法像这样扩展16位寄存器(在这种情况下为di)。只能在此指令中缩放32位寄存器:

mov bx, [t1 + edi * 2]

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