分类: LINUX
2009-04-29 17:51:25
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 |
位测试指令 |
当处理器工作在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 |
忽略 |
无条件执行 |