现在的位置: 首页 > 综合 > 正文

(1)AT&T汇编笔记

2013年12月01日 ⁄ 综合 ⁄ 共 1131字 ⁄ 字号 评论关闭

1).section命令声明段:

              所有的汇编程序中都必须有文本段(.text)。

              例如用法:    .section .data

                                   .section .text

                                   .section .bss

(2)_start标签:用于声明程序应该从这条指令开始执行。Ld连接的命令行选项-e能改变默认的程序入口标签。

(3).globl命令:声明外部程序可以访问的程序标签。如果编写被外部汇编语言或者c语言程序使用的程序模块的话,就应该使用.globl命令声明每个函数段的标签。

       从以上可以看出,AT&T汇编的模板为:

              .section .data

                            <被初始化了的数据>

              .section .bss

                            <未初始化的数据>

              .section .text

              .globl _start

              _start:

                            <程序代码内容>

(4).ascii命令:声明使用ASCII字符声明一个文本字符串。

       例如:   .ascii “hello world!\n”

              注意:双引号只是说明这是一个字符串,是给汇编器解读的。

(5)注意汇编时先:as filename.S –o filename.o    然后: ld filename.o –o filename

       最后就可以执行filename了。必须按照这样的步骤。

       但是在使用gcc编译汇编代码的时候,gcc filename.S –o filename 是不行的。因为gcc寻找的入口标签是main,而不是_start。

       你可能会说这样行吗。Gcc –c filename.S –o filename.o 然后: ld filename.o –o filename 。这样是可以的。用gcc编译汇编代码是没有问题的,底层也是调用的as,但是链接的话,要手动使用ld。如果直接使用gcc进行编译链接的话,gcc要首先检查main标签是不是存在。就是这个不同点。需要注意一下。

所以在使用gcc进行编译链接汇编代码的时候,要源代码为:.globl main     main:

为了调试汇编,必须使用命令行选项-gstabs(包含每行源代码的调试信息),或者-gstabs+(包含专门的gdb调试信息)。

抱歉!评论已关闭.