文章目录
ARM指令集
1、ARM指令集格式
2、ARM指令集的特点
ARM汇编指令
1、ARM汇编指令的格式
2、ARM汇编指令用法
ARM指令集分为的五大类
ARM指令集
1、ARM指令集格式
ARM指令集(ARM920T的核(core)的指令集)的格式如下图所示,可以看出,无论哪一种指令,长度都是32位,属于典型的精简指令集(RISC)。
2、ARM指令集的特点
(1)大多数指令可带条件码(Cond)执行;
(2)大多数指令带后缀的(S)码,即指令结果会影响标志位,有的指令带链接(L)执行;
(3)大多数指令在单个周期内可执行完成。访问存储单元使用Load-store规范的方式。带条件码(Cond)的32位ARM指令的格式如图1-9所示。
ARM汇编指令
1、ARM汇编指令的格式
<opcode> {<cond>} {S} <Rd>,<Rn> {,<operand2>}
其中,{ }表示可选项,
opcode:操作码,
cond:条件码,
S:影响 CPSR 程序状态寄存器,
Rd:目标寄存器,
Rn:第一寄存器作为第一个操作数,
operand2:第二个操作数。
cond 条件码
0000 = EQ-Z=1 (相等)
0001 = NE-Z=0 (不相等)
0010 =HS/CS-C=1 (无符号数大于或等于)
0011 =L0/CC-C=l (无符号数小于)
0100 = MI-N=1 (负数)
0101 =PL-N=0 (正数或零)
0110 =VS-V=1 (溢出)
0111 = VC-V=0 (不)溢出
1000 =HI-C=1且Z=0 (无符号数大于)
1001 =LS-C=0或Z=1 (无符号数小于或等于)
1010 =GE-N=V (有符号数大于或等于)
1011 =LT-N!=V (有符号数小于)
1100 =GT-Z=0且N=V (有符号数大于)
1101 =LE-Z=1或N!=V (有符号数小于或等于)
1110 =AL 无条件执行
1111 =N 保留
2、ARM汇编指令用法
下面通过简单的例子说明ARM汇编指令用法:
ADDEQ RO,R1,R2; //If zero flag is set,then RO=R1+R2
ADDS RO,R1,R2; //RO=R1+R2,并影响标志位.
ADDEQS RO,R1,R2; //如果CPSR的Z=1(即结果为0),则RO=R1+R2,并影响CPSR标志位.
ARM指令集分为的五大类
ARM汇编指令集可分为以下五大类:
- (1)分支指令
- (2)数据处理指令
- (3)加载/存储指令
- (4)协处理器指令
- (5)其他指令
最典型的例子简述。
1、分支指令
不带链接的分支指令:
B Label;
带链接的分支指令:
BL Label; //LR=PC+4, 记住返回地址
2、数据处理指令
主要是算数运算,包括比较指令、逻辑运算和数据传输指令。
这些指令在reg里运行而不是在memory。它们一般都具有一个或两个操作数,第一个操作数总是一个寄存器Rn,而第二个操作数通过移位器送给 ALU。
3、加载/存储指令
ARM 的指令集属于RISC,对存储单元的访问采用了规范的加载(Load)/存储 (Store)方式。
比较重要的 Load/Store 命令有:
STMFD SP!,{R0-R12,LR,PC}; //将 R0-R12、LR、 PC 的内容存到 SP 指向的存储空间中去(压入堆栈)。
LDMFD SP!,{R0-R12,PC}; //将 SP 指向的存 储空间的内容放入 ARM 中的 R0-R12、PC 中去(弹出堆栈)。
这两个命令在函数调用中非常有用,在 C 语言中调用一个函数生成的 ARM 汇编通常如下图所示:
在 C 语言中调用一个函数生成的 ARM 汇编
- 对于上面的指令集,到底怎么理解?
- ARM架构的指令集与常见的另一种x86架构的指令集有何不同?
↓↓可以看下面的这个视频作为参考↓↓
ARM架构和CPU的x86架构有啥区别?指令集又是什么?