- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章ARM体系结构-V3-指令集20151008分析
(3)LDR—大范围的地址读取伪指令: 指令格式: LDR{cond} register, =expr/label-expr 其中:register为加载的目标寄存器。 expr为32位立即数。 label-expr是基于PC的地址表达式或外部表达 式。 指令功能:LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超过MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR加载指令从文字池读出常量。 ARM伪指令 (7) 应用示例: 伪指令LDR常用于加载芯片外围功能部件的寄存器(32位立即数),以实现各种控制操作,如程序清单3.16所示。 ARM伪指令 (8) 程序清单3.16 加载32位立即数 从PC到文字池的偏移量必须小于4KB。与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。 说明:若没有使用LTORG声明文字池,则汇编器会在程序末尾自动声明。 ARM伪指令 (9) (4)NOP—空操作伪指令: 指令格式: NOP 指令功能:NOP伪指令在汇编时会被代替成ARM中的空操作,比如可能为“MOV R0, R0”指令等。NOP可用于延时操作,如程序清单3.17所示。 程序清单3.17 软件延时 ARM伪指令 (10) Thumb指令集 Thumb指令集可以看做ARM指令集的一个子集,用于支持存储系统数据总线为16位的应用系统。 Thumb指令长度为16位,这样,与32位的ARM指令集相比,有效地节省了系统的存储空间。 但Thumb指令集中的数据处理指令的操作数仍然是32位的,指令寻址地址也是32位的。 Thumb指令集中没有:乘加指令、64位乘法指令、协处理器指令、数据交换指令、程序状态寄存器指令,而且指令的第二操作数受到限制,除了跳转指令B有条件执行功能外,其他指令均为无条件执行。 Thumb指令集有4大类:数据处理指令、跳转指令、Load/Store指令、软件中断指令。 数据处理指令1 数据处理指令2 跳转指令 格 式 功 能 B{cond} label PC=label; 若有cond,则label必须在当前指令的-256~+256字节范围内; 否则,label必须在当前指令的-2K~+2K字节范围内 BL label R14=PC+4,PC=label; label必须在当前指令的-4M~+4M字节范围内 BX Rn PC=Rn,且切换处理器状态 Load/Store指令 1 Load/Store指令 2 软件中断指令 格 式 功 能 SWI 8位立即数 8位立即数为中断号 位操作指令应用 ;将R2中高8位数据传送到R3的低8位中。 MOV R0, R2, LSR #24 ORR R3, R0, R3, LSL #8 用移位实现乘法应用 MOV R0, R0, LSL #n ; R0=R0n; R0=R0*(2**n) ADD R0, R0, R0, LSL #n ; R0=R0+R0*(2**n) RSB R0, R0, R0, LSL #n ; R0= R0*(2**n) - R0 64位数据加减运算应用 ;假设,R1R0存放一个64位数据,R3R2存放另一个64位数据。 64位数据加法运算 ADDS R0, R0, R2 ADC R1, R1, R3 64位数据减法运算 SUBS R0, R0, R2 SBC R1, R1, R3 数据变换应用 ;已知:R0=A B C D, 转换目标:R0= D C B A 程序一: EOR R1, R0, R0, ROR #16 ;R1=A^C, B^D, C^A, D^B BIC R1, R1, #0xFF0000 ;R1=A^C, 0, C^A, D^B MOV R0, R0, ROR #8 ;R0=D, A, B, C EOR R0, R0, R1, LSR #8 ;R0=D, C, B, A 程序二: MOV R2, #0xFF ;R2=0xFF ORR R2, R2, #0xFF0000 ;R2=0x00FF00FF A
文档评论(0)