中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Thumb指令集之: ARM和Thumb的混合編程

        Thumb指令集之: ARM和Thumb的混合編程

        作者: 時間:2013-09-30 來源:網(wǎng)絡 收藏

        本文引用地址:http://www.antipu.com.cn/article/257035.htm

        11.10和Thumb的

        11.10.1互交工作基礎

        Thumb以其較高的代碼密度和在窄存儲器上的性能,使得它在很多系統(tǒng)中得到廣泛應用。但在很多情況下,還是不得不使用指令,這是因為:

        代碼比Thumb代碼有更快的執(zhí)行速度;

        ②ARM處理器的一些特定功能必須由ARM指令實現(xiàn),其中包括PSR指令、協(xié)處理器指令;

        ③異常發(fā)生時,處理器自動進入ARM狀態(tài),如果異常處理程序需要使用Thumb指令也必須通用一個ARM程序頭(ARMassemblerheader)。

        基于以上原因,即使程序需要由Thumb代碼實現(xiàn),也必須通過ARM-Thumb互交(ARM-Thumbinterworking)進入Thumb狀態(tài)。

        ARM-Thumb互交是指對匯編語言和C/C++語言的ARM和Thumb代碼進行連接的方法,它進行兩種狀態(tài)(ARM和Thumb狀態(tài))間的切換。在進行這種切換時,有時需使用額外的代碼,這些代碼被稱為。定義了ARM和Thumb過程調用的標準。

        從一個ARM例程調用一個Thumb例程,內核必須進行狀態(tài)切換。狀態(tài)的變化由CPSR的T位來顯示。在跳轉到一個例程時BX指令可用于ARM和Thumb狀態(tài)切換,具體用法如下。

        在Thumb狀態(tài)調用ARM例程時,采用:

        BXRn;

        在ARM狀態(tài)調用Thumb例程時,采用:

        BX{cond}Rn;

        其中,Rn可以是r0~r15中的任意寄存器。

        這種帶狀態(tài)切換的跳轉指令BX,將寄存器Rn的內容拷貝到程序計數(shù)器寄存器PC,因此可以實現(xiàn)4G空間的跳轉。指令根據(jù)寄存器Rn的bit[0]來決定處理器是否進行狀態(tài)切換,詳細內容參見ARM指令一節(jié)。

        下面是一段ARM程序,該程序調用虛擬的SWI_writeC子程序從存儲器的固定地址取出字符串“helloworld”并輸出。

        AREAHello,CODE,READONLY

        SWI_WriteCEQU0 ;軟中斷調用參數(shù)

        SWI_ExitEQU11 ;程序退出軟中斷調用參數(shù)

        ENTRY

        STARTADRr1,TEXT ;取字符串地址

        LOOPLDRBr0,[r1],#1 ;取下一字節(jié)內容

        CMPr0,#0 ;判斷是否為字符串尾

        SWINESWI_WriteC ;軟中斷調用打印字符

        BENLOOP ;循環(huán)

        SWISWI_Exit ;軟中斷調用退出程序執(zhí)行

        TEXT=“HelloWorld”,0a,0d,0

        END

        下面的代碼將上面的ARM代碼轉換成等價的Thumb代碼。

        AREAHelloW_Thumb,CODE,READONLY

        SWI_WriteCEQU0 ;軟中斷調用參數(shù)

        SWI_ExitEQU11 ;程序退出軟中斷調用參數(shù)

        ENTRY ;程序入口點

        CODE32進入ARM狀態(tài)

        ADRr0,START+1 ;取得Thumb代碼入口地址

        BXr0 ;進入Thumb代碼

        CODE16 ;Thumb代碼入口點

        STARTADRr1,TEXT ;r1->HelloWorld

        LOOPLDRBr0,[r1] ;取下一字節(jié)內容

        ADDr1,r1,#1 ;地址指針加1**T

        CMPr0,#0 ;判斷是否為字符串尾

        BEQDONE ;完成?**T

        SWISWI_WriteC ;如果不是字符串尾

        BLOOP ;繼續(xù)循環(huán)

        DONESWISWI_Exit ;程序退出

        ALIGN ;字對齊

        TEXTDATA

        HelloWorld,0a,0d,00

        END

        上例中,ARM代碼到Thumb代碼轉換過程中新增加的指令用“**T”標注。

        c++相關文章:c++教程



        上一頁 1 2 3 4 5 6 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