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

當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > 立即數(shù)的判斷方法一
立即數(shù)的判斷方法一
時(shí)間:2016-12-14作者:華清遠(yuǎn)見

在ARM匯編的數(shù)據(jù)處理指令中經(jīng)常會(huì)使用到常數(shù),而ARM匯編中規(guī)定使用的常數(shù)必 須是立即數(shù)。ARM立即數(shù)的是由一個(gè)8位的常數(shù)循環(huán)右移偶數(shù)位得到的,其中循環(huán)右移 的位數(shù)由一個(gè)4位2進(jìn)制的兩倍表示,公式如下:

immediate=immed_8&<(2*rotate_imm4) “<<”表示循環(huán)右移 簡(jiǎn)單的說(shuō)一個(gè)常數(shù)如果可以由一個(gè)8位的常數(shù)循環(huán)移位偶數(shù)位得到,那么就是立即數(shù)。

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

ARM在指令格式中設(shè)定,只能用指令機(jī)器碼32位中的低12位來(lái)表示要操作的常數(shù)。ARM處理器是按32位來(lái)處理數(shù)據(jù)的,ARM處理器處理的數(shù)據(jù)是32位,如果簡(jiǎn)單的用這12位來(lái)表示,顯然范圍太小了,為了擴(kuò)展到32位,因此使用了構(gòu)造的方法,在12位中用8位表示基本數(shù)據(jù)值,用4位表示位移值,通過用8位基本數(shù)據(jù)值往右循環(huán)移動(dòng)4位位移值*2次,來(lái)表示要操作的常數(shù)。這里要強(qiáng)調(diào)終的循環(huán)次數(shù)是4位位移值乘以2得到的,所以得到的終循環(huán)次數(shù)肯定是一個(gè)偶數(shù),為什么要乘以2呢,實(shí)質(zhì)還是因?yàn)榉秶粔颍?位表示位移次數(shù),大才15次,加上8位數(shù)據(jù)還是不夠32位,這樣只能通過ALU的內(nèi)部結(jié)構(gòu)設(shè)計(jì)將4位位移次數(shù)乘以2,這樣就能用12位表示32位常數(shù)了。

通過循環(huán)偶數(shù)位得的到操作數(shù),擴(kuò)大了操作數(shù)的范圍,但也帶來(lái)了問題,并不是每個(gè)數(shù)據(jù)都能通過8位基本數(shù)據(jù)循環(huán)移動(dòng)偶數(shù)為得到,如果你在ARM數(shù)據(jù)處理指令中使用的操作數(shù),不是立即數(shù),比如MOV R1,#0x12345678,編譯器就會(huì)報(bào)錯(cuò),所以我們?cè)谑褂们氨仨氝M(jìn)行判斷,這也是很多ARM相關(guān)求職筆試中常考的一道題目。

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

1、把數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制形式,從低位到高位寫成4位1組的形式,高位一組不夠四位的,在高位前面補(bǔ)0。

2、數(shù)1的個(gè)數(shù),如果大于8個(gè)肯定不是立即數(shù),如果小于等于8進(jìn)行下面步驟。

3、如果數(shù)據(jù)中間有連續(xù)的大于等于24個(gè)0,循環(huán)左移4的倍數(shù),使高位全為0。

4、找到高位的1,去掉前面大偶數(shù)個(gè)0。

5、找到低位的1,去掉后面大偶數(shù)個(gè)0。

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

針對(duì)可能現(xiàn)的情況,我舉5個(gè)典型例子:

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

例1: 0x4FF

第一步:0100 1111 1111

第二步:其中1的個(gè)數(shù)是9個(gè),大于8個(gè),判定不是立即數(shù)

例2: 0x122

第一步: 0001 0010 0010

第二步: 其中1的個(gè)數(shù)4個(gè),小于8,繼續(xù)

第三步: 其中沒有連續(xù)大于等于24個(gè)0,繼續(xù)

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

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

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

例3: 0x234

第一步: 0010 0011 0100

第二步: 其中1的個(gè)數(shù)4個(gè),小于8,繼續(xù)

第三步: 其中沒有連續(xù)大于等于24個(gè)0,繼續(xù)

第四部: xx10 0011 0100

第五步: xx10 0011 01xx

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

例4: 0xF000000F

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

第二步: 其中1的個(gè)數(shù)8個(gè),沒有大于8,繼續(xù)

第三步: 其中有連續(xù)24個(gè)0,循環(huán)左移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是立即數(shù)

例5: 0x8000007F

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

第二步: 其中1的個(gè)數(shù)8個(gè),沒有大于8,繼續(xù)

第三步: 其中有連續(xù)24個(gè)0,循環(huán)左移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是立即數(shù)

