1 / 24
文档名称:

ARM指令集指南.doc

格式:doc   大小:56KB   页数:24页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

ARM指令集指南.doc

上传人:s1188831 2022/6/22 文件大小:56 KB

下载得到文件列表

ARM指令集指南.doc

文档介绍

文档介绍:ARM指令集2008-03-12 15:27跳转指令
跳转指令用于实现程序流程的跳转,在ARM 程序中有如下两种方法可以实现程序流程的跳转:
l 使用专门的跳转指令。
l 直接向程序计数器PC 写入跳转地址值。
4 的值传送到PC, 常用于子程序返回
MOV R1, R0, LSL#3; 将寄存器R0 的值左移3 位后传送到R1
(2) MVN指令
MVN指令的格式为:
MVN{S} 目的寄存器, 源操作数
MVN指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S 定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。
指令示例如下:
MVN R0, #0; 将立即数0 取反传送到寄存器R0 中, 完成后R0=-1
(3) CMP 指令
CMP指令的格式为:
CMP 操作数1, 操作数2
CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1与操作数2 的关系(大、小、相等),例如,当操作数1大于操作数2,则此后的有GT后缀的指令将可以执行。
指令示例如下:
CMP R1, R0; 将寄存器R1 的值与寄存器R0 的值相减, 并根据结果设置CPSR 的标志位
CMP R1, #100; 将寄存器R1 的值与立即数100 相减, 并根据结果设置CPSR 的标志位
(4) CMN指令
CMN指令的格式为:
CMN 操作数1, 操作数2
CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。
指令示例如下:
CMN R1, R0; 将寄存器R1 的值与寄存器R0 的值相加, 并根据结果设置CPSR 的标志位
CMN R1, #100; 将寄存器R1 的值与立即数100 相加, 并根据结果设置CPSR 的标志位
(5) TST指令
TST指令的格式为:
TST 操作数1, 操作数2
TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。
指令示例如下:
TST R1, #%1; 用于测试在寄存器R1 中是否设置了最低位(%表示二进制数)
TST R1, #0xffe; 将寄存器R1 的值与立即数0xffe 按位与, 并根据结果设置CPSR 的标志位
(6) TEQ指令
TEQ指令的格式为:
TEQ 操作数1, 操作数2
TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR 中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。
指令示例如下:
TEQ R1, R2; 将寄存器R1 的值与寄存器R2 的值按位异或, 并根据结果设置CPSR 的标志位
(7) ADD指令
ADD指令的格式为:
ADD{S} 目的寄存器, 操作数1, 操作数2
ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
指令示例如下:
ADD R0, R1, R2; R0 = R1 + R2
ADD R0, R1, #256; R0 = R1 + 256
ADD R0, R2, R3, LSL#1; R0 = R2 + (R3 << 1)
(8) ADC指令
ADC指令的格式为:
ADC{S} 目的寄存器, 操作数1, 操作数2
ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
以下指令序列完成两个128位数的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器