在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            ARM控制轉(zhuǎn)移指令

            作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
            微處理器對(duì)取自連續(xù)的存儲(chǔ)器地址單元的指令默認(rèn)的執(zhí)行順序操作是采用直線式的,即順序執(zhí)行指令,但在實(shí)際應(yīng)用中,往往需要改變這一執(zhí)行序列,轉(zhuǎn)移到存儲(chǔ)器的某個(gè)部分去執(zhí)行那里的指令,控制轉(zhuǎn)移指令能夠?qū)⑦@個(gè)執(zhí)行序列轉(zhuǎn)移到存儲(chǔ)器別的部分。
            知識(shí)點(diǎn):
            轉(zhuǎn)移和轉(zhuǎn)移鏈接指令B和BL
            B {cond} label
            BL {cond} label
            (1) 無(wú)條件轉(zhuǎn)移
            (2) 條件轉(zhuǎn)移
            轉(zhuǎn)移交換指令BX

            實(shí)驗(yàn):ARM與Thumb狀態(tài)切換
            例子
            AREA Example2,CODE
            ENTRY
            START
            ADR R0,TSTART+1 ;(1)
            BX R0 ;(2)
            CODE16 ;(3)
            TSTART
            MOV R0,#10
            MOV R1,#5
            BL DOADD ;(4)
            STOP
            MOV R0,#0x18
            LDR R1,=0x20026
            SWI 0xAB ;(5)
            DOADD
            ADD R0,R0,R1
            MOV PC,LR

            END
            程序解讀:
            1. 不是所有的ARM處理器都支持Thumb指令,只有ARMv4T版本以及以后的體系結(jié)構(gòu)支持Thumb,這里的例子程序時(shí)在ARM7TDMI核的處理器下運(yùn)行的。
            2. 代碼(1)偽指令A(yù)DR將寄存器相關(guān)表達(dá)式或程序相關(guān)表達(dá)式的地址存入寄存器中。這里是將地址TSTART+1存入R0中,這樣就加載了轉(zhuǎn)移地址并且設(shè)置了最低有效位。
            3. 代碼(2)這是R0中數(shù)值的第0位是1,所以該語(yǔ)句執(zhí)行后處理器切換進(jìn)入Thumb狀態(tài),開(kāi)始執(zhí)行Thumb指令,這時(shí)應(yīng)看到狀態(tài)寄存器的T位被置1。
            4. 代碼(3)匯編器需要知道什么時(shí)候產(chǎn)生ARM代碼,什么時(shí)候產(chǎn)生Thumb代碼。偽指令。。。。。。。。。。。。。。


            AREA Example2,CODE
            ENTRY
            START8000ADR R0,TSTART+1R0=0x00008009;
            PC=0x00008004
            add r0,pc,#1 ; #0x8009
            8004BX R0PC=0x00008008;CPSR­_Tbx r0
            CODE16(thumb)
            TSTART8008MOV R0,#10R0=0x0000000A;PC=0000800Amov r0,#0xa
            800aMOV R1,#5R1=0x00000005;PC=0000800Cmov r1,#5
            800cBL DOADDLR(R14)=0x00008011;PC=0x00008016bl DOADD
            STOP8010MOV R0,#0x18R0=0x 00000018;PC= 0x00008012mov r0,#0x18
            8012LDR R1,=0x20026R1= 0x00020026;PC= 0x00008014ldr r1,0x0000801c ; = #0x00020026
            8014SWI 0xABswi 0xab
            DOADDADD R0,R0,R1R0= 0x0000000F;PC= 0x00008018add r0,r0,r1
            8018MOV PC,LRPC= 0x00008010 mov pc,r14
            END



            實(shí)驗(yàn)一
            程序7_1.s
            AREA Lab1,CODE
            ENTRY
            START
            ADR R0,TSTART+1
            BX R0
            CODE16
            TSTART
            MOV R0,#10
            MOV R1,#5
            ADD R0,R0,R1

            ADR R0,ASTART ;(1)
            BX R0
            CODE32
            ASTART
            MOV R0,#0x12
            MOV R1,#0x34
            ADD R0,R0,R1
            STOP
            MOV R0,#0x18
            LDR R1,=0x20026
            SWI 0x123456 ;(2)

            END

            1. 閱讀程序,畫(huà)出流程圖,并簡(jiǎn)單描述程序?qū)崿F(xiàn)的功能。
            2. 在ARMLinker中設(shè)置R0Base=0x00008000,完成下表。
            3. ARM指令和Thumb指令在存儲(chǔ)方面的差異是什么?
            序號(hào)執(zhí)行指令指令執(zhí)行后的變化情況
            寄存器
            R0R1R2R15CPSR
            00x00x00x00x8000
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10

            答案:
            1. 程序的功能是利用轉(zhuǎn)移交換指令完成ARM和Thumb狀態(tài)切換。
            2. 代碼(1)再次用ADR獲得地址,但這一次清除了最低的有效位。由此可知,在執(zhí)行轉(zhuǎn)換交換之后,處理器會(huì)切換進(jìn)入ARM狀態(tài),開(kāi)始執(zhí)行ARM指令。這時(shí)應(yīng)看到狀態(tài)寄存器的T位被清除。
            3. 代碼(2)因?yàn)楝F(xiàn)在又回到ARM狀態(tài)下,所以調(diào)用軟中斷用一下語(yǔ)句:
            SWI 0x123456


            實(shí)驗(yàn)二


            程序Ex_of1.s
            AREA Ex_of1,CODE
            ENTRY
            START
            ADR R0,TSTART+1
            BX R0
            CODE16
            TSTART
            MOV R0,#10
            MOV R1,#5
            ADD R0,R0,R1
            STOP
            MOV R0,#0x18
            LDR R1,=0x20026
            SWI 0xAB
            END

            程序Ex_of2.s
            AREA Ex_of2,CODE
            ENTRY
            START
            ADR R0,ASTART
            BX R0
            ;CODE16
            ASTART
            MOV R0,#10
            MOV R1,#5
            ADD R0,R0,R1
            STOP
            MOV R0,#0x18
            LDR R1,=0x20026
            SWI 0x123456
            END

            閱讀程序Ex_of1.s和Ex_of2.s,根據(jù)下列兩個(gè)程序回答問(wèn)題:
            4. 先不執(zhí)行程序,分析程序Ex_of1.s和Ex_of2.s的大小各為多少字節(jié),為什么會(huì)有這樣的差異?
            5. ARM和Thumb間的狀態(tài)切換對(duì)寄存器的內(nèi)容有無(wú)影響?
            6. 執(zhí)行程序,驗(yàn)證你的回答。


            關(guān)鍵詞: ARM控制轉(zhuǎn)移指

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