【Error】AT&T汇编 报错 Error: invalid instruction suffix for `push' 或 pop

为什么要学AT&T汇编呢?因为喜欢Linux。

关于intel汇编和AT&T汇编的区别,参考LinuxC一站式编程:

要彻底搞清楚C语言的原理,必须要深入到指令一层去理解。你写一行C代码,编译器会生成什 么样的指令,要做到心中有数。
x86 汇编的两种语法:intel 语法和AT&T 语法

x86汇编一直存在两种不同的语法,在intel 的官方文档中使 用intel 语法,Windows也使用intel 语法,而UNIX 平台的汇编器一 直使用AT&T语法,所以本书使用AT&T语法。mov %edx,%eax 这条 指令如果用intel 语法来写,就是mov eax,edx,寄存器名不加%号, 并且源操作数和目标操作数的位置互换。本书不详细讨论这两种 语法之间的区别,读者可以参考 。

介绍x86汇编的书很多,UNIX 平台的书都采用AT&T语法 ,其它书一般采用intel 语法。

具体的错误是:

# 汇编时
$ as test.s -o test.o
test.s: Assembler messages:
test.s:23: Error: invalid instruction suffix for `push'
test.s:29: Error: invalid instruction suffix for `pop'

原因在于在64位上汇编32位代码。

解决方法:
在代码开头添加 .code32 。

 

参考:https://blog.csdn.net/geekdonie/article/details/12792421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值