曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5419|回复: 1
打印 上一主题 下一主题

ARM 指令集

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-8-1 21:47:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM处理器指令集主要有 6大类:
      跳转指令
      数据处理指令
      程序状态寄存器 (PSR) 处理指令
      加载/存储指令
      协处理器指令
      异常产生指令
指令
指令功能
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
位测试


4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
沙发
 楼主| 发表于 2009-8-1 22:14:57 | 只看该作者

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) 空递减堆栈: 堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 02:37 , Processed in 0.063603 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表