2012-08-04 46 views
0

下面是當我組裝這我使用作爲索引尋址模式錯誤:`T1(,%二,2)」不是有效的鹼/索引表達

.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

你把t1放在()中嗎? – 2012-08-04 10:40:33

+0

@tuğrulbüyükışık對不起,我沒有得到你?,我粘貼的問題是我的完整代碼 – mrashok 2012-08-04 10:43:19

+0

mov t1(,%di,2),%bx <------什麼是(--->,< - ---%di,2)這個逗號在幹什麼? – 2012-08-04 10:44:11

回答

2

你的要求來裝配該指令(Intel語法):

mov bx, [t1 + di * 2] 

這樣就不能縮放16位寄存器(在這種情況下爲di)。只有32位寄存器可以縮放就像這個指令:

mov bx, [t1 + edi * 2] 

請參閱從英特爾或AMD的官方CPU的文檔有效的操作數編碼。

+0

+1英特爾語法更容易 – 2012-08-04 10:57:07

+0

@Alexey Frunze,感謝您的答案,在這種情況下,有什麼辦法可以使用.int,因爲如果使用edi(哪些4bytes),我只能用4作爲乘數從0移到n – mrashok 2012-08-04 18:41:57

+0

我不明白這個問題。 – 2012-08-04 19:06:23

相關問題