ARM linux常用汇编语法

汇编语言每行的语法:

    lable: instruction  ; comment

段操作: .section  
   
   
格式: .section 段名 [标志]

   
[标志]可以是如下:
   
        a
允许段
        w
可写段
        x
可执行段

   
常见段名: data,bss, text, rodata段,我们也可以定义我们自己的段。

    .data:
已初始化数据段
    .bss
: 未初始化数据段
    .text
:代码段
    .rodata
:只读段


汇编程序的入口点:

   
通常,linux的汇编程序的入口点都是从_start这个全局符号开始的。而C语言的入口点是main, main函数就是被_start后面的代码调用。

    .global _start
_start:
       
       
代码,,,
       
代码,,,
       
,,,
        bl main
        bl exit
       

linux
汇编中常数的使用:

   
十进制: 以非0 的数字开头表示, 124, 564
   
二进制: 以0b开头,如0b101001
   
八进制: 以0开始的数字,如05645
   
十六进制:以0x开头,如0xab12
   

linux
汇编中常用的伪操作:

   
数据定义伪操作:

        .byte,
定义单个字节, 如, .byte 5, 4, 0b1001, 0x22, 055, 'b'
        .short,
定义半字数据, 如,.short 0x1122, 3344
        .long,
定义4字节数据,如, 0x11223344
   
        .string, .asciz,.ascii,
定义字符串数据,比如.string "hello"

   
对齐伪操作:.align
   
文件结束操作:.end
   
文件包含操作:.include, 一般是在文件开头的时候包含头文件时使用
   
   
代码指令集切换:
           
        .thumb, .code 16
这两个伪指令告诉编译器从这里开始,以后的代码都编译成16为的thumb指令。
        .arm, .code 32
这两个伪指令告诉编译器从这里开始,以后的代码都编译成32为的arm指令。
           
函数定义格式:
   
   
函数名:
           
函数体
           
函数返回语句

   
比如add函数:
            .global add
        add:
            add r0, r1, r2
            mov pc, lr


常见符号的意义和用法:
       
    @ :
代码注释符号
    ;    
语句分离符号。(相当于C语言中的;
    #   
立即数前缀

你可能感兴趣的:(ARM linux常用汇编语法)