新聞中心

        ARM中的MOV指令

        作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
        ARM中MOV指令格式是這樣的

        本文引用地址:http://www.104case.com/article/201611/318769.htm

        op2是占了12位,其中bit11-bit8是移位數(shù)(rotate),bit7-0是一個(gè)8位的立即數(shù)(imm),MOV Rn, op2,執(zhí)行之后,Rn=op2 >> (rotate * 2),這里的移位是循環(huán)右移,這就決定了MOV指令不是所有的立即數(shù)都能表示的,以下是幾個(gè)例子:

        1、mov r3, #0x56000000

        雖然0x56000000是一個(gè)32位的數(shù),但是可以找到這么一個(gè)8位立即數(shù),通過右移得到,看下機(jī)器碼e3a03456,展開成二進(jìn)制,對照下格式

        1110 0011 1010 0000 0011 0100 0101 0110

        cond[31:28]=1110

        [27:26]=00

        L[25]=1,代表op2是一個(gè)立即數(shù)

        OpCode[24:21]=1101

        S[20]=0

        Rn[19:16]=0000

        Rd[15:12]=0011,R3

        Op2[11:8]=0100,右移4 * 2位

        Op2[7:0]=0101 0110,8位立即數(shù),0x56

        首先要將0x56擴(kuò)展成32位的無符號數(shù),0x00000056,然后循環(huán)右移8位,就得到了0x56000000

        2、mov r3, #0x56000014

        0x56000014是無法通過移位來得到的,這時(shí)編譯器會(huì)報(bào)錯(cuò),C語言編寫的程序,編譯器會(huì)這樣來處理:

        mov r3, #0x56000000

        add r3, r3, #0x14

        代替mov的另外一條指令就是ldr,或許會(huì)更方便點(diǎn)。

        看了2440的datasheet,最令人費(fèi)解的就是rotate了,習(xí)慣了C語言里的邏輯右移,把循環(huán)右移和邏輯右移混淆了。



        關(guān)鍵詞: ARM中MOV指

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 班戈县| 德昌县| 葵青区| 武鸣县| 霞浦县| 石景山区| 凤阳县| 南召县| 教育| 高清| 黔西| 开化县| 闸北区| 巴林左旗| 南皮县| 盐山县| 吴旗县| 息烽县| 新野县| 鄂托克前旗| 陵水| 万盛区| 鄂托克旗| 兰坪| 柳江县| 屯门区| 鲁山县| 博乐市| 永修县| 乃东县| 杭锦旗| 紫金县| 屯留县| 烟台市| 饶平县| 衡阳市| 墨玉县| 曲阳县| 江源县| 保德县| 隆化县|