如何翻译 NASM“推字节” 到气体语法?
我正在将 NASM 源“移植”到 GAS,并发现以下代码行:
push byte 0
push byte 37
GAS 不允许“push byte”或“pushb”。
我应该如何将上面的代码翻译成GAS语法?
谢谢
I'm "porting" a NASM source to GAS and I found the following lines of code:
push byte 0
push byte 37
GAS doesn't allow "push byte" or "pushb".
How should I translate the above code to GAS syntax?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
pushb
已从 GAS 中删除。 您应该能够使用push
命令来获得相同的效果。 更多信息请参见此处。pushb
was removed from GAS. You should be able to use thepush
command to get the same effect. A little more information is here.1) NASM 2.11 64 位中的
push byte
编译为与push
相同,但如果推送的内容更大,它会拒绝编译比一个字节:与以下相同:
但以下失败:
所有这些都编译为指令的
6a XX
形式。2) NASM 和 GAS 根据操作数大小自动决定使用哪种形式:
GAS 2.25:
编译为与 NASM 相同:
Objdump:
所以只需在 GAS 中
push
与NASM中的push byte
相同,但没有错误检查。3) GAS 中确实存在的修饰符是
w
,如下所示:编译为:
即添加
0x66
前缀用于切换 16 位操作。NASM 的等价是:
4) 与
mov
的区别在于我们无法控制任意的入栈大小:它们都是将固定数量的入栈。我们可以控制指令编码的唯一参数是是否包含
0x66
前缀。其余的由段描述符决定。 请参阅Intel 64 和 IA-32 架构软件开发人员手册 - 第 2 卷指令集参考 - 325383-056US 2015 年 9 月。
1)
push byte
in NASM 2.11 64 bit compiles to the same as justpush
, except that it refuses to compile if the thing pushed is larger than a byte:Is the same as:
But the following fail:
All of those compile to the
6a XX
form of the instruction.2) NASM and GAS automatically decide what form to use based on the operand size:
The GAS 2.25:
Compiles to the same as the NASM:
Objdump:
So just
push
in GAS is the same aspush byte
in NASM, but without the error checking.3) The modifier that does exist in GAS is
w
as in:which compiles to:
i.e., adds the
0x66
prefix to toggle 16 bit operation.NASM's equivalent is:
4) The difference from
mov
is that we cannot control arbitrary push sizes: they are all push fixed amounts to the stack.The only parameter we can control on the instruction encoding is to include the
0x66
prefix or not.The rest is determined by the segment descriptor. See the Intel 64 and IA-32 Architectures Software Developer’s Manual - Volume 2 Instruction Set Reference - 325383-056US September 2015.