一条典型的ARM指令语法格式分为如下几个部分:opcode>{cond>}{S}Rd>,Rn>{,operand2>}其中,>内的项是必须的,{}内的项是可选的..
一条典型的ARM指令语法格局分为如下几个部分:
{} {S} ,{,}
其间,<>内的项是有必要的,{}内的项是可选的,如是指令助记符,是有必要的,而{}为指令碑文条件,是可选的,假如不写则运用默许条件AL(无条件碑文)。
opcode指令助记符,如LDR,STR 等
cond碑文条件,如EQ,NE 等
S是否影响CPSR 寄存器的值,书写时影响CPSR,不然不影响
Rd方针寄存器
Rn榜首个操作数的寄存器
operand2第二个操作数
其指令编码格局如下:
31-28
|
27-25
|
24-21
|
20
|
19-16
|
15-12
|
11-0 (12位)
|
cond
|
001
|
opcode
|
S
|
Rn
|
Rd
|
operand2
|
对其间的operand2的常数表达式有这样的规则:“该常数有必要对应8位位图,即常熟是由一个8位的常熟循环右移偶数位得到的。”这句话的意思是说,当用12位第二操作数来一共一个32位当即数时,选用的是将8位数经过移位的方法来完成的,其间12位第二操作数的低八位寄存被移位的“根本”数(取值规模为0到255),而高四位寄存的是循环右移的位数,由于位四位二进制数,所以取值规模位为0到15,而对应的移位位数则为0到30位,也就是说若“移位”数为0,则一共“根本”数不变,若“移位”数位1,则一共将“根本”数在32位数字空间中循环右移2位,若“移位”数位5,则一共将“根本”数在32位数字空间中循环右移10位,若“移位”数位10,则一共将“根本”数在32位数字空间中循环右移20位,顺次类推。举例一共:
ANDR1,R2,#0xff
当处理器处理这条指令的第二操作数0xff时,由于0xff为8位二进制数,所以处理器就将其直接放进8位“根本”数中,而4位“移位”数则为0.
ANDR1,R2,#0x104
当处理器处理这条指令的第二操作数0x104时,由于此刻0x104现已超越了8位二进制数,所以处理器就要将其“改造”一下,咱们先把0x104转换成二进制0000 0000 0000 0000 0000 0001 0000 0100,咱们能够看到,这个数是0000 0000 0000 0000 0000 0000 0100 0001经过循环右移30位得到的,因而改造后的结果是8位“根本”数中寄存0100 0001,而“移位”数为15。
ANDR1,R2,#0xff000000
当处理器处理这条指令的第二操作数0xff000000时,处理器相同要对其“改造”,咱们先把0xff000000转换成二进制1111 1111 0000 0000 0000 0000 0000 0000,咱们能够看到,这个数是0000 0000 0000 0000 0000 0000 1111 1111经过循环右移8位得到的,因而改造后的结果是8位“根本”数中寄存1111 1111,而“移位”数为4。
我想,经过以上的三个比方,就应该理解了8位位图的原理了。可是,有些数并不契合8位位图的原理,这样的数在进行程序编译时,体系将会提示犯错,下面再举几个违背8位位图的比方:比方0x101,转换成二进制后位0000 0000 0000 0000 0000 0001 0000 0001,像这个数,不管向右循环几位,都无法将两个1一起放到低8位中,因而不契合8位位图;再比方0x102,转换成二进制后位0000 0000 0000 0000 0000 0001 0000 0010,假如将两个1一起放到低8位中,即转换成二进制后为0000 0000 0000 0000 0000 0000 1000 0001,需求将此二进制数向右移31位,这也不契合循环右移偶数位的条件,因而0x012也不契合8位位图;再举一个0xff1,转换成二进制后将会有9个1,不可能将其一起放入8位中,因而当然也不契合啦。
经过正反例的比较,能够总结如下:榜首,判别一个数是否契合8位位图的准则,首要看这个数转换成二进制后1的个数是否不超越8个,假如不超越8个,再看这n个1(n<=8)是否能一起放到8个二进制位中,假如能够放进去,再看这八个二进制位是否能够循环右移偶数位得到起先被判别的那个数值,假如能够,则此数值即为契合8位位图原理,不然,不契合。第二,用12位的编码来一共一个恣意的32位数是不可能的,只能经过循环右移八位二进制数偶数位来得到一部分32位数,其他的无法一共的32位数,只要经过其它途径获得了,比方0xffffff00,能够经过0x000000ff按位取反得到,因而在今后的编程中,必定要注意用到的第二操作数是否契合8位位图。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/263997.html