在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM匯編的SWI指令軟中斷

            ARM匯編的SWI指令軟中斷

            作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
            從下面的一個ARM 匯編小程序要弄懂的以下三個問題:

            1).在ARM狀態(tài)轉(zhuǎn)到THUNB狀態(tài)和BX的應用

            本文引用地址:http://www.biyoush.com/article/201611/316759.htm

            2).匯編的架構

            3).SWI指令的使用

                AREA ADDREG,CODE,READONLY

                ENTRY

            MAIN

              ADR r0,ThunbProg 1 ;(為什么要加1呢?因為BX指令跳轉(zhuǎn)到指定的地址執(zhí)行程序 時, 若   (BX{cond} Rm)Rm的位[0]為1,則跳轉(zhuǎn)時自動將CPSR中的標志T置位即把目標 代碼解釋為 Thunb代碼)

                BX r0

               CODE16

            ThunbProg

               mov r2,#2

                mov r3,#3

                add r2,r2,r3

                ADR r0,ARMProg

                BX ro

                CODE32

            ARMProg

                mov r4,#4

                mov r5,#5

                add r4,r4,r5

            stop mov r0,#0x18

            LDR r1,=0x20026

            SWI 0x123456

            END

            SWI--軟中斷指令:

            SWI指令用于產(chǎn)生軟中斷,從擁護模式變換到管理模式,CPSR保存到管理模式的SPSR中.

             SWI{cond} immed_24 ;immed_24為軟中斷號(服務類型)

            使用SWI指令時,通常使用以下兩種方法進行傳遞參數(shù),SWI 異常中斷處理程序就可以提供相關的服務,這兩種方法均是用戶軟件協(xié)定.SWI異常中斷處理程序要通過讀取引起軟中斷的SWI指令,以取得24位立即數(shù).

            (1) 指令中的24位立即數(shù)指定了用戶請求的服務類型,參數(shù)通過通用寄存器傳遞.

             mov r0,#34 ;設置子功能號位34

            SWI 12 ;調(diào)用12號軟中斷

            (2) 指令中的24位立即數(shù)被忽略,用戶請求的服務類型有寄存器RO的值決定,參數(shù)通過其他的通用寄存器傳遞.

             mov r0,#12 ;調(diào)用12號軟中斷

             mov r1,#34 ;設置子功能號位34

             SWI ?。?/p>

            在SWI異常中斷處理程序中,取出SWI立即數(shù)的步驟為:首先確定引起軟中斷的SWI指令是ARM指令還是Thunb指令,這可通過對SPSR訪問得到;然后取得該SWI指令的地址,這可通過訪問LR寄存器得到;接著讀出指令,分解出立即數(shù).如如下程序:

            T_bit EQU 0X20

            SWI_Handler

            STMFD SP!,{R0-R3,R12,LR} ;現(xiàn)場保護

            MRS R0,SPSR ;讀取SPSR

            STMFD SP!,{R0} :保存SPSR

            TST R0,#T_bit

            LDRNEH R0,[LR,#-2] ;若是Thunb指令,讀取指令碼(16位)

               BICNE R0,#0XFF00 :取得Thunb指令的8位立即數(shù)

               LDREQ R0,[LR,#-4] ;若是ARM指令,讀取指令碼(32位)

               BICEQ R0,#0XFF000000 ;取得ARM指令的24位立即數(shù)

              ?。?/p>

               LDMFD SP!,{R0-R3,R12,PC}^ ;SWI異常中斷返回



            評論


            技術專區(qū)

            關閉