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

我可以通过这样做将4个字节压入堆栈:


push DWORD 123

但我发现我可以在push不指定操作数大小的情况下使用:


push 123

在这种情况下,push指令将多少字节压入堆栈?推送的字节数是否取决于操作数大小(因此在我的示例中它将推送1个字节)?


噜噜哒
浏览 1848回答 3
3回答

MM们

计算机中的“堆栈宽度”是可以推入堆栈的最小数据量,被定义为处理器的寄存器大小。这意味着如果您正在处理具有16位寄存器的处理器,则堆栈宽度将为2个字节。如果处理器有32位寄存器,则堆栈宽度为4个字节。如果处理器有64位寄存器,则堆栈宽度为8个字节。使用现代x86 / x86_64系统时不要混淆; 如果系统以32位模式运行,则堆栈宽度和寄存器大小为32位或4个字节。如果切换到64位模式,那么只有那时寄存器和堆栈大小才会改变。

茅侃侃

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