ARM指令集指南设计

上传人:夏** 文档编号:488443081 上传时间:2023-01-06 格式:DOC 页数:24 大小:56.50KB
返回 下载 相关 举报
ARM指令集指南设计_第1页
第1页 / 共24页
ARM指令集指南设计_第2页
第2页 / 共24页
ARM指令集指南设计_第3页
第3页 / 共24页
ARM指令集指南设计_第4页
第4页 / 共24页
ARM指令集指南设计_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《ARM指令集指南设计》由会员分享,可在线阅读,更多相关《ARM指令集指南设计(24页珍藏版)》请在金锄头文库上搜索。

1、wordARM 指令集指南.txt人永远不知道谁哪次不经意的跟你说了再见之后就真的再也不见了。一分钟有多长?这要看你是蹲在厕所里面,还是等在厕所外面ARM指令集2008-03-12 15:27跳转指令跳转指令用于实现程序流程的跳转,在ARM 程序中有如下两种方法可以实现程序流程的跳转:l 使用专门的跳转指令。l 直接向程序计数器PC 写入跳转地址值。通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用“MOV LR, PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。ARM指令集中的跳转指令可以完成从当前指令向前

2、或向后的32MB的地址空间的跳转,包括以下4条指令:l B 跳转指令。l BL 带返回的跳转指令。l BLX 带返回和状态切换的跳转指令。l BX 带状态切换的跳转指令。(1) B指令B指令的格式为:B 目标地址B指令是最简单的跳转指令。一旦遇到一个B指令, ARM处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移为26位(前后32MB的地址空间)。如下所示:B Label; 程序无条件跳转到标号Labe

3、l 处执行CMP R1, 0; 当CPSR 存放器中的Z 条件码置位时, 程序跳转到标号Label 处执行BEQ Label(2) BL指令BL指令的格式为:BL 目标地址BL是另一个跳转指令,但跳转之前,会在存放器R14中保存PC的当前容,因此,可以通过将R14的容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个根本但常用的手段,如下所示:BL Label; 当程序无条件跳转到标号Label 处执行时, 同时将当前的PC 值保存到R14 中(3) BLX指令BLX指令的格式为:BLX 目标地址BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器

4、的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前容保存到存放器R14中。因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将存放器R14值复制到PC中来完成。(4) BX指令BX指令的格式为:BX 目标地址BX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令。2.14.2 数据处理指令数据处理指令可分为数据传送指令、算术逻辑运算指令和比拟指令等。数据传送指令用于在存放器和存储器之间进展数据的双向传输。算术逻辑运算指令完成常用的算术与逻辑

5、的运算,该类指令不但将运算结果保存在目的存放器中,同时更新CPSR中的相应条件标志位。比拟指令不保存运算结果,只更新CPSR中相应的条件标志位。数据处理指令包括:l MOV 数据传送指令。l MVN 数据取反传送指令。l CMP 比拟指令。l CMN 反值比拟指令。l TST 位测试指令。l TEQ 相等测试指令。l ADD 加法指令。l ADC 带进位加法指令。l SUB 减法指令。l SBC 带借位减法指令。l RSB 逆向减法指令。l RSC 带借位的逆向减法指令。l AND 逻辑与指令。l ORR 逻辑或指令。l EOR 逻辑异或指令。l BIC 位去除指令。(1) MOV指令MOV指

6、令的格式为:MOVS 目的存放器, 源操作数MOV指令可完成从另一个存放器、被移位的存放器或将一个立即数加载到目的存放器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。指令示例如下:MOV R1, R0; 将存放器R0 的值传送到存放器R1MOV PC, R14; 将存放器R14 的值传送到PC, 常用于子程序返回MOV R1, R0, LSL3; 将存放器R0 的值左移3 位后传送到R1(2) MVN指令MVN指令的格式为:MVNS 目的存放器, 源操作数MVN指令可完成从另一个存放器、被移位的存放器或将一个立即数加载到目的存放器。与

7、MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的存放器中。其中S 定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。指令示例如下:MVN R0, 0; 将立即数0 取反传送到存放器R0 中, 完成后R0=-1(3) CMP 指令CMP指令的格式为:CMP 操作数1, 操作数2CMP指令用于把一个存放器的容和另一个存放器的容或立即数进展比拟,同时更新CPSR中条件标志位的值。该指令进展一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1与操作数2 的关系(大、小、相等),例如,当操作数1大于操作数2,如此此后的有G

