在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM數(shù)據(jù)加載與存儲(chǔ)指令 (二)

            ARM數(shù)據(jù)加載與存儲(chǔ)指令 (二)

            作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
            接上ARM數(shù)據(jù)加載存儲(chǔ)指令 (一)
            完成下列任務(wù)
            1.閱讀程序exp6_2.s,寫(xiě)出程序的功能。設(shè)置代碼段的基地址為0x8000。用AXD單步調(diào)試程序,觀察每執(zhí)行一步以后,相應(yīng)的寄存器和存儲(chǔ)器的變化情況,完成表格。
            打開(kāi)的process view窗口如下:register,disassembly,low lever symbols,memory
            序號(hào)執(zhí)行指令指令執(zhí)行后變化情況
            寄存器存儲(chǔ)器
            R0R1R2R3R4SPPC0x80240x80280x802C0x80300x8038
            00x00x00x00x00x00x00x80000x200x620x690x670x21
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10

            答案:
            1.程序的功能是計(jì)算給定數(shù)據(jù)各項(xiàng)和的平均值,方法是先將數(shù)據(jù)各項(xiàng)加載到寄存器中,然后利用數(shù)據(jù)處理指令計(jì)算,最后再講結(jié)果存入寄存器中。

            一、 綜合編程
            1.繪圖分析多寄存器傳送指令的各種模式,并設(shè)計(jì)程序驗(yàn)證。(學(xué)生作業(yè))
            IA:
            數(shù)據(jù)起始地址:0x800C
            0x800C 0x10
            0x80100x20
            0x80140x30
            R0R1
            0x100x20

            DB:
            數(shù)據(jù)起始地址:0x8010
            0x80100x10
            0x80140x20
            0x80180x30
            R0R1
            0x100x20

            FD:
            數(shù)據(jù)起始地址:0x800C
            0x800C 0x10
            0x80100x20
            0x80140x30
            R0R1
            0x100x20

            EA:
            數(shù)據(jù)起始地址:0x8010
            0x8010 0x10
            0x80140x20
            0x80180x30
            R0R1
            0x100x20

            二、 注意事項(xiàng) (程序中加載常量和地址的方法)
            實(shí)際編程的過(guò)程中,常需要把立即數(shù)常量和地址值載入寄存器,由于指令集長(zhǎng)度的限制和存儲(chǔ)/加載體系結(jié)構(gòu)的特點(diǎn),這兩個(gè)問(wèn)題需要專門(mén)說(shuō)明。

            區(qū)別:
            START LDR R0,START 把START相對(duì)應(yīng)的地址值的存儲(chǔ)單元里的數(shù)據(jù)加載到R0,這條指令的結(jié)構(gòu)就是R0里存儲(chǔ)的是指令LDR R0,START對(duì)應(yīng)的二進(jìn)制代碼。
            LDR R0,=SRART 把START相對(duì)應(yīng)的地址值加載到R0
            ADR R0,START 把START相對(duì)應(yīng)的地址值加載到R0


            1. 加載常量到寄存器
            (1) 使用MOV或MVN指令直接加載
            直接加載任何取值在0x0~0xFF間的8位常量。
            對(duì)上述的取值進(jìn)行循環(huán)右移偶數(shù)次后的數(shù)值n
            例子: MOV R1,#0x250

            (2) 使用一種偽指令格式加載
            使用一個(gè)LDR指令和在數(shù)字量前的等號(hào),就可以很容易地將常量寫(xiě)入代碼。
            例子:LDR R1,=0x520
            如果構(gòu)造的常量能用MOV或者M(jìn)VN指令加載,那么匯編器會(huì)采用適當(dāng)?shù)闹噶?;否則,匯編器會(huì)產(chǎn)生一個(gè)帶PC相對(duì)偏移地址的LDR指令來(lái)從文字池中讀取常量。
            文字池是為常量留出的一部分內(nèi)存。
            默認(rèn)情況:在END指示的位置。在4kB范圍內(nèi)。
            例6.1 [B1] 加載常量值(example1.s)
            AREA example1,CODE
            ENTRY
            START
            MOV R0,#0xFF ; (1)
            MOV R0,#0xFF0 ; (2)
            LDR R2,=0xFF0 ;(3)
            LDR R3,=0x5C34D77D ;(4)

            STOP
            程序解讀
            (1) 常量在0x0~0xFF之間,可以采用MOV指令直接加載
            (2) 常量0xFF0是將0xFF循環(huán)右移28位后的值,同樣可以采用MOV指令直接加載。
            (3) 常量0xFF0取值在MOV或MVN指令所能加載的取值范圍之內(nèi),在AXD中通過(guò)反匯編可以看到匯編器產(chǎn)生了以下代碼 MOV R2,#0xFF0
            (4) 常量0x5C34D77D超出了取值范圍,所以匯編器用DCD分配了一個(gè)字的內(nèi)存來(lái)存放常量。這段內(nèi)存就是一個(gè)文字池,其地址是0x8020。在ADX中通過(guò)反匯編可以看到匯編產(chǎn)生的一下代碼印證了這一點(diǎn)。
            LDR R3, #0x00008020 ;=#0x5C34D77D
            ...
            0x8020 DCD 0x5C34D77D

            2. 加載地址到寄存器
            程序中常常要加載某個(gè)地址到寄存器中,偽指令A(yù)DR和ADRL的功能就是將一個(gè)寄存器相關(guān)表達(dá)式或程序相關(guān)表達(dá)式的地址存入寄存器中。
            (1)用ADR或ADRL直接加載
            所謂程序相關(guān)表達(dá)式就是標(biāo)號(hào)相對(duì)于當(dāng)前PC的偏移地址,而寄存器相關(guān)表達(dá)式就是標(biāo)號(hào)相對(duì)于保存在指定的通用寄存器中的地址。一般的格式是:
            ADR Rn,label
            ADRL Rn,label

            例6.2加載地址
            AREA example2,CODE
            ENTRY
            START
            ADR R0,START ;(1)
            ADR R1,ADDR ;(2)
            ADRL R2,ADDR+1000 ;(3)

            STOP
            B STOP
            ADDR DCD 0x12345678
            END
            程序解讀
            (1) 代碼(1)在AXD中通過(guò)反匯編可以看到匯編器產(chǎn)生以下代碼
            SUB R0,PC,#8 ;#0x8000
            (2) 代碼(2)在AXD中通過(guò)反匯編可以看到匯編器產(chǎn)生了一下代碼
            ADD R1,PC,#0x10 ;#0x801C
            (3) 代碼(3)在AXD中通過(guò)反匯編可以看到匯編器產(chǎn)生了一下代碼
            ADD R1,PC,#0x300 ;#0x8310
            ADD R2,R2,#0xF4
            由于標(biāo)簽ADDR的地址是0x801C,所以以上匯編器產(chǎn)生的指令將地址正確地加載到了寄存器中。

            (2)使用一種偽指令格式加載(LDR)
            注意:這里的LDR是偽指令,與加載指令不同。
            LDR Rd,=label
            與前述利用LDR指令加載常量到寄存器相似,這種格式也可以加載程序相關(guān)表達(dá)式到寄存器。實(shí)際上,匯編器會(huì)把label的地址放入文字池,并產(chǎn)生一個(gè)LDR指令從文字池上讀取地址。

            例6.3 加載label地址
            AREA example3,CODE
            ENTRY
            START
            BL ARNEW
            STOP
            B STOP
            ARNEW
            LDR R0,=START ;(2)
            LDR R1,=ARNEW ;(3)
            LDR R2,=ARNEW+100 ;(4)
            END
            (1) 這段程序?qū)?shù)值0x20026、START地址、ARNEW地址和ARNEW地址+100都放入了文字池,這樣文字池就變成了
            地址數(shù)據(jù)
            0x80200x20026
            0x80240x8000
            0x80280x8010
            0x802C0x8074
            即在文字池的偏移地址為4處存放著START地址,偏移地址為8處存放著ARNEW地址,偏移地址為12(0xC)處存放著ANREW+100地址。
            (2) 代碼(2)把START的地址放入文字池,匯編器在地址0x8024處分配了1字的內(nèi)存,存放0x8000,產(chǎn)生語(yǔ)句
            LDR R0,[0x8024]
            (3) 代碼(3)把ARNEW的地址放入文字池,匯編器在地址0x8028處分配了1字的內(nèi)存,存放0x8010,產(chǎn)生語(yǔ)句
            LDR R0,[0x8028]
            (4) 代碼(4)把ARNEW+100的地址放入文字池,匯編器在地址0x802C處分配了1字的內(nèi)存,存放0x8074,產(chǎn)生語(yǔ)句
            LDR R0,[0x802C]

            [B1]應(yīng)用小結(jié):
            1. 數(shù)據(jù)在ARM指令允許的范圍內(nèi),用MOV RX,#X
            2. 數(shù)據(jù)超出范圍,用LDR RX,=X。此時(shí)的LDR是一個(gè)偽指令。



            評(píng)論


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

            關(guān)閉