曲径通幽论坛

标题: ARM 指令集 [打印本页]

作者: beyes    时间: 2009-8-1 21:47
标题: ARM 指令集
ARM处理器指令集主要有 6大类:
指令
指令功能
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位乘法
MVF
传送值到浮点数寄存器
MVN
数据取反传送
ORR
逻辑或
RSB
逆向减法
RSC
带借位的逆向减法
SBC
带借位减法
STC
协处理器寄存器写入存储
STM
批量内存字写入
STR
寄存器到存储器的数据传输
SUB
减法
SWI
软件中断
TEQ
相等测试
TST
位测试



作者: beyes    时间: 2009-8-1 22:14
标题: ARM 指令寻址方式
1、立即数寻址
操作数就在指令中给出,只要取出指令也就取到了操作数,这个操作数被成为立即数。
ADD R0, R0, #1        ; R0 <- R0 + 1
ADD R0, R0, #0x3A              ; R0 <- R0 + 0x3A
上面指令中,第 2 个源操作数为立即数。

2、寄存器寻址
寄存器寻址,即利用寄存器中的数值作为操作数。
ADD R0, R1, R2         ; R0 <- R1 + R2
该指令将寄存器 R1 和 R2 的内容想家,结果存在 R0 中。

3、寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。
ADD R0, R1, [R2]        ; R0 <- R1 + [R2]
LDR R1, [R1]               ; R0 <- [R1]
第 1 条指令,以寄存器 R2 的内容作为操作数的地址,然后与 R1 相加,其结果存入寄存器 R0 中。
第 2 条指令,以 R1 的值为地址的寄存器中的内容送到 R0 中。

4、基址变址寻址
基址变址的寻址方式就是将寄存器 ( 该寄存器一般称作基址寄存器 )的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
LDR R0, [R1, #0x0A]               ; R0 <- [R1 + 0x0A]
LDR R0, [R1, #0x0A]!                           ; R0 <- [R1 + 0x0A] , R1 <- R1 + 0x0A
第 1 条指令,将寄存器 R1 的内容加上 0x3A 形成操作数有效地址,然后将该地址处的操作数送往 R0 中。
第 2 条指令,将寄存器 R1 的内容加上 0x3A 形成操作数有效地址,然后将该地址处的操作数送往 R0 中,最后 R1 + 0x0A 的值还存往 R1中,R1得到更新。

5、多寄存器寻址
多寄存器寻址,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令玩成传送最多 16 个通用寄存器的值。
LDMIA R0, {R1, R2, R3,R4}                   ; R1 <- [R0]
                                                                    ; R2 <- [R0 + 4]
                                                                    ; R3 <- [R0 + 8]
                                                                    ; R4 <- [R0 + 12]
该指令的后缀 IA 是“ Increment After ” 之意,表示每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到 R1~R4 。

6、相对寻址
与基址寻址方式相似,相对寻址以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移量,将两者相加后得到的操作数作为有效地址。
                     BL   NEXT                ; 跳转到子程序 NEXT 处执行
                     ... ...
NEXT
                     ... ...
                     MOV PC, LR            ; 从子程序返回

7、堆栈寻址
根据堆栈的生成方式,堆栈分为递增堆栈 (Ascending Stack),和递减堆栈 (Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有 4 种堆栈工作方式:
(1) 满递增堆栈:堆栈指针指向最后压入的数据,并且堆栈以递增方式向上生成。
(2) 满递减堆栈:堆栈指针指向最后压入的数据,并且堆栈以递减方式向下生成。
(2) 空递增堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
(3) 空递减堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2