- 1、本文档共103页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM及Thumb指令集的
ARM及Thumb指令集;ARM指令小节目录;ARM指令长度概述; ARM指令长度概述;简单的ARM程序;4.2 指令集介绍; ARM是三地址指令格式,指令的基本格式如下:; ARM指令的基本格式如下:;4.2 指令集介绍;4.2 指令集介绍;4.2 指令集介绍; 桶形移位器; 桶形移位器操作;4.2 指令集介绍;4.2 指令集介绍;ARM指令目录; ARM指令的基本格式如下:;;4.2 指令集介绍;ARM指令可以通过添加适当的条件码前缀来达到条件执行的目的。
这样可以提高代码密度,减少分支跳转指令数目,提高性能。
CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2skip
默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。 CMP不需要增加 “S”就可改变相应的标志位。
loop … SUBS r1,r1,#1 BNE loop
;;程序状态???存器;条件执行示例;4.2 指令集介绍;;;LDR和STR——字和无符号字节加载/存储指令
LDR指令用于从内存中读取单一字或字节数据存入寄存器中,STR指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下:;ARM存储器访问指令——单寄存器存储;ARM存储器访问指令——单寄存器存储;ARM存储器访问指令——单寄存器存储;ARM存储器访问指令——单寄存器存储;LDR和STR——半字和有符号字节加载/存储指令
这类LDR/STR指令可加载有符号半字或字节,可加载/存储无符号半字。偏移量格式、寻址方式与加载/存储字和无符号字节指令相同。 ;ARM存储器访问指令——单寄存器存储;LDR和STR指令应用示例:
1.加载/存储字和无符号字节指令
LDR R2,[R5] ;将R5指向地址的字数据存入R2
STR R1,[R0,#0x04] ;将R1的数据存储到R0+0x04地址
LDRB R3,[R2],#-1 ;将R2指向地址的字节数据存入R3,R2=R2-1
STRB R0,[R3,-R8 ASR #2] ;R0-[R3-R8/4],存储R0的最低有效字节
2.加载/存储半字和有符号字节指令
LDRSB R1,[R0,R3] ;将R0+R3地址上的字节数据存入R1,
;高24位用符号扩展
LDRH R6,[R2],#2 ;将R2指向地址的半字数据存入R6,高16位用0扩展
;读出后,R2=R2+2
STRH R1,[R0,#2]! ;将R1的半字数据保存到R0+2地址,
;只修改低2字节数据,然后R0=R0+2; 练习;半字和字节命令;有符号半字和有符号字节命令;T后缀指令;目标寄存器器和基址寄存器是同一寄存器;使用R15时的数据传送;;ARM存储器访问指令——多寄存器存取;ARM存储器访问指令——多寄存器存取;ARM存储器访问指令——多寄存器存取;ARM存储器访问指令——多寄存器存取;ARM存储器访问指令——多寄存器存取; 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:
向上生长:向高地址方向生长,称为递增堆栈
向下生长:向低地址方向生长,称为递减堆栈;4.1 ARM处理器寻址方式;栈顶;所以可以组合出四种类型的堆栈方式:
满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等;
空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等;
满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;
空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 ; 数??块传送指令;;ARM存储器访问指令——寄存器和存储器交换指令; 复习;单寄存器数据传送; 地址访问;0x5;LDM / STM指令允许一次传送1到16个寄存器到/从存储器中。
寄存器传送顺序不能被指定
最小数字的寄存器总是被传送到/从存储器的最低地址上。
LDMIA r10,{r0,r1,r4}
基址寄存器指定存储器访问开始的地址
块传送指令针对下
文档评论(0)