文档章节

ARM指令跳转范围

h
 houj
发布于 2014/09/30 16:40
字数 369
阅读 218
收藏 0

ARM指令跳转范围


我们知道ARM的跳转指令(B)是有范围限制的(±32MB),但很多情况下不能保证所有的异常处理函数都定位在向量表的32MB 范围内,需要大于32MB 的长跳转,而且因为向量表空间的限制只能由一条指令完成。这可以通过下面二种方法实现。

一)立即数跳转

(a) MOV PC, #imme_value
把目标地址直接赋给PC 寄存器。
但是这条指令受格式限制并不能处理任意立即数,只有当这个立即数能够表示为一个8-bit 数值通过循环右移偶数位而得到,才是合法的。例如:
MOV PC, #0x30000000 ;//是合法的,因为0x300000000 可以通过0x03 循环右移4 位而得到。
而 MOV PC, #30003000 ;//就是非法指令。 

二)相对地址跳转

(b) LDR PC, [PC+offset]
把目标地址先存储在某一个合适的地址空间,然后把这个存储器单元上的32位数据传送给PC 来实现跳转。
这种方法对目标地址值没有要求,可以是任意有效地址。但是存储目标地址的存储器单元必须在当前指令的±4KB 空间范围内。
注意在计算指令中引用的offset 数值的时候,要考虑处理器流水线中指令预取对PC 值的影响。

© 著作权归作者所有

h
粉丝 9
博文 81
码字总数 57985
作品 0
长沙
技术主管
私信 提问
实现Android ARM64平台下Inline Hook框架

Android阵营新出机型的cpu基本都是64位了,虽然可以向下兼容armeabi-v7a,但是使用32位的so毕竟不能充分发挥64位cpu的潜力,所以以后arm64-v8a用的会越来越多。但是整个安卓生态圈似乎还没有...

wjf1997
2017/09/23
0
0
ARM架构与体系学习(三)——ARM处理器状态

ARM7有两套指令系统,分别为ARM指令集和Thumb指令集。 ARM指令集为32位长,具有最完整的功能;Thumb指令集为16位长度,能实现ARM指令集的大部分功能。 Thumb指令集具有极高的代码密度(平均缩...

NightCode
2015/04/13
59
0
从ARM汇编指令机器码解释一些问题

为什么MOV R0, #0x12345678这条指令无法编译,而MOV R0, #0x678却可以编译通过? 为什么芯片会有立即数寻址,寄存器寻址,间接寻址等多种寻址方式?一种寻址方式不可以么? 为什么B跳转指令只...

ifreecoding
2012/09/08
5.1K
1
ARM体系的异常中断

在ARM体系中,通常有以下3种方式控制程序的执行流程: 在正常程序执行过程中,每执行一条ARM指令,程序计数寄存器PC的值加4个字节;每执行一条Thumb指令,程序计数寄存器PC的值加2个字节。整...

幸福阶梯
2018/02/14
27
0
ARM汇编指令

在嵌入式开发过程中,汇编有着举足轻重的地位,在bootloader中,常用来设置系统启动前的一些初始化、中断前后保存现场与恢复现场以及对性能要求较高的函数中等等。以下例举ARM中常用到的一些...

qiang_guozky
2016/06/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
31分钟前
4
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
46分钟前
90
5
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部