日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ir指令、立即数的作用_立即数的判断方法一

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ir指令、立即数的作用_立即数的判断方法一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在ARM匯編的數據處理指令中經常會使用到常數,而ARM匯編中規定使用的常數必

須是立即數。ARM立即數的是由一個8位的常數循環右移偶數位得到的,其中循環右移

的位數由一個4位2進制的兩倍表示,公式如下:

immediate=immed_8&

簡單的說一個常數如果可以由一個8位的常數循環移位偶數位得到,那么就是立即數。

為什么會有立即數這樣的規定呢,這是由于所有的ARM指令是精簡指令集,指令長度固定都是32位,對于ARM數據處理指令自然也是一樣。數據處理指令大致可包含3類,數據傳送指令、數據算術邏輯運算指令和數據比較指令。在一條ARM數據處理指令中,除了要包含處理的數據值外,還要標識ARM命令名稱,控制位,寄存器等其他信息。這樣在一條ARM數據處理指令中,能用于表示要處理的數據值的位數只能小于32位。

ARM在指令格式中設定,只能用指令機器碼32位中的低12位來表示要操作的常數。ARM處理器是按32位來處理數據的,ARM處理器處理的數據是32位,如果簡單的用這12位來表示,顯然范圍太小了,為了擴展到32位,因此使用了構造的方法,在12位中用8位表示基本數據值,用4位表示位移值,通過用8位基本數據值往右循環移動4位位移值*2次,來表示要操作的常數。這里要強調終的循環次數是4位位移值乘以2得到的,所以得到的終循環次數肯定是一個偶數,為什么要乘以2呢,實質還是因為范圍不夠,4位表示位移次數,大才15次,加上8位數據還是不夠32位,這樣只能通過ALU的內部結構設計將4位位移次數乘以2,這樣就能用12位表示32位常數了。

通過循環偶數位得的到操作數,擴大了操作數的范圍,但也帶來了問題,并不是每個數據都能通過8位基本數據循環移動偶數為得到,如果你在ARM數據處理指令中使用的操作數,不是立即數,比如MOV R1,#0x12345678,編譯器就會報錯,所以我們在使用前必須進行判斷,這也是很多ARM相關求職筆試中??嫉囊坏李}目。

那怎樣怎么快速判斷一個數是否是立即數,對于簡單的數字我們可以直接判斷,比如小于255的數字肯定是立即數。對相對復雜的數字進行判斷就需要先把它轉換為2進制形式,然后根據定義進行判斷了。我這里總結了個比較快速的方法:

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

2、數1的個數,如果大于8個肯定不是立即數,如果小于等于8進行下面步驟。

3、如果數據中間有連續的大于等于24個0,循環左移4的倍數,使高位全為0。

4、找到高位的1,去掉前面大偶數個0。

5、找到低位的1,去掉后面大偶數個0。

6、數剩下的位數,如果小于等于8位,那么這個數就是立即數,反之就不是立即數。

針對可能現的情況,我舉5個典型例子:

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

例1: 0x4FF

第一步:0100 1111 1111

第二步:其中1的個數是9個,大于8個,判定不是立即數

例2: 0x122

第一步: 0001 0010 0010

第二步: 其中1的個數4個,小于8,繼續

第三步: 其中沒有連續大于等于24個0,繼續

第四部: xx01 0010 0010 (高位前面有3個0,大偶數2,去掉2個0)

第五步: xx10 0011 0010 (低位后面只有1個0,大偶數0)

第六部: 剩下10 0011 0010 共10位,大于8,判定0x122不是立即數

例3: 0x234

第一步: 0010 0011 0100

第二步: 其中1的個數4個,小于8,繼續

第三步: 其中沒有連續大于等于24個0,繼續

第四部: xx10 0011 0100

第五步: xx10 0011 01xx

第六部: 剩下10 0011 01 共8位,等于8,判定0x234是立即數

例4: 0xF000000F

第一步: 1111 0000 0000 0000 0000 0000 0000 1111

第二步: 其中1的個數8個,沒有大于8,繼續

第三步: 其中有連續24個0,循環左移4位,使高位全為0

0000 0000 0000 0000 0000 0000 0000 1111 1111

第四部: xxxx xxxx xxxx xxxx xxxx xxxx xxxx 1111 1111

第五步: xxxx xxxx xxxx xxxx xxxx xxxx xxxx 1111 1111

