关于ARM 汇编 指令 操作范围的一点理解
来源:互联网 发布:网络运维投标书 编辑:程序博客网 时间:2024/05/01 12:37
在ARM汇编指令中,一些指令对常量的操作做出了一定的限制,
比如 mov指令对常数的操作的规定是 必须是8位二进制循环移位得到的整数。
比如 B 其跳转范围是相对当前位置的-32MB~32MB
出现这些限制的原因是由 ARM指令的编码形式造成的,ARM所有指令占用的大小
都是4字节,即32位。一条指令的典型编码形式如下:
<opcode>{<cond>}{S}<Rd>,<Rn>{,<shifter_operand>}
其中opcode 是对指令助记符的编码,其占的位数并不固定,至于为什么有待研究。即 MOV ,LDR 等
cond是指令的条件码,固定占用4个位,因而可以表示16种不同的条件码,比如HI,CC等
S 表示操作结果是否影响到状态寄存器,其占用1位
Rn,Rd表示寄存器,一个寄存器占用4位,但是ARM体系结构中有多大37个寄存器,而4位二进制最多
可表示16个不同的寄存器,是否会出现矛盾呢?答案是否定的,这是源于,这37个寄存器,在不同的工作模式下
有的被使用了,而有的没被使用。而一种工作模式下,你会发些却有17可用的寄存器,似乎仍旧无法满足
编码条件。个人猜想,这又与操作指令有关了。状态寄存器是个特殊的寄存器,对其的操作指令MSR,MRS。
因而可以设想,如果一旦系统检测到此时的操作指令是对状态寄存器的操作,那么系统就认为,原来对PC的编码
的数值,此时表示的是状态寄存器,也就是说指令计数器和状态寄存器两者不可共同在一个指令中出现。这样
就可以通过4个位 而达到对37个寄存器的编码了。
shifter——operand 可能是寄存器,也可能是常量,更具实际情况而定,其占用位数与操作指令有关。
下面举个例子 来说明比如跳转指令B的编码如下
31-28,27-25,24,23——0
cond, 1 0 1 ,L,target_addr
可知 其操作数 如果为常量的话,其最大的值是2的24次方,即32MB
至于处理器是如何识别此指令为跳转指令的,。。。似乎挺复杂,超出个人能力范围。。。。
注:如果在编译过程出现错误了,还有个检查的方法就是 看看对指令的编码形式,看看该指令的操作范围。
- 关于ARM 汇编 指令 操作范围的一点理解
- arm汇编指令理解
- 几个ARM指令操作的汇编实现
- ARM汇编跳转指令理解
- ARM的汇编指令
- 关于汇编ARM指令DCD
- 关于汇编ARM指令DCD
- 关于汇编ARM指令DCD
- ARM汇编中关于“.word”伪指令的概念
- ARM汇编中关于“.word”伪指令的概念
- ARM汇编的一点想法
- ARM汇编指令:.align理解和用法
- 常用的ARM汇编指令
- 常用的ARM汇编指令
- 常用的ARM汇编指令
- 常用的ARM汇编指令
- arm汇编的跳转指令
- arm汇编的str指令
- Oracle 11.2.0.2 exp导出错误处理一则
- 打开弹出窗口
- 也谈lwip的回调
- 详解笔记本屏幕
- javascript调用js文件
- 关于ARM 汇编 指令 操作范围的一点理解
- 量变确实可以引起质变
- 笔记本屏幕技术
- 10056 - What is the Probability ?
- 基于XML-RPC的远程调用(Python,Java)
- 教你轻松解决Oracle数据库的服务启动问题
- POJ 1562
- 笔记本知识文集-屏幕知识
- andriod目录