Arm汇编简单介绍
控制指令
- 跳转指令:
B(Branch)
=> 分支的意思B
无条件跳转BL
带链接的无条件跳转BX
带状态切换的无条件跳转 根据目标地址最低位切换状态(arm/thumb)BLX
带链接和状态切换的无条件跳转B loc_地址
BEQ,BNE
存储器与寄存器交互数据指令 核心
- 存储器/寄存器: 内存,存储数据(小数据:寄存器,大数据:栈)
- 内存: 都是为数据服务
LDR/STR
LDR
: 从存储器中加载数据到寄存器中 => LOADLDR R8,[R9,#4]
,R8为待加载数据的寄存器,加载值为R9+0x4
所指向的存储单元, 伪代码R8 = *(R9+4)
LDR
: 将寄存器的火速据存储到存储区 => StoreSTR R8,[R9,#4]
,将R8寄存器的数据存储到R9+0x4
指向的存储单元,伪代码:*(R9+4) = R8
LDM/STM
LDM
: 将存储器的数据加载到一个寄存器列表LDM R0,{R1,R3}
,将R1指向的存储单元的数据一次加载到 R1,R2,R3寄存器
STM
: 将一个寄存器列表的数据存储到指定的存储器
PUSH/POP
PUSH
: 将寄存器的值压入堆栈 压栈==>POP
将堆栈值弹出到寄存器 出栈<==
SWP
: 将寄存器与存储器之间的数据进行交换SWP R1,R1 [R0]
,将R1寄存器与R0指向的存储单元的内容进行交换
- 堆,队列:
- 数据结构:
- 栈是竖的,后进先出,且只能从栈顶一次填入数据
- 数据结构:
数据传输指令
MOV
将立即数或寄存器的数据传送到目标寄存器
MOV R0,#8
=> R0 = 8
数据算数运算指令
ADD,SUB,MUL,DIV
有符号,无符号运算,带进位运算
数据逻辑运算指令
- 与:
AND
- 或:
ORR
- 异或:
EOR
- 移位: 实质是乘/除,类似与小数点移位,但相反.小数点左移变小,右移变大.但逻辑移位,左移变大,右移变小.且按2的倍数进行
LSL
:逻辑左移LSR
: 逻辑右移LSL R0,R1,#2
=>R0 = R1*4
LSR R0,R1,#2
=>R0 = R1*2
比较指令
CMP
: 比较
CMP R0 #0
, => R0寄存器中的值与0比较
标志位: 如z位,这个都可以在动态调式时,寄存器窗口看到
其他指令
- 协处理指令:
SWT
(切换用户模式) - 伪指令:
DCB
寄存器寻址方式:
- 立即寻址:
MOV R0,#1234
=> R0 = 0x1234 - 寄存器寻址:
MOV R0,R1
=> R0=R1 - 寄存器移位寻址:
MOV R0,R1,LSL #2
=> R0=R1*4 - 寄存器间接寻址:
LDR R0,[R1]
=> 将R1寄存器中的值作为地址,去除地址中的值赋予R0 - 寄存器间接基质偏移寻址:
LDR R0,[R1,#-4]
=> 将R1寄存器的值-0x4
的值作为地址,取出地址中的值给R0
对int a =0
这句话简单高级语言的汇编理解,首先会开辟一个内存存储单元,然后把0x0这个数放入R0寄存器,然后再把0x0这个数放入R0寄存器,然后再把R0寄存器的数据放入内存存储单元,
ARM汇编:
|
|