ARM汇编指令集

上传人:枫** 文档编号:483361450 上传时间:2023-11-06 格式:DOCX 页数:37 大小:81.66KB
返回 下载 相关 举报
ARM汇编指令集_第1页
第1页 / 共37页
ARM汇编指令集_第2页
第2页 / 共37页
ARM汇编指令集_第3页
第3页 / 共37页
ARM汇编指令集_第4页
第4页 / 共37页
ARM汇编指令集_第5页
第5页 / 共37页
点击查看更多>>
资源描述

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

1、ARM 汇编指令集一、跳转指令 跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实 现程序流程的跳转:I 使用专门的跳转指令。II 直接向程序计数器PC写入跳转地址值。通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR, PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序 调用。ARM 指令集中的跳转指令可以完成从当前指令向前或向后的 32MB 的地址空间的跳 转,包括以下4条指令:1、B 指令B 指令的格式为:B条件目标地址B 指令是最简单的跳转指令。一旦遇到一个 B 指令, ARM 处

2、理器将立即跳转到给定的目 标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量, 而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位 有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为 26 位(前后 32MB 的地址 空间)。以下指令:BLabel;程序无条件跳转到标号Label处执行CMP R1,0;当 CPSR 寄存器中的 Z 条件码置位时,程序跳转到标号Label 处执行BEQ Label2、BL 指令BL指令的格式为:BL条件目标地址BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可

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

4、过将寄存器R14值复制到PC中 来完成。4、BX 指令BX 指令的格式为:BX条件目标地址BX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以 是 Thumb 指令。二、数据处理指令数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。 数据传送指令用于在寄存器和存储器之间进行数据的双向传输。算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存 器中,同时更新CPSR中的相应条件标志位。比较指令不保存运算结果,只更新CPSR中相应的条件标志位。数据处理指令共以下16 条。1、MOV 指令MOV 指令的格式为:MOV条件S目的寄存器

5、,源操作数MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其 中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR 中条件标志位的值。指令示例:MOV R1, R0;将寄存器R0的值传送到寄存器R1MOV PC,R14;将寄存器R14的值传送到PC,常用于子程序返回MOV R1,R0,LSL#3;将寄存器R0的值左移3位后传送到R12、MVN 指令MVN 指令的格式为:MVN条件S目的寄存器,源操作数MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。 与MOV指令不同之处是在传送之前按位被取反了,即把一

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

7、;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位CMPR1,#100;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位4、CMN 指令CMN 指令的格式为:CMN条件操作数1,操作数2CMN 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时 更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改 条件标志位。指令示例:CMN R1, R0;将寄存器R1的值与寄存器R0的值相加,并根据结果 设置CPSR的标志位CMNR1,100置;将寄存器R1的值与立即数100相加,并根据结果设CPSR的标志位5、 T

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

9、异或运算, 并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2 是否相等。指令示例:;将寄存器R1的值与寄存器R2的值按位异或,并根TEQ R1, R2据结果设置CPSR的标志位7、 ADD 指令ADD 指令的格式为:ADD条件S目的寄存器,操作数1,操作数2ADD 指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1 应是一个寄存 器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。指令示例:ADDR0,R1,R2; R0 = R1 + R2ADDR0,R1,#256; R0 = R1 + 256ADDR0,R2,R3, LSL#1; R0 =

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

11、ADCSR2, R6, R10ADCR3, R7, R119、 SUB 指令SUB 指令的格式为:加低端的字加第二个字,带进位 加第三个字,带进位; 加第四个字,带进位SUB条件S目的寄存器,操作数1,操作数2SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符 号数或无符号数的减法运算。指令示例:SUBR0,R1,R2; R0 = R1 - R2SUBR0,R1,#256; R0 = R1 - 256SUBR0,R2,R3, LSL#1; R0 = R2 - (R3 1)10、C 指

12、令 C 指令的格式为C条件S目的寄存器,操作数1,操作数2C指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1 应是一个寄存器,操作数2可以是一个寄存器,被移位的 寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法, 注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。指令示例:SUBS R0, R1, R2;R0 = R1 - R2 - ! C,并根据结果设CPSR的进位标志位11、R指令R指令的格式为:R条件S目的寄存器,操作数1,操作数2R指令称为逆向减法指令,用于把操作数2

13、减去操作数1,并将结果存放到目的寄存器 中。操作数1 应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即 数。该指令可用于有符号数或无符号数的减法运算。指令示例:RR0,R1,R2;R0 = R2 - R1RR0,R1,#256;R0 = 256 - R1RR0,R2,R3, LSL#1; R0 = (R3 1) - R212、 RSC 指令RSC 指令的格式为:RSC条件S目的寄存器,操作数1,操作数2RSC指令用于把操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果 存放到目的寄存器中。操作数1 应是一个寄存器,操作数2可以是一个寄存器,被移位的寄 存器

14、,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法, 注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。 指令示例:RSCRO, Rl, R2; R0 = R2 - R1 - ! C13、AND 指令AND 指令的格式为:AND条件S目的寄存器,操作数1,操作数2AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常 用于屏蔽操作数1的某些位。指令示例:AND RO, R0,#3;该指令保持R0的0、1位,其余位清丿 二,零。14、ORR 指令ORR指令的格式为:ORR条件S目的寄存器,操作数1,操作数2ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常 用于设置操作数1的某些位。指令示例:ORR R0, R0,3; 该指令设置 R0 的 0、 1 位,其余位保持不变。15、EOR 指令EOR指令的格式为:EOR条件S目的寄存器,操作数1,操作数2EOR指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数

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

当前位置:首页 > 学术论文 > 其它学术论文

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