汇编程序不应该接受我对ret imm16的请求吗?

问题描述 投票:1回答:1

我知道操作数为零的ret retimm16)指令的作用与无操作数的C2 imm16ret)的作用没有区别。但是,当我显式提供汇编程序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时,应该...

assembly x86 masm machine-code
1个回答
0
投票

您不需要3条单独的 00401000: 33 C0 xor eax,eax 00401002: C2 00 00 ret 0 行;一个带有3个操作数的db等效:

© www.soinside.com 2019 - 2024. All rights reserved.