- 1、本文档共75页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式微处理器 arm指令集 幻灯片课件.ppt
第五讲 ARM指令集与编程
孙成富
ARM 指令集的特点
向后兼容:新版本增加指令,并保持指令向后兼容;
Load-store 结构*
load/store –从存储器中读某个值,操作完后再将其放回存储器中
只对存放在寄存器的数据进行处理;
对于存储器中的数据,只能使用load/store指令进行存取
指令格式
指令格式
3 地址指令格式
在ARM状态中使用
例
指令语法
目标寄存器(Rd)
源寄存器1(Rn)
源寄存器2(Rm)
ADD r3,r1,r2
r3
r1
r2
ARM指令编码格式
说明
Cond
指令执行的条件编码
Opcode
指令操作符编码
S
决定指令的操作是否影响CPSR的值
Rd
操作目标寄存器编码
Rn
包含第一操作数的寄存器编码
Shifter_operand
表示第二操作数
cond
001
opcode
s
Rn
Rd
Shifter_operand
31 28 27 25 24 21 20 19 16 15 12 11 8 7 0
ARM指令的寻址方式
寄存器寻址 寄存器中的数据就是操作数
立即寻址 指令中给出了操作数本身
寄存器间接寻址 以寄存器中的数据为地址从存储器取出数据作为操作数
寄存器变址寻址 将寄存器中的数据和指令中的数据相加得到操作数的有效地址
多寄存器寻址 一次完成对多个寄存器的操作
相对寻址 指相对程序计数器PC当前值的寻址方式
堆栈寻址 针对堆栈的寻址方式
数据处理指令 - 2
ADD r0, r1, r2
r0 := r1 + r2
ADC r0, r1, r2
r0 := r1 + r2 + C
SUB r0, r1, r2
r0 := r1 - r2
SBC r0, r1, r2
r0 := r1 - r2 + C - 1
RSB r0, r1, r2
r0 := r2 – r1
RSC r0, r1, r2
r0 := r2 – r1 + C - 1
算术操作
按位逻辑操作
AND r0, r1, r2
r0 := r1 and r2
ORR r0, r1, r2
r0 := r1 or r2
EOR r0, r1, r2
r0 := r1 xor r2
BIC r0, r1, r2
r0 := r1 and (not) r2
寄存器移位
MOV r0, r2
r0 := r2
MVN r0, r2
r0 := not r2
比较操作
CMP r1, r2
set cc on r1 - r2
CMN r1, r2
set cc on r1 + r2
TST r1, r2
set cc on r1 and r2
TEQ r1, r2
set cc on r1 xor r2
数据处理指令 - MOV
MOV指令是把一个数N送到目标寄存器中,N可以是寄存器,也可以是立即数。
MOV指令语法:
〈指令〉{〈cond} {S} Rd, N
例:PRE r0= 5 , r2=6
MOV r0, r2
POST r0=6 ,r2=6
MOV r0, r2
r0 := r2
MVN r0, r2
r0 := not r2
桶形移位器的使用
PRE r0=8, r2=5
MOV r0 ,r2, LSL #2(逻辑左移两位:r22=r5*4)
POST r0=20, r2=5
数据处理指令
移位操作
在任何数据处理指令中,第二个寄存器操作数可以有应用该操作数的移位操作.
逻辑移位
LSL:逻辑左移
字的最小位空位清零
LSR:逻辑右移字的最大位空位清零.
桶形移位器操作
LSL:逻辑左移(Logical Shift Left)。寄存器中字的低端空出的位补0。
LSR:逻辑右移(Logical Shift Right)。寄存器中字的高端空出的位补0。
ASR:算术右移(Arithmetic Shift Right)。算术移位的对象是带符号数,在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。
ROR:循环右移(Rotate Right)。从字的最低端移出的位填入字的高端空出的位。
RRX:扩展为1的循环右移(Rotate Right Extended by 1 place)。操作数右移一位,空位(位[31])用原C标志填充。
数据处理指令 - 3
移位操作 (cont’d)
算术移位
ASR: = LSR
ASL: 算术左移
循环移位: ROR,
文档评论(0)