目录
一、部分伪指令
伪指令本身不能被cpu所识别, 但是它能被汇编器编译成一条或者多条指令cpu所识别的指令实现了一个小功能
ldr伪指令
ldr r0, [r1] //汇编指令
ldr判断依据 [ ] 有中括号的是加载指令,没有中括号是伪指令.code 32 .global _start .text _start: ldr r0, #0x1ff ldr r1, =text @将立即数本身放到r1寄存器 ldr r2, text @将立即数指向的内存中的数据加载到r2寄存器中 text: .word 0x12345678 .end
ADR伪指令
小范围地址加载的伪指令
ADR{cond} register, expr
cond: 条件码
register: 目标寄存器,如:R0等
expr: 地址表达式(相对于pc或寄存器)加载地址范围
地址字对齐时: +/-1020 bytes(255×4)
地址非字对齐时:+/-255bytes
NOP伪指令
NOP伪指令在汇编时将会被代替成ARM中的空操作,比如可能是“MOV R0,R0”指令等。NOP可用于延时操作。是为了优化流水线而设计的,相当于空操作
二、部分伪操作
汇编文件中的以 “.” 开头的都是伪操作
汇编语言程序里的一些特殊助记符为编程方便,完成一些辅助功能的操作。
在对汇编源程序进行汇编过程中由汇编程序处理,而不是在程序运行期间由机器执行.
也就是说,这些伪操作只在汇编过程中起作用,汇编结束,伪操作作用消失。
.text @往下的代码放到代码段
.data
.bss
.equ .equ NUM, #20 @类似于C语言中的宏
.global @将一个标号声明为全局的
.extern @声明为外部的
.byte @一个字节
.word @四个字节, 如 .word 0x12345678
.space 1024 @分配1024字节的空间
.string
.string "abcdef" @分配7个字节的空间
.ascii
.arm === .code 32
.thumb === .code 16
.section <section_name> @自定义段