为了账号安全,请及时绑定邮箱和手机立即绑定

当我没有指定操作数大小时,push指令压入堆栈的字节数是多少?

当我没有指定操作数大小时,push指令压入堆栈的字节数是多少?

噜噜哒 2019-09-06 16:12:16
我可以通过这样做将4个字节压入堆栈:push DWORD 123但我发现我可以在push不指定操作数大小的情况下使用:push 123在这种情况下,push指令将多少字节压入堆栈?推送的字节数是否取决于操作数大小(因此在我的示例中它将推送1个字节)?
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

计算机中的“堆栈宽度”是可以推入堆栈的最小数据量,被定义为处理器的寄存器大小。这意味着如果您正在处理具有16位寄存器的处理器,则堆栈宽度将为2个字节。如果处理器有32位寄存器,则堆栈宽度为4个字节。如果处理器有64位寄存器,则堆栈宽度为8个字节。

使用现代x86 / x86_64系统时不要混淆; 如果系统以32位模式运行,则堆栈宽度和寄存器大小为32位或4个字节。如果切换到64位模式,那么只有那时寄存器和堆栈大小才会改变。


查看完整回答
反对 回复 2019-09-06
?
茅侃侃

TA贡献1842条经验 获得超21个赞

在64位长模式下,无法将32位值压入堆栈。该表非常清楚,不是有效的编码。我怀疑这只是其中一个案例,即使英特尔很难在他们的手册中清楚地记录,特别是因为他们尝试这种一刀切的方法,其中一本手册必须记录数十年的微处理器和多个指令集。这事情很清楚的有:“在64位模式,堆栈指针的大小始终是64位。”

查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 1842 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信