5
當nasm
組裝驗證碼:總是可以使用「mov eax,0x1」而不是「mov rax,0x1」?
BITS 64
mov eax, 0x1
mov rax, 0x1
我得到這樣的輸出:
b8 01 00 00 00 b8 01 00 00 00
這是mov eax, 0x1
操作碼重複兩次。
這是否意味着mov rax, 0x1
可以總是被mov eax, 0x1
更換還是隻是在這種情況下?
如果這是正確的,那豈不是比使用方法:在組裝時同時mov eax, 0x1
只有5個字節
xor rax, rax
inc rax
爲成爲6個字節?
相關:http://stackoverflow.com/questions/8502839/loading-small-numbers-into-64-bit-x86-registers – 2012-08-06 05:54:21
其實,因爲第一個片段是正確的,第二個片段只需要4個字節(不需要REX前綴)。 – harold 2012-08-06 08:42:09
'xor eax,eax' /'inc eax'是4B,略小於'mov eax,1'。但除非您對代碼大小進行了大量優化,否則請不要使用它。花費1個字節來保存指令(和融合域uop)對於現代CPU來說是值得的。 – 2016-05-20 06:33:01