问题描述
如果我在nasm中编译以下代码:
[bits 16]
push word 0x0101
nasm给我以下输出:
68 01 01
在16位模式下运行时,此指令可以正常工作。
现在,如果我更改为:
[bits 32]
push word 0x0101
nasm给我以下输出:
66 68 01 01
这不适用于32位保护模式。
我知道在保护模式下推送imm8和imm32可以正常工作,我怀疑如果nasm输出的字节数与在16位情况下输出的字节相同,则推送imm16的效果很好。
有人可以解释我所缺少的吗?谢谢!
@harold经过一番调查,我发现推送实际上是有效的,但是只有2个字节被压入堆栈而不是4个字节。该程序正在中断,因为我在清理堆栈时错误地期望有4个字节。感谢那。 – felipeek 1分钟前
现在,我的问题是:在32位模式下,压入字节确实将4个字节压入堆栈,使用3个字节作为填充(这被转换为x86的PUSH imm8指令)。同样,push dword还将4个字节压入堆栈。为什么推字只能推2个字节?在我看来,这是一个很大的矛盾。我想念什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)