ARM体系结构学习中的难点(不断更新中)
2013-03-11 21:49
615 查看
一. ARM指令中合法立即数
在Arm处理器中,立即数必须是对应8位位图格式,即立即数是由一个8bit的常数在16位或32位的寄存器中循环移动(向左或向右都行)偶数位得到的。
即:shifter_operand = immed_8 Rotate_Right (rotate_imm * 2)。合法的立即数必须能够找到得到它的那个常数,否则这个立即数就是非法的。 例如: 0x3F8是合法的,把它写成二进制形式为:001111111000b, 因为:它是用一个8bit的常数0xFE(11111110b)在16位的寄存器中循环向左移动2位就可以得到0x3F8 ,见下图的:
判断一个立即数是否合法的方法:
首先把这个数用二进制表示出来,然后看这个数中“1”的最大间隔是多少,要看两次,一次是顺序看,一次是循环看,循环看是把16位或32寄存器的首尾连起来,越过首尾来看,两次中如果最大间隔都大于8(包含首尾的两个1),那这个数肯定是非法的。如果有一次小于等于8则有可能是合法的,可以进行下一步继续判断:
此时又分为两种情况,
如果顺序看时1的最大间隔等于8,此时可以看看,这个数最高位1的前面或者最低位1的后面是否有偶数个0,只要一种情况下有,这个数就是合法的;如果循环看时1的最大间隔小于等于8,此时可以看看,循环看时,两端得到的间隔个数是否有一个为偶数,如果有一个是偶数,这个数就是合法的。
例如,0x1010 是非合法的 (两次看这个数中“1”的最大间隔大于8);0x1FA 是非合法的(顺序看这个数中“1”的最大间隔等于8,这个数最高位1的前面或者最低位1的后面没有偶数个0,)
0x7000000E 是合法的(因为循环看时,两端得到的间隔个数有一个为偶数)。
首先将这个数转换为32bit16进制形式,例如218=0xDA=0x000000DA;除零外,仅有一位数为合法立即数;除零外,仅有二位数,并且相邻(包括首尾,如0x1000000A)的为合法立即数;除零外,仅有三位数,并且相邻(包括中间有0相间,例如0x10800000,包括首尾相邻,如:0x14000003),这三位数中,最高位取值仅能为1、2、3,最低位取值仅能为4、8、C,中间位0x0~0xF。这种组合的为合法立即数;除了以上三种,其他基本是非法立即数。
在Arm处理器中,立即数必须是对应8位位图格式,即立即数是由一个8bit的常数在16位或32位的寄存器中循环移动(向左或向右都行)偶数位得到的。
即:shifter_operand = immed_8 Rotate_Right (rotate_imm * 2)。合法的立即数必须能够找到得到它的那个常数,否则这个立即数就是非法的。 例如: 0x3F8是合法的,把它写成二进制形式为:001111111000b, 因为:它是用一个8bit的常数0xFE(11111110b)在16位的寄存器中循环向左移动2位就可以得到0x3F8 ,见下图的:
判断一个立即数是否合法的方法:
首先把这个数用二进制表示出来,然后看这个数中“1”的最大间隔是多少,要看两次,一次是顺序看,一次是循环看,循环看是把16位或32寄存器的首尾连起来,越过首尾来看,两次中如果最大间隔都大于8(包含首尾的两个1),那这个数肯定是非法的。如果有一次小于等于8则有可能是合法的,可以进行下一步继续判断:
此时又分为两种情况,
如果顺序看时1的最大间隔等于8,此时可以看看,这个数最高位1的前面或者最低位1的后面是否有偶数个0,只要一种情况下有,这个数就是合法的;如果循环看时1的最大间隔小于等于8,此时可以看看,循环看时,两端得到的间隔个数是否有一个为偶数,如果有一个是偶数,这个数就是合法的。
例如,0x1010 是非合法的 (两次看这个数中“1”的最大间隔大于8);0x1FA 是非合法的(顺序看这个数中“1”的最大间隔等于8,这个数最高位1的前面或者最低位1的后面没有偶数个0,)
0x7000000E 是合法的(因为循环看时,两端得到的间隔个数有一个为偶数)。
首先将这个数转换为32bit16进制形式,例如218=0xDA=0x000000DA;除零外,仅有一位数为合法立即数;除零外,仅有二位数,并且相邻(包括首尾,如0x1000000A)的为合法立即数;除零外,仅有三位数,并且相邻(包括中间有0相间,例如0x10800000,包括首尾相邻,如:0x14000003),这三位数中,最高位取值仅能为1、2、3,最低位取值仅能为4、8、C,中间位0x0~0xF。这种组合的为合法立即数;除了以上三种,其他基本是非法立即数。
相关文章推荐
- 一份好的ARM体系结构学习笔记
- ARM体系结构与编程学习(十三)
- ARM体系结构与编程学习(十一)
- ARM体系结构与编程学习(一)
- ARM裸机全集之ARM体系结构(学习笔记)
- ARM体系结构与编程学习(五)
- 一份好的ARM体系结构学习笔记
- arm体系结构学习笔记 part4 -- 异常处理的返回
- ARM体系结构与编程学习(四)
- 嵌入式学习之ARM体系结构复习(一)
- ARM底层学习笔记-中断体系结构
- arm体系结构学习笔记 part3 -- 异常处理机制
- ARM体系结构与编程学习(九)
- ARM学习笔记--中断体系结构
- arm体系结构学习笔记 part1--处理器模式与寄存器
- ARM学习笔记之一:ARM体系结构
- ARM&LINUX学习笔记(4)---ARM 体系结构
- ARM体系结构与编程学习(二)
- ARM体系结构与编程学习(十一)
- ARM体系结构与编程学习(五)