2013-07-16 33 views

回答

1

也許你指的這個記憶語法(例如objdump -Mintel):

add DWORD PTR [eax],0x5 

的這裏的一點是,[eax]只是在內存中的位置,但它並沒有攜帶大小信息。所以我們不知道是將5加到一個字節,一個字,一個雙字還是一個qword。如果我們使用帶註釋的操作碼名稱(addb,addw,addl,addq),但是這個特定的assert語言會選擇註釋內存操作數,這是很明顯的。在這種情況下,它說,「對待eax是一個指向雙字的指針」。

相比之下,寄存器操作不需要這樣的註解,因爲寄存器顧名思義它的大小:

add al,0x5 ; addb 
add ax,0x5 ; addw 
add eax,0x5 ; addl 
add rax,0x5 ; addq 
+0

當我寫下面這行:mov eax,OFFSET var1(var1是Byte),所以我不需要PTR而添加BYTE操作數? – sharon182

+0

@ user704023:什麼是'var1'?立即價值?目標寄存器決定大小(所以'eax'的雙字)。 –

+0

var1是一個字節變量的名稱 – sharon182

相關問題