ARM指令集机器编码基本格式:

所有的指令,占用4字节,32位
程序的启动从ARM指令集开始,进入异常转化为ARM状态,运行ARM指令集指令;ARM汇编语言指令格式
ARM汇编语言指令格式
<opcode>{<cond>}{s} <Rd>,<Rn>{,<operand2>}opcode:操作码(指令助记符),如B,STR;
cond:可选择的条件码,执行条件,如NE,EQ;
S:若有S后缀,则根据计算结果更新CPSR中的条件码
Rd:目标寄存器;
Rn:存放第一个操作数的寄存器;
operand2:第二个操作数。
ARM指令条件码
0000 EQ: Z置位,表示相等
0001 NE: Z清零,表示不相等
0010 CS/HS: C置位,无符号数大于或等于
0011 CC/LO: C清零,无符号数小于
0100 MI: N置位,表示负数
0101 PL: N清零,表示正数或零
0110 VS: V置位,表示溢出
0111 VC: V清零,表示未溢出
1000 HI: C置位且Z清零,无符号数大于
1001 LS: C清零或Z置位,无符号数小于或等于
1010 GE: N等于V,带符号数大于或等于
1011 LT: N不等于V,带符号数小于
1100 GT: Z清零且N等于V,带符号数大于
1101 LE: Z置位或N不等于V,带符号数小于或等于
1110 AL: 无条件执行
ARM寻址
立即寻址
含义:操作数包含在指令的32位机器编码中;

例子
MOV R0,#0x0000F200 ;R0 <- #0x0000F200
值得庆幸的:其实没必要一个一个数的算,编译系统为我们提供了伪指令LDR。
ldr r1,=0x12345678寄存器寻址
含义: 操作数存放在寄存器中
例子:
基本操作方式
ADD R0,R1,R2 ; R0<-R1+R2对第二操作数寄存器的移位操作
ADD R3,R2,R1,LSR #2 ; R3<-R2+R1÷4注意:第二个操作数为寄存器时方可进行移位操作,移位数可以是五位立即数或某个寄存器内的数值,执行完毕后第二操作数寄存器中的数值并不改变;

寄存器间接寻址
含义:利用寄存器的值作为存储器指针,数据传送类的load/store类指令都使用寄存器间接寻址方式;
LDR RO,[R1] ; R0<mem32[R1]
STR RO,[R1] ; mem32[R1]R0
评论