我知道操作数为零的ret
ret
(imm16
)指令的作用与无操作数的C2 imm16
(ret
)的作用没有区别。但是,当我显式提供汇编程序C3
时,由于我显式提供了操作数,因此它不应该将其编码为ret 0
指令吗?
如果我使用命令ret imm16
将以下代码与VS2019附带的ml.exe版本进行汇编,则>
ml file.asm /link /SUBSYSTEM:CONSOLE /ENTRY:stdMain
然后用反汇编器打开可执行文件,我看到为
.386 .MODEL FLAT, STDCALL .CODE stdMain PROC xor eax, eax ret 0 stdMain ENDP END
编码的指令是ret
:
C3
我可以通过对字节进行硬编码来手动执行
00401000: 33 C0 xor eax,eax 00401002: C3 ret
指令:
C2
现在我在反汇编输出中看到
.386 .MODEL FLAT, STDCALL .CODE stdMain PROC xor eax, eax db 0c2h, 00, 00 stdMain ENDP END
指令:
C2
汇编程序像这样“优化”是否正确?
我知道操作数为零的ret imm16(C2 imm16)指令的作用与无操作数ret(C3)的作用没有区别。但是,当我明确给汇编器ret 0时,应该...
您不需要3条单独的 00401000: 33 C0 xor eax,eax
00401002: C2 00 00 ret 0
行;一个带有3个操作数的db
等效: