arm 常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位获得

在ARM指令集汇编码码中,32位有效当即数是经过 偶数位而间接获得的编码

在12位的shifter_operand中:8位存数据,4位存移位的次数。8位存数据:解释了“该常数必须对应8位位图”。循环

4位存移位的次数:解释了为何只能移偶数位。4位只有16种可能值,而32位数能够循环移位32次(32种可能),那就只好限制:只能移偶数位(两位两位地移,好像一个16位数在移位,16种移位可能)。这样就解决了能表示的状况是实际状况一半的矛盾数据

举个例子吧.
0x3FC(0000 0000 0000 0000 0000 0011 1111 1100) 是由 0xff 循环右移 2 位获得的;
200(0000 0000 0000 0000 0000 0000 1100 1000) 是由 0xc8 循环右移 2 位获得的, 它们都是合法的.
而 0x1FE(0000 0000 0000 0000 0000 0001 1111 1110) 和
511(0000 0000 0000 0000 0000 0001 1111 1111) 没法当作是8位的常数循环右移偶数位而获得的, 所以是非法的.
指令操做数当即数时候,每一个当即数由一个8位的常数循环右移偶数位获得。opera

相关文章
相关标签/搜索