ARM指令集——跳转指令篇
来源:互联网 发布:特氟龙耐高温胶带淘宝 编辑:程序博客网 时间:2024/06/05 03:35
ARM指令集可以分为6类,即跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理指令和异常中断产生指令。
跳转指令:
在ARM中有两种方式可以实现程序的跳转:跳转指令和直接向PC寄存器中写入目标地址值。
通过直接向PC寄存器中写入目标地址值可以实现4G的地址空间中任意跳转,称之为长跳转。
ARM的跳转指令可以从当前指令向前或向后的32MB的地址空间跳转。这类跳转指令由以下4种:
- B 跳转指令;
- BL 带返回的跳转指令;
- BLX 带返回和状态切换的跳转指令;
- BX 带状态切换的跳转指令。
下面分别介绍:
1、B及BL
指令的语法格式:
B{L}{<cond>} <target_address>
指令操作的伪代码:
if ConditionPassed(cond) then
if L == 1 then
LR = address of the instruction after the branch instruction
PC = PC + (SignExtend(signed_immed_24) << 2); address of ARM is aligned 4Byte
实例:
B Lable; 程序跳到Lable处执行
BCC Lable; 当CPSR寄存器中的C条件标志位为1时,程序跳转到标Lable处执行
BL func_1; 程序跳转到子程序func_1处执行,同时将当前PC值保存到LR中
2、BLX(1)
指令的语法格式:
BLX <target_address>
指令操作的伪代码:
LR = address of the instruction after the BLX instruction
T Flag =1; Thumb指令集
PC = PC + (SignExtend(signed_immed_24) << 2) + (H << 1); H是指令编码格式中的H位
3、BLX(2)
指令的语法格式:
BLX {<cond>} <Rm>
指令操作的伪代码:
if ConditionPassed(cond) then
LR = address of the instruction after the BLX instruction
T Flag =Rm(0)
PC = Rm AND 0xFFFFFFFE
指令的使用
当Rm[1:0] = 0b10时,由于ARM指令是字对齐的,这时会产生不可预测的结果。
4、BX指令
指令的语法格式:
BX{<cond>} <Rm>
指令操作的伪代码:
if ConditionPassed(cond) then
T Flag = Rm[0]
PC = Rm AND 0xFFFFFFFE
指令的使用
当Rm[1:0] = 0b10时,由于ARM指令是字对齐的,这时会产生不可预测的结果。
0 0
- ARM指令集——跳转指令篇
- ARM 指令集>>跳转指令
- ARM指令集——乘法指令
- ARM指令集—SWP指令
- ARM指令集——数据处理指令篇
- arm跳转指令
- ARM的跳转指令
- ARM的跳转指令
- ARM的六大类指令集---跳转指令
- ARM的六大类指令集---跳转指令
- 1.18.ARM汇编指令集6之跳转指令
- ARM指令集中的跳转指令
- ARM指令集——状态寄存器访问指令
- arm汇编中的跳转指令
- ARM 汇编中跳转指令
- arm汇编的跳转指令
- ARM汇编跳转指令理解
- ARM指令集--移位指令
- CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行
- android 改变背景图片的两种方法
- 视音频编解码学习工程:FLV封装格式分析器
- PreparedStatement的用法
- 最小均方算法(LMS Algorithm)理论及DSP实现
- ARM指令集——跳转指令篇
- OD调试问题
- PAT 1003. Emergency
- 【备忘】Java LDAP 相关操作
- 关于java的classpath、path
- ROS探索
- 关于游戏打击感
- http提交请求中get和post的区别
- test