arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学

上传人:yulij****0329 文档编号:141062817 上传时间:2020-08-04 格式:PPT 页数:112 大小:1.46MB
返回 下载 相关 举报
arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学_第1页
第1页 / 共112页
arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学_第2页
第2页 / 共112页
arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学_第3页
第3页 / 共112页
arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学_第4页
第4页 / 共112页
arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学_第5页
第5页 / 共112页
点击查看更多>>
资源描述

《arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学》由会员分享,可在线阅读,更多相关《arm体系架构与原理教学-04arm指令系统及汇编程序设计演示教学(112页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统教案,2020/8/4,2,提纲,1,3,2,4,ARM 指令系统,ARM和THUMB混合调用,ATPCS 介绍,THUMB 指令系统,第四章 ARM指令系统及汇编程序设计,3,跳转指令,跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转: 使用专门的跳转指令。 直接向程序计数器PC写入跳转地址值。 ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令: B跳转指令 BL带返回的跳转指令 BLX带返回和状态切换的跳转指令 BX带状态切换的跳转指令,ARM 指令系统,5,BL指令,BL指令的格式为: BL条件 目标

2、地址 BL 是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14 的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令: BLLabel /*当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中 */,ARM 指令系统,6,BLX指令,BLX指令的格式为: BLX 目标地址 BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。因此,当子程序使用Thumb指令集,而调用者

3、使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器R14值复制到PC中来完成。,ARM 指令系统,7,BX指令,BX指令的格式为: BX条件 目标地址 BX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令。,ARM 指令系统,8,数据处理指令,数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。 数据传送指令用于在寄存器和存储器之间进行数据的双向传输。 算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。 比较

4、指令不保存运算结果,只更新CPSR中相应的条件标志位。,ARM 指令系统,9,数据处理指令灵活的第二操作数,如:ADDcondS Rd, Rn, Operand2 Operand2可能的形式: #immed_8r Rm,shift ADD r0, r1, #100 ADD r0, r1, r2 ADD r0, r1, r2, ASR #1,ARM 指令系统,R0 = r1 + 100,R0 = r1 + r2,R0 = r1 + (r2算术右移一位),若指定S,则根据操作结果更新条件码标志,10,数据处理指令Shift 移位模式,ASRn 算术右移n位(1=n=32) LSLn 逻辑左移n位(

5、1=n=32) LSRn 逻辑右移n位(1=n=32) RORn 循环右移n位(1=n=32) RRX 带扩展的循环右移1位 type Rs type = ASR/LSL/LSR/ROT,ARM 指令系统,11,ASR,算术右移n位即Rm中的内容除以2的n次方。将原来的位31拷贝到寄存器左边的n位中,即空出的最高位补符号位。,ARM 指令系统,12,LSR和LSL,逻辑右移n位,即将Rm的内容除以2的n次方。寄存器左边的n位清零。 逻辑左移n位,即将Rm的内容乘以2的n次方。寄存器右边的n位清零。,ARM 指令系统,13,ROR,循环右移n位,把寄存器右边的n位移动到结果的左边n位。,ARM

6、指令系统,14,RRX,带扩展的循环右移将Rm的内容循环右移一位。进位标志拷贝到Rm的位31。,ARM 指令系统,15,MOV指令,MOV指令的格式为: MOV条件S目的寄存器,源操作数 MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。指令示例: MOVR1,R0 MOV R1,R0,LSL 3,ARM 指令系统,16,MVN指令,MVN指令的格式为: MVN条件S目的寄存器,源操作数 MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存

7、器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。 MVNR0,0,ARM 指令系统,17,CMP指令,CMP指令的格式为: CMP条件 操作数1,操作数2 CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1与操作数2的关系(大、小、相等),例如,当操作数1大于操作操作数2,则此后的有GT 后缀的指令将可以执行。 CMPR1,R

