ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来 完成。
ARM微处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大类,具体的指令及功能如表2.7所示(表中的指令为基本ARM指令,不包括派生的ARM指令)。
表2.7 ARM 指令及功能描述
助记符 | 指令功能描述 |
ADC | 带进位加法指令 |
ADD | 加法指令 |
AND | 逻辑与指令 |
B | 跳转指令 |
BIC | 位清零指令 |
续表
助记符 | 指令功能描述 |
BL | 带返回的跳转指令 |
BLX | 带返回和状态切换的跳转指令 |
BX | 带状态切换的跳转指令 |
CDP | 协处理器数据操作指令 |
CMN | 比较反值指令 |
CMP | 比较指令 |
EOR | 异或指令 |
LDC | 存储器到协处理器的数据传输指令 |
LDM | 加载多个寄存器指令 |
LDR | 存储器到寄存器的数据传输指令 |
MCR | 从ARM 寄存器到协处理器寄存器的数据传输指令 |
MLA | 乘加运算指令 |
MOV | 数据传送指令 |
MRC | 从协处理器寄存器到ARM 寄存器的数据传输指令 |
MRS | 传送CPSR 或SPSR 的内容到通用寄存器指令 |
MSR | 传送通用寄存器到CPSR 或SPSR 的指令 |
MUL | 32 位乘法指令 |
MLA | 32 位乘加指令 |
MVN | 数据取反传送指令 |
ORR | 逻辑或指令 |
RSB | 逆向减法指令 |
RSC | 带借位的逆向减法指令 |
SBC | 带借位减法指令 |
STC | 协处理器寄存器写入存储器指令 |
STM | 批量内存字写入指令 |
STR | 寄存器到存储器的数据传输指令 |
SUB | 减法指令 |
SWI | 软件中断指令 |
SWP | 交换指令 |
TEQ | 相等测试指令 |
TST | 位测试指令 |
2.12.2 指令的条件域
当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。
每一条ARM指令包含4位的条件码,位于指令的最高 4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后 缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。
在16种条件标志码中,只有15种可以使用,如表2.8所示,第16种(1111)为系统保留,暂时不能使用。
表2.8 指令的条件码
条件码 | 助记符后缀 | 标 志 | 含 义 |
0000 | EQ | Z 置位 | 相等 |
0001 | NE | Z 清零 | 不相等 |
0010 | CS | C 置位 | 无符号数大于或等于 |
0011 | CC | 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 From: https://blog.51cto.com/u_15903730/5915581