我正在寫一些非常緊密的ASM代碼。是否可以消除這些冗餘尾隨零?
注意此組NASM產生的操作碼:
8AA4241C020000 mov ah,[esp+0x21c]
而且類似:
051C020000 add eax,0x21c ; 4 extra 0's!
8D84241C020000 lea eax,[esp+0x21c] ; Brutal!
是否有你打算申請一個15位偏移到任何方式傳達給處理器32位寄存器,並讓它找出自己的0填充?
我一直在梳理https://c9x.me/x86/html/file_module_x86_id_176.html的一些指導。多餘的2字節在這裏或那裏真的會拯救我的生命!
也接受:
替代的方式來重寫語句來使其變小,最終什麼,我在這種情況下會爲是這樣的:
mov eax,[esp+0x21c]
push eax
如果有手有辦法編碼,使其超小,我很想看到技術。
在那裏有一個LEA示例;) – baordog
處理器手冊告訴您什麼是可用的。只有16位寄存器才支持16位偏移量。不確定你對手編碼的含義。這不像你可以做些什麼。 –
您可以將寄存器的上半部分('xor ebx,ebx')清零,然後將您的16位值移入('mov bx,21c' - 注意:不要用'ebx')並根據需要使用('add eax, ebx')。 xor不是免費的,但是如果你多次使用這個技巧...... –