AT&T语法
$
表示立即数,引用10进制数4,AT&T语法$4
,Intel语法是4
- AT&T语法在寄存器前加 % ,Intel语法不需要
- AT&T语法处理源操作数和目的操作数和Intel语法相反
AT&T: movl $4, %eax
Intel: mov eax, 4 - AT&T语法在助记符后使用一个单独的字符来引用操作中使用的数据长度, Intel 语法中数据长度被声明为单独的操作数
AT&T: movl $test, %eax
Intel: mov eax, dword ptr test - 长调用和跳转使用不同的语法定义段和偏移值
AT&T: ljmp$
section,$
offset
Intel: jmp section:offset
cpuid.s的编译
汇编器$: as -o cpuid.o cpuid.s
连接器$: ld -o cpuid cpuid.o
gdb是命令行调试器
objdump反汇编器 obj=>汇编$objdump -d test.o
gprof简档器 ,分析程序的执行和确定应用程序中的“热点”
$./demo
...
$gprof demo > gprof.txt
汇编程序的基础模板
.section .data
;.section命定义段 参数只能为 .data, .bss, .text
;.data 是初始化了的数据
.section .bss
;使用0(null)初始化,常用做汇编语言程中的缓冲区
.section .text
;文本段,所有汇编语言程序中都必须有文本段,数据段,bss段是可选的
.globl _start
;.globl命令声明外部程序可以访问的程序,如过编写外部汇编程序或C语言程序使用的一组工具,应该用.globl声明每个函数标签
_start:
;定义起始点,连接器必须知道指令码的起点,默认标签是_start,表明程序应该从这条指令开始执行
定义数据元素
.data 命令声明数据段
这个段中的任何元素都保留在内存中