- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM指令集课案
ARM 指令集
1、***********
2、***********
3、***********
课程目录
单寄存器传送指令
LDR/STR{cond} Rd,地址
— LDR 字数据加载指令
— LDRB 字节数据加载指令
— LDRH 半字数据加载指令
— STR 字数据存储指令
— STRB 字节数据存储指令
— STRH 半字数据存储指令
—LDRSB 有符号字节加载指令
—LDRSH 有符号半字加载指令
举例:
LDR R0,[R1];将存储器地址为R1的字数据读入寄存器R0
LDRB R0,[R1];将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零
LDRH R0,[R1];将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零
STR R0,[R1] ;将R0中的字数据写入以R1为地址的存储器中
STRB R0,[R1];将寄存器R0中的字节数据写入以R1为地址的存储器中
STRH R0,[R1];将寄存器R0中的半字数据写入以R1为地址的存储器中
LOAD/STORE指令寻址方式
——①回写前变址LDR r0,[r1,#4]!
——②前变址LDR r0,[r1,#4]
——③后变址 r0,[r1],#4
Exp:
R0=0R1=0Mem32[0=0Mem32[0=0r0=0 r1=0② r0=0 r1=0③ r0=0 r1=0 多寄存器传送指令
ARM 微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作 指令
LDM 批量数据加载指令
STM 批量数据存储指令
LDM/STM的主要用途是现场保护、数据复制、参数传递等,其模式有8种,前四种用于数据块的传输,后四种是堆栈操作
IA :每次传送后地址加4
IB :每次传送前地址加4
DA:每次传送后地址减4
DB:每次传送前地址减4
FD:满递减堆栈
ED:空递减堆栈
FA:满递增堆栈
EA:空递增堆栈
Mem32[0x80018]=0x03
Mem32[0x80014]=0x02
Mem32[0x80010]=0x01
R0=0R1=0R2=0R3=0Exp:
LDMIA=r0!,{r1-r3}
执行后:
R0指向地址0x0080010 内容为0x01
加载到r1 ,然后r0地址增加,指向
地址0x0080014,内容为0x02,加载到r2
重复直到r3加载后内容为0x03,此时r0
指向0x8001c,所以结果为
R0=0x0008001c
R1=0R2=0R3=0STMIA r9!, {r0,r1,r5}
STMFD R13!,{R0,R4-R12,LR};将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈。
LDMFD R13!,{R0,R4-R12,PC};将堆栈内容恢复到寄存器(R0,R4到R12,LR)
交换指令
SWP:字交换
SWPB:字节交换
EXP:
mem32[0x9000]=0 r0=0 r1=0 r2=0 SWP r0 , r1 ,[r2]
tmp=mem32[r2]=0 mem32[r2]=r1=0 r1=tmp=0结果:
mem32[r2]=r1=0 r0=0 r1=0 r2=0
SWI
Cpsr=nzcvqift_USER
Pc=0Lr =0x003fffff ;lr=r4
R0=0x12
0 SWI 0x123456
结果:
Cpsr=nzcvqift_SVC
Spsr=nzcvqift_USER
Pc=0Lr =0R0=
文档评论(0)