如何解决为什么推后缀只允许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 举报,一经查实,本站将立刻删除。