8、T后缀的指令将可以执行。指令示例如下:CMP R1, R0; 将存放器R1 的值与存放器R0 的值相减, 并根据结果设置CPSR 的标志位CMP R1, 100; 将存放器R1 的值与立即数100 相减, 并根据结果设置CPSR 的标志位(4) CMN指令CMN指令的格式为:CMN 操作数1, 操作数2CMN指令用于把一个存放器的容和另一个存放器的容或立即数取反后进展比拟,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。指令示例如下:CMN R1, R0; 将存放器R1 的值与存放器R0 的值相加, 并根据结果设置CPSR 的标志位CMN R1

9、, 100; 将存放器R1 的值与立即数100 相加, 并根据结果设置CPSR 的标志位(5) TST指令TST指令的格式为:TST 操作数1, 操作数2TST指令用于把一个存放器的容和另一个存放器的容或立即数进展按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。指令示例如下:TST R1, %1; 用于测试在存放器R1 中是否设置了最低位(%表示二进制数)TST R1, 0xffe; 将存放器R1 的值与立即数0xffe 按位与, 并根据结果设置CPSR 的标志位(6) TEQ指令TEQ指令的格式为

10、:TEQ 操作数1, 操作数2TEQ指令用于把一个存放器的容和另一个存放器的容或立即数进展按位的异或运算,并根据运算结果更新CPSR 中条件标志位的值。该指令通常用于比拟操作数1和操作数2是否相等。指令示例如下:TEQ R1, R2; 将存放器R1 的值与存放器R2 的值按位异或, 并根据结果设置CPSR 的标志位(7) ADD指令ADD指令的格式为:ADDS 目的存放器, 操作数1, 操作数2ADD指令用于把两个操作数相加,并将结果存放到目的存放器中。操作数1应是一个存放器,操作数2可以是一个存放器,被移位的存放器,或一个立即数。指令示例如下:ADD R0, R1, R2; R0 = R1

11、+ R2ADD R0, R1, #256; R0 = R1 + 256ADD R0, R2, R3, LSL#1; R0 = R2 + (R3 1)(8) ADC指令ADC指令的格式为:ADCS 目的存放器, 操作数1, 操作数2ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的存放器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改良位标志。操作数1应是一个存放器,操作数2可以是一个存放器,被移位的存放器,或一个立即数。以下指令序列完成两个128位数的加法,第一个数由高到低存放在存放器R7R4,第二个数由高到低存放在存

12、放器R11R8,运算结果由高到低存放在存放器R3R0:ADDS R0, R4, R8; 加低端的字ADCS R1, R5, R9; 加第二个字, 带进位ADCS R2, R6, R10; 加第三个字, 带进位ADC R3, R7, R11; 加第四个字, 带进位(9) SUB指令SUB指令的格式为:SUBS 目的存放器, 操作数1, 操作数2SUB指令用于把操作数1减去操作数2,并将结果存放到目的存放器中。操作数1应是一个存放器,操作数2可以是一个存放器,被移位的存放器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例如下:SUB R0, R1, R2; R0 = R1 - R

13、2SUB R0, R1, #256; R0 = R1 - 256SUB R0, R2, R3, LSL#1; R0 = R2 - (R3 1)(10) SBC指令SBC指令的格式为:SBCS 目的存放器, 操作数1, 操作数2SBC指令用于把操作数1减去操作数2,再减去 CPSR中的C条件标志位的反码,并将结果存放到目的存放器中。操作数1应是一个存放器,操作数2可以是一个存放器,被移位的存放器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改良位标志。该指令可用于有符号数或无符号数的减法 运算。指令示例如下:SUBS R0, R1, R2;

14、 R0 = R1 - R2 - !C, 并根据结果设置CPSR 的进位标志位(11) RSB指令RSB指令的格式为:RSBS 目的存放器, 操作数1, 操作数2RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的存放器中。操作数1应是一个存放器,操作数2可以是一个存放器,被移位的存放器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。指令示例如下:RSB R0, R1, R2; R0 = R2 R1RSB R0, R1, #256; R0 = 256 R1RSB R0, R2, R3, LSL#1; R0 = (R3 1) - R2(12) RSC指令RSC指令的格式为:RSCS 目的存放器, 操作数1, 操作

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

当前位置:首页 > 建筑/环境 > 施工组织

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