arm与thumb的状态转换及地址装载
来源:互联网 发布:超滤和反渗透 知乎 编辑:程序博客网 时间:2024/05/16 17:04
ARM汇编中,关于arm/thrumb状态转换以及地址装载的问题:
问题描述:
从thumb指令跳转到arm指令区:
若要跳转的arm指令区的标号在本thumb指令区的前面,
也就是标号相对于当前pc的偏移量是负值,如果用adr
r1, expr来装载要跳转到地址,那么这时候会出错,说
是地址偏移超出范围,如果用ldr来装载地址则没有问
题;
若要跳转到arm指令区的标号在本thumb指令区的后面,
也就是标号相对于当前的pc的偏移量为正值,这时候无
论用adr还是ldr都没有问题。
相反,若从arm指令区跳转到thumb指令区,两种情况无
论是用ldr或者adr都没有问题。
造成这些区别的原因是什么呢?
下面的代码,预测一下结果:
area jump,code,readonly
entry
code32
start32
nop
nop
adr r0,thumb16+1
bx r0
nop
nop
nop
code16
thuumb16
nop
nop
nop
nop
ldr r0,=next32
bx r0
code32
next32
nop
nop
nop
adr r0,thu+1
bx r0
end
结果是从arm模式下用adr装载地址+1可以回跳到thumb
模式下(即使地址是负偏移),而在thumb模式下用adr
跳转则只能往后跳,不能往前跳,这个原因是因为在
thumb下,操作数的范围比arm模式的小,在这段代码里
,如果把thumb模式下的ldr r0,=next32修改成adr
r0,=start32,那么我们预计的结果应该是回跳,但是这
样做不行,在模拟器上运行,得到的相对地址是负数,
0xFFFFFFF6,越界了,所以不能这样做,而在arm模式
下操作数范围大些,所以可行。
在thumb状态下, ADR的表达式ADR register,expr,
其中,expr是地址表达式,偏移量必须是正数并小于
1kB。
问题描述:
从thumb指令跳转到arm指令区:
若要跳转的arm指令区的标号在本thumb指令区的前面,
也就是标号相对于当前pc的偏移量是负值,如果用adr
r1, expr来装载要跳转到地址,那么这时候会出错,说
是地址偏移超出范围,如果用ldr来装载地址则没有问
题;
若要跳转到arm指令区的标号在本thumb指令区的后面,
也就是标号相对于当前的pc的偏移量为正值,这时候无
论用adr还是ldr都没有问题。
相反,若从arm指令区跳转到thumb指令区,两种情况无
论是用ldr或者adr都没有问题。
造成这些区别的原因是什么呢?
下面的代码,预测一下结果:
area jump,code,readonly
entry
code32
start32
nop
nop
adr r0,thumb16+1
bx r0
nop
nop
nop
code16
thuumb16
nop
nop
nop
nop
ldr r0,=next32
bx r0
code32
next32
nop
nop
nop
adr r0,thu+1
bx r0
end
结果是从arm模式下用adr装载地址+1可以回跳到thumb
模式下(即使地址是负偏移),而在thumb模式下用adr
跳转则只能往后跳,不能往前跳,这个原因是因为在
thumb下,操作数的范围比arm模式的小,在这段代码里
,如果把thumb模式下的ldr r0,=next32修改成adr
r0,=start32,那么我们预计的结果应该是回跳,但是这
样做不行,在模拟器上运行,得到的相对地址是负数,
0xFFFFFFF6,越界了,所以不能这样做,而在arm模式
下操作数范围大些,所以可行。
在thumb状态下, ADR的表达式ADR register,expr,
其中,expr是地址表达式,偏移量必须是正数并小于
1kB。
- arm与thumb的状态转换及地址装载
- ARM与Thumb之间的状态转换
- ARM Thumb/ARM 状态切换 代码及分析
- ARM处理器的寄存器,ARM与Thumb状态,7种运行模式
- ARM处理器中ARM和Thumb状态的切换
- ARM状态和Thumb状态间的切换
- ARM指令与Thumb指令的区别及常用ARM指令格式
- ARM与Thumb状态切换及其代码分析
- arm与thumb
- Thumb、ARM指令 状态切换
- Thumb、ARM指令状态切换
- Thumb、ARM指令 状态切换
- Thumb、ARM指令 状态切换
- ARM状态和Thumb状态通俗理解
- Thumb的工作状态
- arm工作状态-arm状态和thumb状态
- arm与thumb编程学习
- Thumb指令集与ARM指令集的区别
- 通用的分页工具类
- 面试必问的16个经典问题的回答思路
- 如何处理软件项目中发生的需求变化
- HI
- PMP考点之合同类型(2007-5)
- arm与thumb的状态转换及地址装载
- 克劳士比生平介绍
- Linux下 Makefile 的 automake 生成全手册
- 我想告诉你的一些有关质量问题的答案
- 利用多核多线程进行程序优化
- 几种读取属性文件的JAVA实现方式(2005年)
- VI快捷键
- Linux系统下Matlab的安装设置
- 用response对象实现文件下载,解决中文文件名乱码。