为什么推后缀只允许2和8个字节的值?

问题描述

我注意到只允许对8字节或2字节的值执行push。例如:

push $5 # same as pushq
# sub  $8,%rsp
# movq $5,(%rsp)

或者:

pushw $3
# sub  $2,%rsp
# movw $3,(%rsp)

并使用gdb确保堆栈看起来正确:

>>> x/5hd $rsp
0x7fffffffe426: 3   5   0   0   0

但是,所有其他后缀都给我:

错误:“ push”的指令后缀无效

为什么push只允许使用64位或16位值?使用sub...mov来更具体是常见的做法,还是那是一种反模式?最后,cpu是将push解释为与sub...mov指令一样,还是它们完全是两个不同的东西(产生相同的结果)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)