目 录
ARM指令的典型编码格式如下:
31 28 |
27 25 |
24 21 |
20 |
19 16 |
15 12 |
11 8 7 0 |
cond |
xxx |
opcode |
s |
rn |
rd |
opcode2 |
ARM指令语法格式如下:
opcode{<cond>} {s} rd, rn, <opcode2>
各个部分解释如下:
u opcode:指令助记符,如mov
u cond: 条件码助记符,默认是al(无条件执行)
u s: 指令的执行是否影响CPSR(当前程序状态寄存器)的值
u rn: 目标寄存器
u opcode2: 第二操作数
应用举例:
add r1, r2, r3
mov r3, #3
str r1, [fp, #12]
下面主要分析条件码和第二操作数。
一、条件码
条件码可以实现高效的分支处理,提高代码效率。
以下为部分条件码:
条件码 |
助记符 |
执行条件 |
含义 |
0000 |
eq |
Z=1 |
相等 |
00001 |
ne |
Z=0 |
不相等 |
… |
… |
… |
… |
1110 |
al |
任意 |
无条件执行 |
二、第二操作数
ARM指令的第二操作数用法比较灵活,有如下几种情况。
u 立即数
u 寄存器
u 寄存器移位
对立即数的解释如下:
立即数的有效位数只有8位(0-7),而另外4位(8-11)所代表的值*2=立即数有效位循环右移的位数。其实,我们也可以认为是将一个8位立即数循环左移(32-右移位数)。比如:0xff, 0x104(1_0000_0100是0100_0001左移2位,或右移30位), 0xff0(可以认为是0xff左移4位或右移28位), 0xff00(可以认为是0xff左移8位或右移24位)。而有些数则不是合法的立即数。比如:0x101,0x102,0xff1,这些数要么首尾相差超过8位,要么只能通过奇数次移位才能得到。我们一般只用到0-0xff。
这些指令没有太多值得分析的地方,所以就不一一列出来了。
文章评论(0条评论)
登录后参与讨论