没有合适的资源?快使用搜索试试~ 我知道了~
首页ARM 汇编语言指令集
ARM 汇编语言指令集
4星 · 超过85%的资源 需积分: 20 11 下载量 152 浏览量
更新于2023-03-16
评论
收藏 129KB DOC 举报
全部详细的ARM汇编指令集,不看后悔! 一、 跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令。 Ⅱ.直接向程序计数器PC写入跳转地址值。 ……
资源详情
资源评论
资源推荐
ARM 汇编指令集
一、 跳转指令
跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转:
Ⅰ.使用专门的跳转指令。
Ⅱ.直接向程序计数器 PC 写入跳转地址值。
通过向程序计数器 PC 写入跳转地址值,可以实现在 4GB 的地址空间中的任意跳转,在跳
转之前结合使用
MOV LR,PC
等类似指令,可以保存将来的返回地址值,从而实现在 4GB 连续的线性地址空间的子程序
调用。
ARM 指令集中的跳转指令可以完成从当前指令向前或向后的 32MB 的地址空间的跳转,
包括以下 4 条指令:
1、 B 指令
B 指令的格式为:
B{条件} 目标地址
B 指令是最简单的跳转指令。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的目
标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前 PC 值的一个偏移
量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是
24 位有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为 26 位(前后 32MB 的地
址空间)。以下指令:
B Label ;程序无条件跳转到标号 Label 处执行
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 指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有 ARM
状态切换到 Thumb 状态,该指令同时将 PC 的当前内容保存到寄存器 R14 中。因此,当子
程序使用 Thumb 指令集,而调用者使用 ARM 指令集时,可以通过 BLX 指令实现子程序的
调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器 R14 值复制到 PC
中来完成。
4、 BX 指令
BX 指令的格式为:
BX{条件} 目标地址
BX 指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是 ARM 指令,也可以
是 Thumb 指令。
二、数据处理指令
数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。
数据传送指令用于在寄存器和存储器之间进行数据的双向传输。
算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄
存器中,同时更新 CPSR 中的相应条件标志位。
比较指令不保存运算结果,只更新 CPSR 中相应的条件标志位。
数据处理指令共以下 16 条。
1、 MOV 指令
MOV 指令的格式为:
MOV{条件}{S} 目的寄存器,源操作数
MOV 指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其
中 S 选项决定指令的操作是否影响 CPSR 中条件标志位的值,当没有 S 时指令不更新 CPSR
中条件标志位的值。
指令示例:
MOV R1,R0 ;将寄存器 R0 的值传送到寄存器 R1
MOV PC,R14 ;将寄存器 R14 的值传送到 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 的标志位
CMPR1,#100 ;将寄存器 R1 的值与立即数 100 相减,并根据结果
设置 CPSR 的标志位
4、 CMN 指令
CMN 指令的格式为:
CMN{条件} 操作数 1,操作数 2
CMN 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时
更新 CPSR 中条件标志位的值。该指令实际完成操作数 1 和操作数 2 相加,并根据结果更
改条件标志位。
指令示例:
CMN R1,R0 ;将寄存器 R1 的值与寄存器 R0 的值相加,并根据结果
设置 CPSR 的标志位
CMNR1,#100 ;将寄存器 R1 的值与立即数 100 相加,并根据结果设置
CPSR 的标志位
5、 TST 指令
TST 指令的格式为:
TST{条件} 操作数 1,操作数 2
TST 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并
根据运算结果更新 CPSR 中条件标志位的值。操作数 1 是要测试的数据,而操作数 2 是一
个位掩码,该指令一般用来检测是否设置了特定的位。
指令示例:
TST R1,#%1 ;用于测试在寄存器 R1 中是否设置了最低位(%表示二进制数)
TSTR1,#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,运算结果由高到低存放在寄存器 R3~R0:
ADDS R0,R4,R8 ; 加低端的字
ADCS R1,R5,R9 ; 加第二个字,带进位
ADCS R2,R6,R10 ; 加第三个字,带进位
ADC R3,R7,R11 ; 加第四个字,带进位
9、 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)
10、~~~~C 指令
~~~~C 指令的格式为:
~~~~C{条件}{S} 目的寄存器,操作数 1,操作数 2
~~~~C 指令用于把操作数 1 减去操作数 2,再减去 CPSR 中的 C 条件标志位的反码,并将结
果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位
的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于 32 位的减
法,注意不要忘记设置 S 后缀来更改进位标志。该指令可用于有符号数或无符号数的减法
运算。
指令示例:
SUBS R0,R1,R2 ; R0 = R1 - R2 - !C,并根据结果设置
CPSR 的进位标志位
11、R~~~~指令
R~~~~指令的格式为:
R~~~~{条件}{S} 目的寄存器,操作数 1,操作数 2
R~~~~指令称为逆向减法指令,用于把操作数 2 减去操作数 1,并将结果存放到目的寄存器
中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立
即数。该指令可用于有符号数或无符号数的减法运算。
指令示例:
R~~~~ R0,R1,R2 ; R0 = R2 – R1
R~~~~ R0,R1,#256 ; R0 = 256 – R1
R~~~~ R0,R2,R3,LSL#1 ; R0 = (R3 << 1) - R2
12、RSC 指令
RSC 指令的格式为:
RSC{条件}{S} 目的寄存器,操作数 1,操作数 2
RSC 指令用于把操作数 2 减去操作数 1,再减去 CPSR 中的 C 条件标志位的反码,并将结
果存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位
的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于 32 位的减
法,注意不要忘记设置 S 后缀来更改进位标志。该指令可用于有符号数或无符号数的减法
运算。
指令示例:
RSC R0,R1,R2 ; R0 = R2 – R1 - !C
13、AND 指令
AND 指令的格式为:
AND{条件}{S} 目的寄存器,操作数 1,操作数 2
AND 指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数 1
应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令
常用于屏蔽操作数 1 的某些位。
指令示例:
AND R0,R0,#3 ; 该指令保持 R0 的 0、1 位,其余位清零。
14、ORR 指令
ORR 指令的格式为:
ORR{条件}{S} 目的寄存器,操作数 1,操作数 2
ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数 1
应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令
常用于设置操作数 1 的某些位。
指令示例:
ORR R0,R0,#3 ; 该指令设置 R0 的 0、1 位,其余位保持不变。
15、EOR 指令
EOR 指令的格式为:
EOR{条件}{S} 目的寄存器,操作数 1,操作数 2
EOR 指令用于在两个操作数上进行逻辑异或运算,并把结果放置到目的寄存器中。操作数
1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指
令常用于反转操作数 1 的某些位。
指令示例:
EOR R0,R0,#3 ; 该指令反转 R0 的 0、1 位,其余位保持不变。
16、BIC 指令
BIC 指令的格式为:
BIC{条件}{S} 目的寄存器,操作数 1,操作数 2
BIC 指令用于清除操作数 1 的某些位,并把结果放置到目的寄存器中。操作数 1 应是一个
寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。操作数 2 为 32 位
的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。
指令示例:
BIC R0,R0,#%1011 ; 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。
剩余31页未读,继续阅读
zhangshiming88
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1