8、0 CMPR1,100,ARM 指令系统,18,CMN指令,CMN指令的格式为: CMN条件 操作数1,操作数2 CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。 CMNR1,R0 CMNR1,100,ARM 指令系统,19,TST指令,TST指令的格式为: TST条件 操作数1,操作数2 TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用

9、来检测是否设置了特定的位。 TSTR1,1 TSTR1,0 xffe,ARM 指令系统,20,TEQ指令,TEQ指令的格式为: TEQ条件 操作数1,操作数2 TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。 TEQR1,R2,ARM 指令系统,21,ADD指令,ADD指令的格式为: ADD条件S 目的寄存器,操作数1,操作数2 ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。 AD

10、D R0,R1,R2 ADD R0,R1,#256 ADD R0,R2,R3,LSL#1,ARM 指令系统,22,ADC指令,ADC指令的格式为: ADC条件S 目的寄存器,操作数1,操作数2 ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。 以下指令序列完成两个128位数的加法,第一个数存放在寄存器R7R4,第二个数存放在寄存器R11R8,运算结果存放在寄存器R3R0: ADDS R0,R4,R8 ; 加低端的字 ADCS R1,R5,R9 ; 加第二个字,带进位

11、ADCS R2,R6,R10 ; 加第三个字,带进位 ADC R3,R7,R11 ; 加第四个字,带进位,ARM 指令系统,23,SUB指令,SUB指令的格式为: SUB条件S 目的寄存器,操作数1,操作数2 SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。 SUB R0,R1,R2 ; R0 = R1 - R2 SUB R0,R1,#256 ; R0 = R1 - 256 SUB R0,R2,R3,LSL#1 ; R0 = R2 - (R3 1),ARM

12、 指令系统,24,SBC指令,SBC指令的格式为: SBC条件S 目的寄存器,操作数1,操作数2 SBC指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。 SUBS R0,R1,R2,ARM 指令系统,25,RSB指令,RSB指令的格式为: RSB条件S 目的寄存器,操作数1,操作数2 RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。 RSB R0,R1

13、,R2 RSB R0,R1,#256 RSB R0,R2,R3,LSL#1,ARM 指令系统,26,RSC指令,RSC指令的格式为: RSC条件S 目的寄存器,操作数1,操作数2 RSC指令用于把操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。 RSC R0,R1,R2,ARM 指令系统,27,AND指令,AND指令的格式为: AND条件S 目的寄存器,操作数1,操作数2 AND

14、指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于屏蔽操作数1的某些位。 AND R0,R0,3,ARM 指令系统,28,ORR指令,ORR指令的格式为: ORR条件S 目的寄存器,操作数1,操作数2 ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。 ORR R0,R0,3,ARM 指令系统,29,EOR指令,EOR指令的格式为: EOR条件S 目的寄

15、存器,操作数1,操作数2 EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于反转操作数1的某些位。 EOR R0,R0,3,ARM 指令系统,30,BIC指令,BIC指令的格式为: BIC条件S 目的寄存器,操作数1,操作数2 BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。操作数2为32位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。 BIC R0,R0,0

16、 x0b,ARM 指令系统,31,乘法指令与乘加指令,ARM微处理器支持的乘法指令与乘加指令共有6条,可分为运算结果为32位和运算结果为64位两类,与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数1必须是不同的寄存器。 乘法指令与乘加指令共有以下6条: MUL32位乘法指令 MLA32位乘加指令 SMULL64位有符号数乘法指令 SMLAL64位有符号数乘加指令 UMULL64位无符号数乘法指令 UMLAL64位无符号数乘加指令,ARM 指令系统,32,MUL指令,MUL指令的格式为: MUL条件S目的寄存器,操作数1,操作数2 MUL指令完成将操作数1与操作数2的乘法运算,并把结果放置到目的寄存器中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的有符号数或无符号数。 MULR0,R1,R2 MULSR0,R1,R2,ARM 指令系统,33,MLA指令,MLA指令的格式为: MLA条件S 目的寄存器,操作数1,操作数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号