AT&T汇编简单入门例子

让像我这样的菜鸟可以尽快入门;

废话少说,代码如下:

 

$  cat    te.s

 

.data        # 声明数据段

msg:.string "hello,welcome to the linux world!!/n"   #要输出的字符串

len=.-msg     #字符的长度

 

.text          #声明代码段

.global   _start        #程序入口地址

_start:

movl     $len  ,  %edx

movl     $msg , %ecx

movl     $1 , %ebx

movl     $4 , %eax           #系统调用号(sys_write)

int  $0x80                        # 调用内核功能

 

movl    $0 , %ebx        # 退出代码

movl   $1 , %eax         # 系统调用号(sys_exit)

int  $0x80                      # 调用内核功能    这两个语句相当于masm的 mov   ah,4ch  和 int  21h;

 

保存好,现在就编译它。

$ as   -o   te.o   te.s

$ld    -o    te   te.o            即可。

 

movl 这些是用在32位的。

如果,你改为mov,它会提示错误的。

 

还有一个错误就是,寄存器都用了16了,即%ax等等,会提示file format not recognized; treating as linker script

 

不要用gcc来编译,因为用gcc的话,上面的代码还要加上main的入口描述。

你可能感兴趣的:(linux,汇编,gcc,File,AT&T,linker)