3、ARM9指令系统.ppt

3、ARM9指令系统

习题3 1. ARM指令有哪几种寻址方式?试分别叙述各自的特点并举例说明。 2.叙述ARM9指令的分类有哪些。 3.简述ARM9的LDM/STM堆栈指令中空、满、递增、递减的含义。 4.BX和BL指令有什么不同? (15)UMULL指令 格式为: UMULL{条件}{S} 目的寄存器Low,目的寄存器低High,操作数1,操作数2 UMULL指令是无符号乘法指令,完成将操作数1与操作数2的乘法运算,并把结果的低32位放置到目的寄存器Low中,结果的高32位放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。 其中,操作数1和操作数2均为32位的无符号数。 算术逻辑运算指令 指令示例: UMULL R1,R2,R3,R4 ;R1 = (R3 × R4)的低32位 ;R2 = (R3 × R4)的高32位 算术逻辑运算指令 (16)UMLAL指令 格式为: UMLAL{条件}{S} 目的寄存器Low,目的寄存器低High,操作数1,操作数2 UMLAL指令是无符号长乘法指令,完成将操作数1与操作数2的乘法运算,并把结果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均为32位的无符号数。 算术逻辑运算指令 对于目的寄存器Low,在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位。 对于目的寄存器High,在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位。 指令示例: UMLAL R1,R2,R3,R4 ;R1 = (R3× R4) 的低32位 + R1 ;R2 = (R3× R4) 的高32位 + R2 算术逻辑运算指令 比较和测试指令 (1)CMP指令 格式为: CMP{条件} 操作数1,操作数2 CMP指令是比较指令,该指令是做一次减法运算,但不存储结果,只是刷新条件标志位,根据条件标志位判断操作数的大小。 对条件位的影响是:结果为正数则N=0,结果为负数则N=1;结果为0则Z=1,结果不为0则Z=0;如果产生借位则C=0,没有借位则C=1;结果是符号溢出则V=1,否则V=0。 指令示例: CMP R1,#0x30 ;比较R1和0x30 ADDCS R5,R5,#0x20 ;如果C=1,则R5=R5+0x20 ADDCC R5,R5,#0x10 ;如果C=0,则R5=R5+0x10 比较和测试指令 (2)CMN指令 格式为: CMN{条件} 操作数1,操作数2 CMN指令是比较非指令,也是做一次减法运算,用第1操作数减去第2操作数的非值,结果不保存,只是刷新条件标志位,对条件标志位的影响和比较指令CMP相同。 比较和测试指令 指令示例: CMN R1,#0x00 ;比较R1和0xFFFFFFFF ADDCS R5,R5,#0x20 ;如果C=1,则R5=R5+0x20 ADDCC R5,R5,#0x10 ;如果C=0,则R5=R5+0x10 比较和测试指令 (3)TST指令 格式为: TST{条件} 操作数1,操作数2 TST指令是位测试指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。 指令示例: TST R2,#0x01 ;将寄存器R1的值与立即数 0x01按位与,并根据结果设置CPSR的标志位,用来判断R2中最低位是否为0。 比较和测试指令 (4)TEQ指令 格式为: TEQ{条件} 操作数1,操作数2 TEQ指令是测试指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。 指令示例: TEQ R1,#0x10 ;将寄存器R1的值与0x10按位异或,并根据结果设置 ;CPSR的标志位,若Z=1则表示R1的内容是0x10 比较和测试指令 3.2.5 ARM 分支指令 在ARM指令集中,没有专门的子程序调用指令,把分支和子程序调用看成是同一种操作,分支指令用于实现程序流程的跳转,在ARM程序中可以通过使用专门的跳转指令或是直接向程序计数器PC写入跳转地址值的方法来实现。 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存

文档评论(0)

1亿VIP精品文档

相关文档