IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 立即數的判斷方法一
立即數的判斷方法一
時間:2016-12-14作者:華清遠見

在ARM匯編的數據處理指令中經常會使用到常數,而ARM匯編中規定使用的常數必 須是立即數。ARM立即數的是由一個8位的常數循環右移偶數位得到的,其中循環右移 的位數由一個4位2進制的兩倍表示,公式如下:

immediate=immed_8&<(2*rotate_imm4) “<<”表示循環右移 簡單的說一個常數如果可以由一個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,也不會報錯。有效數判定:原數是立即數或者原數反碼是立即數。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 质量技术监督12365防伪追溯平台-www.12365china.net | 辣椒烘干机-百信机械提供大中小型辣椒烘干机房设备视频图片厂家价格多少钱 | 齐东汽车-提供抑尘车|洒水车|压缩垃圾车|餐厨垃圾车|垃圾转运车|清洗吸污车|扫路车价格,图片及视频 | 陕西硅酸钙板厂家_西安水泥压力板-陕西凯盛达建材科技有限公司 | 上海熙隆光电科技有限公司-半导体激光器,一字线激光器,光纤耦合激光器,拉曼激光器 | 铸铁平台,三维柔性焊接平台,划线平台,大理石平台,检验平板,花岗石平台_泊头市恒量机械设备有限公司 | 中华石油化工网 www.cnpec.net——歌颂石化 服务石化 奉献石化 发展石化 | 金属探测机_食品金属探测仪_食品金属探测器_广东善安金属检测机 金属剪切机,金属打包机,废钢剪切机,废铁压块机,金属压块机,废纸打包机,重废龙门剪,废钢龙门剪,箱式剪,液压剪切机-瑞顿机械装备制造江阴有限公司 | 液体灌装机-酱料灌装机-全自动灌装机-旋盖机-铝箔封口机-贴标机厂家-迈特威自动化设备(天津)有限公司" | 江西蔬菜配送,南昌蔬菜配送,南昌食堂承包,江西饭堂承包-江西菜篮子农产品发展有限公司 | 饲料车_散装饲料车_畜禽运输车_散装饲料运输车_饲料车厂家_铝合金运猪车-程力专用汽车股份有限公司 | 硝酸铵钙|山西硝酸钙|硝酸钾|太原硝酸钙镁|硝酸钾钙|亚硝酸钠-山西玉彤化工有限公司 | 瑞凯科技,吉林省瑞凯科技,吉林省瑞凯科技股份有限公司 | 智能访客系统 - 来访登记系统_微信预约系统_人员出入管理系统_访客机_人脸识别系统门禁闸机 | 欧式箱变_美式箱变_预制舱壳体-合肥龙马电气设备有限公司 | 深圳理津技术有限公司(REHLOGY)-全球工业品供应商:自动化产品|仪器仪表|设备|备品备件|工具|消耗品|非标设备|建筑工程等一站式综合服务! | 小程序商城,_电商系统源码,直播商城定制开发电商系统源码,电商系统,java电商系统 | 芜湖净水设备-纯水设备-无负压供水设备-不锈钢水箱-芜湖市百川给水设备有限责任公司 | 名片印刷,名片制作,名片设计,印刷彩色名片,数码快印名片-北京瑞思凯信息咨询公司 | 机锋网-畅享科技品质生活,尽在机锋网| 山东大龙食品有限公司| 中婴网,推动母婴产业健康·可持续发展,婴童网络专业传媒,母婴网,360孕婴童网,婴童品牌,婴儿用品品牌,婴儿用品加盟店,母婴用品加盟店 | 液体灌装机_全自动灌装机_大桶灌装机_200L灌装机_涂料油漆灌装机-昆山灌装自动化设备有限公司 | 深圳PCB电路板厂|PCB线路板厂|FPC柔性电路板厂|FPC软性线路板生产厂家|恒成和电路板:18681495413 | 江苏美鑫食品科技有限公司| 消防排烟风机|3C排烟风机|正压送风机|高温排烟风机|柜式排烟风机-山东锦松环境设备有限公司 | 影像测量仪|检测设备定制|平面度测量仪|三坐标测量机|广州市海科思自动化设备有限公司-400-0528-668 | 山东岱新起重机械有限公司,单梁桥式起重机,双梁桥式起重机,通用式门式起重机,欧式起重机系列 | 河南车用尿素设备_郑州车用尿素设备_河南江宇环保车用尿素液厂家 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 连云港物流,连云港物流公司就选连云港华美物流有限公司 | 木雕红木家具网_红木家具厂_专业的红木家具批发网 | 昆山开曼流体系统科技有限公司 | 人工气候-智能-低温生化培养箱厂家|价格-上海予卓仪器 | 三氯异氰尿酸_二水二氯异氰尿酸钠_氰尿酸 | 雷达液位计_耐磨热电偶_蒸汽_柴油,汽油_天然气流量计_巴歇尔槽_一体化温度变送器-江苏翔腾仪表有限公司 | 青砖厂家,青瓦价格-河北祥庆烧结瓦有限公司 | 上海慧泰仪器制造有限公司_一体型马弗炉-可控真空干燥箱-强光稳定性试验箱 | 吉安市圣宫制冷设备有限公司| 浙江欧诺机械有限公司| 阴_阳离子聚丙烯酰胺价格_聚合氯化铝厂家_聚合硫酸铁-巩义市亿洋水处理材料有限公司 |