汇编代码 编译出现-invalid instruction suffix for push

By:Ailson Jack

Date:2018.08.29

个人博客:www.only2fire.com

         本文在我博客的地址是:http://www.only2fire.com/archives/67.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

         最近在阅读《Linux内核完全注释》这本书,试图多了解Linux内核的运行过程。书中当然也涉及到汇编代码的编写。这本书的阅读笔记,应该会在后面陆续的发布,敬请期待吧^_^。

         在Linux系统中,使用AT&T语法编写汇编代码时,遇到了一个问题,就是编译代码时会出现问题:”invalid instruction suffix for push”。

         我的编译环境:Ubuntu 14.04 x86_64,在终端中执行命令:as -o callee.o callee.s,此时就出现了错误提示:invalid instruction suffix for push,截图如下:

汇编代码 编译出现-invalid instruction suffix for push

       错误原因是,在64位系统和32位系统的as命令对于某些汇编指令的处理支持不一样造成的。在文件callee.s中,包含指令:pushl  %ebp,该指令在64位系统下就编译不过。

         解决方法:在callee.s中,在代码头部添加.code32即可:

汇编代码 编译出现-invalid instruction suffix for push

      然后再次编译该汇编文件,编译顺利通过。如果还有其他的问题,欢迎留言讨论。

      排版更好的内容见我博客的地址:http://www.only2fire.com/archives/67.html

      注:转载请注明出处,谢谢!^_^