ARM 汇编基础总结

GNU 汇编语法

编写汇编的过程中,其指令、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。

1. 汇编语句的格式

label: instruction @ comment

  • label即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通过这个标号得到指令的地址,标号也可以用来表示数据地址。注意 label 后面的" : ",任何以" : "结尾的标识符都会被识别为一个标号。在汇编语言中,_start是一个特殊的标号(label),_start是程序执行的入口点,程序执行的起始地址,当程序加载到内存中时,处理器会跳转到_start标签所在的地址,从这里开始执行代码。_start主要作用是初始化程序运行环境,比如栈、全局变量、动态链接环境,然后跳转到用户定义的main函数执行。
  • instruction即指令,也就是汇编指令或伪指令
  • @表示后面的是注释,跟 C 语言的“/*”和“*/”一样,在 GNU 汇编文件中也可以使用“/*”和“*/”来注释
  • comment就是注释内容
2. 预定义段名

.section 伪操作,用于指定汇编代码或数据应当放入哪个段, 或者定义自己的自定义段,每个段以段名开始,以下一段名或者文件结尾结束

.text 表示代码段

.data 初始化的数据段

.bss 未初始化的数据段

.rodata 只读数据段

.byte 定义单字节数据,比如.byte 0x12

.equ 赋值语句,比如.equ num,0x12,表示num=0x12

.short 定义双字节数据,比如.short 0x1234

.long 定义一个 4字节数据,比如.long 0x12345678

.align 数据字节对齐,比如.align4表示4字节对齐

.end 表示源文件结束

.global 定义一个全局符号,比如.global _start

.section .data         // 数据段
message:
    .asciz "Hello, World!"  // 字符串常量

.section .text         // 代码段
.global _start         // 声明程序入口
_start:
    mov eax, 4         // 系统调用号,写操作
    mov ebx, 1         // 文件描述符(1是标准输出)
    lea ecx, [message] // 将字符串地址加载到 ecx
    mov edx, 13        // 要写入的字节数
    int 0x80           // 调用内核

    mov eax, 1         // 系统调用号,退出程序
    xor ebx, ebx       // 返回值为0
    int 0x80           // 调用内核

Cortex-A7 常用汇编指令

处理器内部数据传输指令

数据传输常用的指令有三个: MOV、 MRS 和 M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值