1. 程式人生 > >arm 常數必須對應8 位點陣圖,即常數是由一個8 位的常數迴圈移位偶數位得到

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位的常數迴圈右移偶數位得到。