ARM指令
Posted _WILLPOWER_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM指令相关的知识,希望对你有一定的参考价值。
寄存器
ARM总共有37个寄存器,31个通用寄存器,6个状态寄存器
应用程序工作在user模式,内核工作在supervisor svc模式
R13 堆栈指针
R14 LR链接寄存器(函数返回,中断返回)
R15 PC指针
SPSR save保存进入中断后的CPSR,中断退出让其值恢复
N:代表negtive
Z:代表zero(相等)
I:代表取消中断
F:代表取消快速中断
M:代表模式
寻址方式
- 立即数寻址
ADD R0, R0, #0x3f; R0<-R0+0x3f
- 寄存器寻址
ADD R0, R1, R2; R0<-R1+R2
- 寄存器间接寻址
LDR R0, [R2]; R0<-[R2]
- 基址变址寻址
LDR R0, [R1, #4]; R0<-[R1+4]
- 相对寻址
BL NEXT
MOV PC, LR
跳转链接寄存器
ARM指令
使用@符号来表示注释
{}表示可写可不写的,<>表示一定要写的
MOV
MVN
#4 = 0b0100 取反 符号位1后面为0b1011,因为是负数,因此真正的值为符号位不变,其余位置取反加1,0b0100+0b1 = 0b0101也就是5,算上符号位就是-5.
SUB
操作数1必须是寄存器!
ADD
AND
ORR
BIC
标准ARM汇编%表示二进制,GNU中使用0b
CMP
比较结果在状态寄存器N表示
TST
条件
BL
LSL
ROR
MRS MSR
move register to status register
move status register to register
寄存器装载和存储
store register
loader register
伪指令
数据伪指令
伪/指令本身并没有所对应的机器码,它只是在编译的时候起作用,或者转
化为其他的实际指令来运行。
- global(全局符号,后面c语言也可以调用)
- ascii(字符串)
- byte(字节)
- word
- data(数据段)
- equ(宏)
- align(下面的数据对齐)
.data@数据段
hello:
.ascii "helloworld"@定义一个hello数据值为helloworld
.equ DA, 0x89@宏定义
操作类伪指令
mov指令所使用操作数不能超过8位,后面shifter_operand12位不是全部用来装数据,其中还有4位是用来看这个数据是否左移或者右移的!
使用ldr伪指令就可以达到超过8位数据赋值给寄存器,只不过ldr用伪指令的方式立即数要使用=号表示
ldr r0, =0x1ff
nop 是空操作,其实质是mov r0, r0没有意义,消耗时间
协处理器访问指令
CP15:coproces
提供16组寄存器
协处理器访问
使用mcr, mrc
以上是关于ARM指令的主要内容,如果未能解决你的问题,请参考以下文章