如何解决在保护模式下是否不允许推入imm16?
如果我在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 举报,一经查实,本站将立刻删除。