在arm立即數定址中,指令中的立即數是有乙個8位的常熟和移動的4 位偶數字得到的,所以每一條指令都包含乙個常數x和移位值y,得到的立即數=x迴圈右移(2*y)
給定乙個立即數,判斷其是否合法可以分三步:首先將給定的立即數寫成32位二進位制的形式;然後看能不能用乙個8位的二進位制數包括所有含1的部分,如不能則非法;最後看這個8位二進位制數能不能迴圈右移偶數字得到給定的立即數,不能數則非法。
下面給出判斷乙個16進製制的數是否為arm的立即數的c語言**;
#include #define ture 1
#define false 0
unsigned int rightmove(int num,int bit) ;//把num數右移bit位
void prin2(unsigned int num) ; //十進位制轉列印二進位制數
bool judge(unsigned int num) ; //判斷是否是立即數
int main()
return 0 ;
}/*a
總長度n(8 16 32)
迴圈左移n (a >> (n - n)) | (a >> n)
迴圈右移n (a << (n - n)) | (a >> n)
*/unsigned int rightmove(unsigned int num,int bit) //把num數右移bit位
bool judge(unsigned int num) //判斷是否是立即數}}
return false ;
}void prin2(unsigned int num)
j = 0 ;
while(j < 32)
}puts("") ;
}//注意:輸入的16進製制的數必須是unsigned int 型別,如果不是,則會導致判斷錯誤,因為有乙個符號位會干擾移位值與0xff的比較。**中輸出了每一次移位後的二進位制數,請讀者根據現實理解立即數的有效判斷。
ARM指令中如何判斷乙個立即數是有效立即數
在arm處理器的組合語言中,對指令語法格式中的的常數表示式有這樣的規定 該常數必須對應8位位圖,即常數是由乙個8位的常數迴圈移位偶數字得到的。首先從arm指令系統的語法格式說起。一條arm指令語法格式分為如下幾個部分 其中,內的項是必須的,內的項是可選的,如是指令助記符,是必須的,而 為指令執行條件...
ARM指令中如何判斷乙個立即數是有效立即數
在arm處理器的組合語言中,對指令語法格式中的的常數表示式有這樣的規定 該常數必須對應8位位圖,即常數是由乙個8位的常數迴圈移位偶數字得到的。首先從arm指令系統的語法格式說起。一條arm指令語法格式分為如下幾個部分 其中,內的項是必須的,內的項是可選的,如是指令助記符,是必須的,而 為指令執行條件...
ARM立即數問題
最近學習彙編,遇到乙個問題,我把截圖貼在下面 上面可以看出,相信應該有人感到鬱悶吧,為啥oxffffffff可以識別,而ox1ff卻不行,網上查了好多資料,所以總結一下,immed 8迴圈右移 2 rotate imm immediate 立即數 immed 8 8位的常數 rotate imm 4...