ARM當即數判斷

      (轉)怎麼快速判斷一個數是不是當即數,對於簡單的數字咱們能夠直接判斷,好比小於255的數字確定是當即數。對相對複雜的數字進行判斷就須要先把它轉換爲2進制形式,而後根據定義進行判斷了。我這裏總結了個比較快速的方法:spa

一、把數據轉換成二進制形式,從低位到高位寫成4位1組的形式,最高位一組不夠四位的,在最高位前面補0。class

二、數1的個數,若是大於8個確定不是當即數,若是小於等於8進行下面步驟。循環

三、若是數據中間有連續的大於等於24個0,循環左移4的倍數,使高位全爲0。 二進制

四、找到最高位的1,去掉前面最大偶數個0。方法

五、找到最低位的1,去掉後面最大偶數個0。總結

六、數剩下的位數,若是小於等於8位,那麼這個數就是當即數,反之就不是當即數。數據

(1)0x4FF (2)0x122 (3)0x234 (4)0xF000000F (5)0x8000007F數字

(1)   1>  0x 0100 1111 1111  

           2> 1的個數大於8,不是當即數

(2)   1>  0x 0001 0010 0010    

           2>1的個數小於8    

            3>知足  

           4>1前面3個0,去掉最高偶數位,還有1個0      0x 01 0010 0010 

           5>最低位1後面1個0,故不變     0x 01 0010 0010  

           6>還剩10位,不知足,不是當即數

(3) 1>  0x 0010 0011 0100  

        2>  1的個數小於8 

        3>知足

        4> 0x 10 0011 0100

         5> 0x 10 0011 01

         6>還剩8位,知足,是當即數

(4)1>0x 1111 0000 0000 0000 0000 0000 0000 1111

        2>知足

        3>循環左移4位    0x 0000 0000 0000 0000 0000 0000 1111 1111

         4>  0x1111 1111

         5>不變

         6>還剩8位,知足,是當即數

(5)   1>0x1000 0000 0000 0000 0000 0000 0111 1111

        2>知足

        3>24個0,   則變爲 0x 0000 0000 0000 0000 0000 0111 1111 1000

        4>  0x  0111 1111 1000

        5> 0x   0111 1111 10    

         6> 0x  0111 1111 10   大於8位,不是當即數

固然,最簡單的寫法就是:  ldr   r1, =xxx      

相關文章
相關標籤/搜索