新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編指令的條件執行及其他相關細節

        ARM匯編指令的條件執行及其他相關細節

        作者: 時間:2016-11-09 來源:網絡 收藏
        ARM指令在機器中的表示格式用32位的二進制數表示

        例如 ADDEQS R0,R1,#8 表示為下表

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

        31~28

        27~25

        24~21

        20

        19~16

        15~12

        11~0

        0000

        001

        0100

        1

        0001

        0000

        000000001000

        cond

        opcode

        Rn

        Rd

        Op2

        ARM指令一般分為5個域:

        第一個域就是跟條件執行相關的cond,即條件碼域

        第二個是指令代碼域,即 opcode ,

        第三個域是地址基址Rn,即第一個操作數,為寄存器

        第四個域是目標或源寄存器Rd,

        第五個域是地址偏移或操作寄存器、操作數區,即Op2

        上述指令的5個域為 0000 0010 1001 0001 0000 0000 0000 1000

        16進制代碼為0291008H ,指令功能是將R1和8相加,結果放入R0中

        用助記符表示的ARM指令一般格式如下

        {}{S},{,} 其中{}里的是可以省略的

        如上述的指令 ADDEQS R0,R1,#8

        opcode是ADD ,cond是EQ,S代表的是第20位,{S}決定指令的執行結果是否影響CPSR的值,本例為1

        Rd為R0,Rn為R1,op2為8

        助記符中的{S}位,即32位機器碼的第20位,在助記符中通常可以取S或!或空

        取S的情況已經說了,加上S影響CPSR的值

        加上!后綴,指令執行后,基址寄存器中的地址將發生如下變化:

        基址寄存器中的值(指令執行后)=指令執行前的值+地址偏移量

        如 LDR R3,[R0,#4]! , 指令的結果將R0加4作為地址指針,把這個指針所指向的地址單元所存貯的數據讀入R3,并且把R0+4的值送到R0中

        使用!后綴必須注意以下事項:

        1、 !后綴必須緊跟在地址表達式后面,而地址表達式要有明確的地址偏移量

        2、!后綴不能用于R15(PC)的后面

        3、!后綴當用在單個地址寄存器后面時,必須確保這個寄存器有隱性的偏移量,例如

        STMDB R1!{R3,R5,R7} 此時的地址基址寄存器的隱性偏移量為4

        好了 最后講正題,條件的指令執行

        前面提到cond有4位, [31:28],一共有16種組合 ,跟CPSR配合決定指令是否執行

        如指令ADDEQ R4,R3,#1 ,帶EQ標志位

        只有當CPSR中的Z置位才執行該指令

        又如前面的例子 ADDEQS R0,R1,#8 ,也是只有當CPSR中的Z置位才執行該指令

        條件后綴和S后綴的關系如下

        1、 如果既有條件后綴又有S后綴,則書寫時S排在后面 如ADDEQS R1,R0,R2

        該指令在Z=1時執行,將R0+R2的值放入R1,同時刷新條件標志位

        2、條件后綴是要測試條件標志位,而S后綴是要刷新條件標志位

        3、條件后綴要測試的是執行前的標志位,而S后綴是依據指令的結果改變條件標志。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 辽源市| 德江县| 凤山县| 岳普湖县| 时尚| 百色市| 攀枝花市| 北流市| 镇沅| 清丰县| 竹北市| 盘山县| 阿勒泰市| 将乐县| 怀化市| 桃园市| 新平| 甘肃省| 安塞县| 洛南县| 潞西市| 马尔康县| 榕江县| 德安县| 苏州市| 宁武县| 昌吉市| 天峨县| 奉贤区| 饶阳县| 海丰县| 阿尔山市| 宁夏| 芦山县| 台前县| 社会| 信宜市| 罗城| 辽阳市| 商城县| 安宁市|