2016-10-09 76 views
0

我寫這幾行:LEA參數錯誤

num1 dw 7 
num1_ptr dw 0 
num1_ptr_ptr dw 0 
lea num1_ptr, num1 
lea num1_ptr_ptr, num1_ptr 
mov bx, num1_ptr_ptr 
mov bx, [bx] 
mov ax, [bx] 
call printNum ;printNum is 100% working. it prints the number in ax. 

問題是,編譯器說,兩個LEA指令有錯誤的參數。有誰知道爲什麼?

回答

2

lea唯一可能的形式是

lea r16, mem 
lea r32, mem 
lea r64, mem 

儘管是CISC,X86擁有MEM到MEM指令的限制列表,lea mem, mem不在名單上。

您可以通過簡單的初始化數據

num1   dw 7 
num1_ptr  dw num1 
num1_ptr_ptr dw num1_ptr 

而且,你缺少一個解引用,如果你想打印num1擺脫LEA-廢話的。

+0

它的一個學校作業,所以我必須用0初始化指針並在指針上使用lea,這樣它會在最後打印num1。 –

+0

@GuyShilman你可以使用一個臨時寄存器,然後存儲它的值:'lea ax,num1' /'mov [num1_ptr],ax'(和另一個指針相同)。請注意,這裏沒有'lea'的實際用法,更常用的'mov ax,OFFSET num1'(或NASM上的'mov ax,num1')將會執行。 –