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

相關文章
相關標籤/搜索