将GAS与.intel_syntax一起使用时出错

时间:2016-03-16 11:16:06

标签: linux assembly compiler-errors intel att

根据一些文档和this answer,可以在Linux中使用带有Intel语法的GAS,而不是默认的AT& T语法。

我尝试编译以下简单代码,包含在专用文件file.s中:

.intel_syntax noprefix

section .data

section .text
        global _start

_start:
        mov eax, 1      # some random comments

        mov ebx, 0      

        int 80h         

如果我运行as file.s -o file.o,则会产生以下错误:

is2_exit.s: Assembler messages:
is2_exit.s:3: Error: no such instruction: `section .data'
is2_exit.s:5: Error: no such instruction: `section .text'
is2_exit.s:6: Error: no such instruction: `global _start'
is2_exit.s:13: Error: junk `h' after expression

似乎根本没有考虑.intel_syntax。怎么了?

1 个答案:

答案 0 :(得分:2)

您似乎对某些指令使用NASM语法,以及十六进制文字。您需要更改这些以使用GNU AS语法。

而不是section name,您应该使用.section name(带有前导点)。如果是.section .text.section .data,您可以将这些内容简化为.text.data

同样,global symbol在GNU AS语法中应该是.global symbol(或.globl symbol)。

关于十六进制文字,manual可以这样说:

  

十六进制整数是'0x'或'0X',后跟一个或多个从'0123456789abcdefABCDEF'中选择的十六进制数字。

因此80h应写为0x80(或0X80)。