問題還沒有結(jié)束,我們?cè)贏RM匯編中如何規(guī)避立即數(shù)這個(gè)問題呢,其實(shí)可以使用ARM匯編LDR偽指令,例如直接把MOV指令變?yōu)椋?LDR R1,=0x12345678這樣編譯器就不會(huì)報(bào)錯(cuò)了。但這種方法也有弊端會(huì)增加開銷和影響執(zhí)行效率。同時(shí)ARM匯編中還有有效數(shù)的概念,比如 MOV R1,#0xFFFFFFFF 指令中 0xFFFFFFFF 不是立即數(shù),但是是有效數(shù),編譯器自動(dòng)把原指令變換為 MVN R1,#0,也不會(huì)報(bào)錯(cuò)。有效數(shù)判定:原數(shù)是立即數(shù)或者原數(shù)反碼是立即數(shù)。

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
主站蜘蛛池模板: 席高设计型地板官网_拼花地板_高端木地板定制专家_轻奢地板 | 郑州编织袋厂_郑州塑料编织袋_河南塑料编织袋厂-河南宏旺塑料编织袋厂家 | 装修工程-钢结构工程-环氧地坪漆-东莞市远鸣装饰工程有限公司 | 喵走共享单车网 - 共享电动车_共享电单车骑行门户网站 倡导绿色出行 | 深圳激光焊锡机-全自动点胶机设备-全自动激光焊锡机厂家-深圳创精锐 | 九江宇凯新材料有限公司| 欧路哲门窗|佛山欧路哲门窗有限公司|专业门窗定制品牌 | 新洲际教育-一站式留学解决方案领航者【官网】 | 河南郑州纯净水设备_厂家_价格_河南江宇环保科技有限公司水处理设备工厂 | 浙江微龙科技-微通道工艺结合设备一站式解决方案-致力于连续流技术开发与产业化应用-助力传统医药化工行业转型升级 | 小鼠实验(试验)用臭氧发生器_进口臭氧发生器 - 北京同林臭氧实验网 | 辽宁闻天香食品有限公司| 制砂机_选矿设备_耐磨件-郑州富嵩机械设备有限公司 | 新乡市矿山起重机制造有限公司 | 郑州宏大纺机有限公司 | 铸铁平台-焊接平台-划线平台-三维焊接平台厂家-泊头市溪海冶金机械设备有限公司 | 篮球场围网|网球场围网|球场围网|体育场围网_安平县炎煌丝网制品有限公司 | 围挡厂家_施工围挡_PVC围挡_建筑工程围挡_深圳市旭东钢构技术开发有限公司【官网】 | 内蒙古燕雕机械设备有限公司 | 磨粉机_上海磨粉机_雷蒙磨粉机_超细磨粉机_磨粉机价格-上海山卓重工机械有限公司 | 蒸汽发生器-电加热蒸汽发生器、燃油蒸汽发生器、燃气蒸汽发生器设备厂家-诺贝思蒸汽发生器 | 四川超声波清洗机厂家-旋转喷淋清洗机设备-成都鑫荣诚超声波科技有限公司 | 金属剪切机,金属打包机,废钢剪切机,废铁压块机,金属压块机,废纸打包机,重废龙门剪,废钢龙门剪,箱式剪,液压剪切机-瑞顿机械装备制造江阴有限公司 | 思源医疗器械网,雾化器厂家,医用床生产厂家,医疗器械厂家,医疗器械代加工 | 室内儿童乐园定制_淘气堡订做_蹦床公园订制厂家-乐奇多 | 限矩型液力偶合器_调速型液力偶合器_摩擦型耦合器生产厂家-河南省华升矿机有限公司 | 天津实验室纯水机-GMP认证制药纯化水设备-天津开发区瑞尔环保科技有限公司 | 智慧网格,智慧城市,智慧社区,精准扶贫,农村电商,网格化,网格化管理,智慧养老,北京瑞光极远数码科技有限公司 | 山东恒泰矿业设备有限公司_跑车防护装置,矿用电机车,防爆无轨胶轮车,耙斗装岩机 | 太阳能路灯-庭院灯-太阳能灯生产厂家-北京日月升太阳能科技公司 太阳能路灯生产厂家-郑州太阳能高杆灯价格-道路照明智能路灯-河南坤德照明 | 油气回收设备厂家_加油站/化工厂油气回收装置解决方案-金辉环保 油漆颜料砂磨机,油墨水砂磨机,水性涂料砂磨机-常州市奥能达机械设备有限公司 | 金属剪切机,金属打包机,废钢剪切机,废铁压块机,金属压块机,废纸打包机,重废龙门剪,废钢龙门剪,箱式剪,液压剪切机-瑞顿机械装备制造江阴有限公司 | 重型钢板网|钢板网厂家|钢板网 - 高禄公司 | 西安防静电地板_防静电地板厂家_防静电地板价格_OA网络地板_写字楼架空地板_机房墙板安装-红梅防静电地板厂家直销 | 型煤锅炉进煤机|型煤链条炉排 |重型板链除渣机 |丹东刮板输送机|丹东脱硫除尘器-铧洋机械 | 软文营销推广-新闻稿发布-软文撰写-百科词条编辑-品牌全案策划推广网络营销传播-喜尚传媒 | 湖北高新技术企业认定申报|武汉高企认定代办|武汉项目申报首选 - 湖北创优企科技服务有限公司 | 深圳激光焊锡机-全自动点胶机设备-全自动激光焊锡机厂家-深圳创精锐 | 学校直饮水机-反渗透纯水设备-家用净水器厂家-广州颖圣能源设备 学校洗碗机-郑州洗碗机厂家-商用洗碗机-郑州旭申环保科技有限公司 | 全自动烫金机-全自动移印机-全自动丝印机-全自动平面机-东莞联昌实业供应各种丝印机和移印机 | 自动门、旋转门、速通门维修保养升级服务平台_门道佰分佰【官网】 |