第六部: 剩下1111 1111共8位,等于8,判定0xF000000F是立即數

例5: 0x8000007F

第一步: 1000 0000 0000 0000 0000 0000 0111 1111

第二步: 其中1的個數8個,沒有大于8,繼續

第三步: 其中有連續24個0,循環左移4位,使高位全為0

0000 0000 0000 0000 0000 0000 0111 1111 1000

第四部: xxxx xxxx xxxx xxxx xxxx xxxx 0111 1111 10xx

第五步: xxxx xxxx xxxx xxxx xxxx xxxx 0111 1111 10xx

第六部: 剩下0111 1111 10共10位,等于8,判定0x7000008F是立即數

問題還沒有結束,我們在ARM匯編中如何規避立即數這個問題呢,其實可以使用ARM匯編LDR偽指令,例如直接把MOV指令變為, LDR R1,=0x12345678這樣編譯器就不會報錯了。但這種方法也有弊端會增加開銷和影響執行效率。同時ARM匯編中還有有效數的概念,比如 MOV R1,#0xFFFFFFFF 指令中 0xFFFFFFFF 不是立即數,但是是有效數,編譯器自動把原指令變換為 MVN R1,#0,也不會報錯。有效數判定:原數是立即數或者原數反碼是立即數。

總結

以上是生活随笔為你收集整理的ir指令、立即数的作用_立即数的判断方法一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 极品少妇xxxx | 6996电视影片免费看 | 久久久999成人 | 天天操天天舔天天干 | 777久久 | 日本黄色片在线播放 | 国产午夜性春猛交ⅹxxx | 欧美第一页草草影院 | 免费观看日本 | 在线观看91| 国产精品一二 | 免费成人毛片 | 综合网天天| 人人艹在线 | 人人看人人澡 | 色婷婷国产精品久久包臀 | 欧美视频在线不卡 | av国产片| 亚洲欧美另类日韩 | 午夜黄视频 | 传媒视频在线观看 | а√天堂资源官网在线资源 | 欧美美女一区二区三区 | 在线免费视频一区 | 激情爱爱网 | 俄罗斯av片 | 久久激情综合 | 沟厕沟厕近拍高清视频 | 天天av网| 欧美一级黄色网 | 精品成人免费一区二区在线播放 | 尤物精品在线观看 | 国产欧美一区二区三区精华液好吗 | sm在线观看 | 亚洲成人资源 | 播播网色播播 | 精品亚洲成人 | 中文在线a√在线 | 老司机午夜在线 | av综合色| 成人欧美一区二区三区白人 | 天天躁日日躁狠狠躁av麻豆 | 美女福利视频导航 | www.婷婷色 | 16—17女人毛片 | 超碰碰碰碰 | av不卡一区二区三区 | 污污网站免费 | 免费在线激情视频 | 色多多在线观看 | 一区二区三区国 | 三上悠亚影音先锋 | 91免费毛片 | 偷偷操不一样 | 色婷婷激情五月 | 97超碰在 | 成人在线观看91 | 韩国av一区二区 | 在线一区二区三区四区五区 | 中文字幕一区二区人妻在线不卡 | 欧美美女一区二区三区 | 国产激情视频一区二区三区 | www免费网站在线观看 | 日韩乱码人妻无码中文字幕久久 | 亚洲欧美一区二区精品久久久 | 一级特黄录像免费看 | 男人天堂影院 | 欧洲-级毛片内射 | 国产精品99久久免费黑人人妻 | 波多野结衣a级片 | 波多野结衣1区2区3区 | 私库av在线 | 久久精品免费看 | 亚洲国产视频一区 | 女同性做受全过程动图 | 在线观看污网站 | 中文字幕无码不卡免费视频 | 黑人和白人做爰 | 欧美亚韩一区二区三区 | 打开免费观看视频在线播放 | va视频在线观看 | 少妇高潮一区二区三区四区 | av免费片 | www夜夜操 | 日韩精品电影在线观看 | 色综合天天射 | 俺也来俺也去俺也射 | 亚洲97色| 国产富婆一级全黄大片 | 午夜免费福利影院 | 欧美女同在线 | 色哟哟国产精品色哟哟 | 久久久久久久久国产 | 性色视频在线观看 | 深夜福利在线播放 | 欧美videos另类极品 | 一级看片免费视频 | 爱逼综合网 | 国产一区二区观看 |