在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計(jì)應(yīng)用 > ARM處理器的工作模式 (二)

            ARM處理器的工作模式 (二)

            作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
            ARM處理器工作模式(一)
            實(shí)驗(yàn)二 各工作模式下堆棧初始化實(shí)驗(yàn)(ARM9)(工程exp9,文件exp9_2_1.s)
            本實(shí)驗(yàn)實(shí)現(xiàn)各工作模式下堆棧初始化,采用ARMmulator方式調(diào)試,選用ARM9作為目標(biāo)處理器。
            AREA INIT_STACK,CODE,READONLY
            ENTRY ;工作于管理模式
            START MOV R1,#1 ;初始化R1
            BL INITSTACK ;設(shè)置各模式下的堆棧指針
            ;回到用戶模式下運(yùn)行應(yīng)用程序
            MRS R1,CPSR ;保存CPSR于R1
            BIC R1,R1,#0x80
            MSR CPSR_cxsf,R1
            MSR CPSR_c,#0xd0
            MRS R3,CPSR
            BIC R3,R3,#0x80
            MSR CPSR_cxsf,R3
            MSR CPSR_c,#0xdf ;切換至系統(tǒng)模式
            STOP B STOP

            INITSTACK ;初始化各種模式下的堆棧指針
            MOV R0,LR ;保存LR值8008,以待返回
            LDR SP,P_SVC_STK ;初始化堆棧指針SP_SVC&USR=809C
            MSR CPSR_c,#0xd2 ;1101 0010,切換至外中斷模式
            LDR SP,P_IRQ_STK ;初始化堆棧指針SP_IRQ=

            MSR CPSR_c,#0xd1 ;切換至快中斷模式
            LDR SP,P_FIQ_STK ;初始化堆棧指針SP_IRQ=
            STMED SP!,{R0,R1} ;保護(hù)現(xiàn)場 R0,R1(存入相應(yīng)的堆棧里面)
            NOP

            MSR CPSR_c,#0xd7 ;切換到ABT
            LDR SP,P_ABT_STK
            MSR CPSR_c,#0xdb ;切換到UND
            LDR SP,P_UND_STK

            MSR CPSR_c,#0xdf ;切換到USR
            LDR SP,P_USR_STK

            MOV PC,R0 ;返回原程序

            ;定義各個(gè)工作模式下的堆棧長度
            USR_STK_LEN EQU 4
            SVC_STK_LEN EQU 4
            IRQ_STK_LEN EQU 4
            FIQ_STK_LEN EQU 4
            ABT_STK_LEN EQU 4
            UND_STK_LEN EQU 4

            ;定義各工作模式下的堆棧指針
            P_USR_STK DCDUSR_STK_SPC+(USR_STK_LEN-1)*4
            P_SVC_STK DCD SVC_STK_SPC+(SVC_STK_LEN-1)*4
            P_IRQ_STK DCD IRQ_STK_SPC+(IRQ_STK_LEN-1)*4
            P_FIQ_STK DCD FIQ_STK_SPC+(FIQ_STK_LEN-1)*4
            P_ABT_STK DCD ABT_STK_SPC+(ABT_STK_LEN-1)*4
            P_UND_STK DCD UND_STK_SPC+(UND_STK_LEN-1)*4

            ;定義各工作模式下的堆棧空間
            AREA STACKS,DATA,READWRITE
            USR_STK_SPC SPACE USR_STK_LEN*4
            SVC_STK_SPC SPACE SVC_STK_LEN*4
            IRQ_STK_SPC SPACE IRQ_STK_LEN*4
            FIQ_STK_SPC SPACE FIQ_STK_LEN*4
            ABT_STK_SPC SPACE ABT_STK_LEN*4
            UND_STK_SPC SPACE UND_STK_LEN*4

            END


            1. 單步運(yùn)行程序,列出本實(shí)驗(yàn)的指令執(zhí)行情況表,統(tǒng)計(jì)程序設(shè)計(jì)的相關(guān)寄存器以及存儲(chǔ)空間上的相關(guān)地址,并記錄程序運(yùn)行過程中這些寄存器、存儲(chǔ)空間相關(guān)地址上的變化情況,同時(shí)記錄ARM工作模式的變化情況。
            2. 根據(jù)本實(shí)驗(yàn)的執(zhí)行結(jié)果,并結(jié)合ARM反匯編表的信息,畫出ARM各模式的堆??臻g分配圖,標(biāo)出各模式堆棧的起始地址、堆棧長度以及堆棧指針的位置。
            3. 如何實(shí)現(xiàn)各種工作模式下的堆棧初始化
            序號(hào)執(zhí)行指令指令執(zhí)行后的變化情況
            寄存器&存儲(chǔ)空間工作模式
            0
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13



            START [0xe3a01001] mov r1,#1
            00008004 [0xeb000008] bl INITSTACK
            00008008 [0xe10f1000] mrs r1,cpsr
            0000800c [0xe3c11080] bic r1,r1,#0x80
            00008010 [0xe12ff001] msr cpsr_cxsf,r1
            00008014 [0xe321f0d0] msr cpsr_c,#0xd0
            00008018 [0xe10f3000] mrs r3,cpsr
            0000801c [0xe3c33080] bic r3,r3,#0x80
            00008020 [0xe12ff003] msr cpsr_cxsf,r3
            00008024 [0xe321f0df] msr cpsr_c,#0xdf
            STOP [0xeafffffe] b STOP
            INITSTACK [0xe1a0000e] mov r0,r14
            00008030 [0xe59fd034] ldr r13,P_SVC_STK ; = #P_SVC_STK
            00008034 [0xe321f0d2] msr cpsr_c,#0xd2
            00008038 [0xe59fd030] ldr r13,P_IRQ_STK ; = #P_IRQ_STK
            0000803c [0xe321f0d1] msr cpsr_c,#0xd1
            00008040 [0xe59fd02c] ldr r13,P_FIQ_STK ; = #P_FIQ_STK
            00008044 [0xe82d0003] stmed r13!,{r0,r1}
            00008048 [0xe1a00000] nop
            0000804c [0xe321f0d7] msr cpsr_c,#0xd7
            00008050 [0xe59fd020] ldr r13,P_ABT_STK ; = #P_ABT_STK
            00008054 [0xe321f0db] msr cpsr_c,#0xdb
            00008058 [0xe59fd01c] ldr r13,P_UND_STK ; = #P_UND_STK
            0000805c [0xe321f0df] msr cpsr_c,#0xdf
            00008060 [0xe59fd000] ldr r13,P_USR_STK ; = #P_USR_STK
            00008064 [0xe1a0f000] mov pc,r0
            ;定義各工作模式下的堆棧指針
            P_USR_STK00008068 [0x0000808c] dcd 0x0000808c ....
            P_SVC_STK0000806C [0x0000809c] dcd 0x0000809c ....
            P_IRQ_STK00008070 [0x000080ac] dcd 0x000080ac ....
            P_FIQ_STK00008074 [0x000080bc] dcd 0x000080bc ....
            P_ABT_STK00008078 [0x000080cc] dcd 0x000080cc ....
            P_UND_STK0000807C [0x000080dc] dcd 0x000080dc ....
            ;定義各工作模式下的堆棧空間
            USR_STK_SPC00008080 [0x00000000] dcd 0x00000000 ....
            00008084 [0x00000000] dcd 0x00000000 ....
            00008088 [0x00000000] dcd 0x00000000 ....
            0000808c [0x00000000] dcd 0x00000000 ....
            SVC_STK_SPC00008090 [0x00000000] dcd 0x00000000 ....
            00008094 [0x00000000] dcd 0x00000000 ....
            00008098 [0x00000000] dcd 0x00000000 ....
            0000809c [0x00000000] dcd 0x00000000 ....
            IRQ_STK_SPC000080a0 [0x00000000] dcd 0x00000000 ....
            000080a4 [0x00000000] dcd 0x00000000 ....
            000080a8 [0x00000000] dcd 0x00000000 ....
            000080ac [0x00000000] dcd 0x00000000 ....
            FIQ_STK_SPC [0x00000000] dcd 0x00000000 ....
            000080b4 [0x00000000] dcd 0x00000000 ....
            000080b8 [0x00000000] dcd 0x00000000 ....
            000080bc [0x00000000] dcd 0x00000000 ....
            ABT_STK_SPC [0x00000000] dcd 0x00000000 ....
            000080c4 [0x00000000] dcd 0x00000000 ....
            000080c8 [0x00000000] dcd 0x00000000 ....
            000080cc [0x00000000] dcd 0x00000000 ....
            UND_STK_SPC [0x00000000] dcd 0x00000000 ....
            000080d4 [0x00000000] dcd 0x00000000 ....
            000080d8 [0x00000000] dcd 0x00000000 ....
            000080dc [0x00000000] dcd 0x00000000 ....
            實(shí)驗(yàn)思考題:
            1. 如果把實(shí)驗(yàn)一的程序運(yùn)行于實(shí)際ARM系統(tǒng)中,運(yùn)行的結(jié)果會(huì)是怎樣?
            2. 實(shí)驗(yàn)二的程序中,子程序INITSTACK的第一行代碼MOV R0,LR的作用是什么?如果刪除,對(duì)程序的運(yùn)行會(huì)有什么影響?


            關(guān)鍵詞: ARM處理器工作模

            評(píng)論


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

            關(guān)閉