<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM匯編指令學(xué)習 實(shí)現數據塊拷貝

ARM匯編指令學(xué)習 實(shí)現數據塊拷貝

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏
這個(gè)學(xué)期,系里開(kāi)了嵌入式的課程,正好借助這個(gè)機會(huì )系統地學(xué)習下ARM指令系統。這個(gè)系列文章主要是通過(guò)一些簡(jiǎn)單的匯編程序實(shí)例來(lái)學(xué)習ARM指令,使用的編譯器是ADS 1.2。

程序要求:

本文引用地址:http://dyxdggzs.com/article/201611/317791.htm

設計一段程序完成數據塊的,數據從源數據區snum到目標數據區dnum,數據量大小為NUM字(1個(gè)字=4個(gè)字節),時(shí)以8個(gè)字為單位進(jìn)行,對于最后所剩不到8個(gè)字的數據,以字為單位進(jìn)行。

程序清單:

1 ;==============================================================================2 ; blocks.s: 將數據從源數據區snum到目標數據區dnum,數據量大小為NUM字3 ;            時(shí)以8個(gè)字為單位進(jìn)行,最后不夠8個(gè)字的數據按1個(gè)字為單位4 ;==============================================================================5 6 NUM    EQU    20                         ; NUM表示有20個(gè)字(80字節)數據,以字為單位,宏定義要頂格書(shū)寫(xiě)7 8     AREA    Init, CODE, READONLY         ; 定義一個(gè)代碼段,段名為Init,屬性為READONLY 9     CODE32                               ; 告訴匯編編譯器后面的指令序列為32位的ARM指令,10                                          ; 該偽操作只是告訴編譯器后面指令的類(lèi)型,其本身11                                          ; 并不進(jìn)行程序狀態(tài)切換12     ENTRY                                ; 指定程序的入口點(diǎn)13 14 15 ;變量的初始化16 START17     LDR    R0,    =SRC                    ; R0指向源數據區起始地址18     LDR    R1,    =DST                    ; R1指向目的數據區起始地址19     MOV    R2,    #NUM                    ; R2存放待數據量大小,以字為單位20     MOV    SP, #0X400                     ; 堆棧指針指向0X400,堆棧增長(cháng)模式由裝載指令的類(lèi)型域確定    21 22 ;確定條件及保存現場(chǎng)23 BLKCOPY24     MOV    R3,    R2,    LSR    #3        ; 將R2中值除以8后的結果存放在R3,R3中值表示NUM中有多少個(gè)8字單元25     BEQ    COPYWORDS                      ; 若Z=1(R3=0,數據少于1個(gè)8字單元),則跳轉到COPYWORDS處,運行少于8字單元數據處理程序26     STMFD    SP!,    {R4-R11}             ; 保存R4-R11的內容到堆棧,并更新棧指針,FD:滿(mǎn)遞減堆棧,由此可知堆棧長(cháng)向27 28 ;8字單元數據主程序29 OCTCOPY30     LDMIA    R0!,    {R4-R11}             ; 從R0所指的源數據區裝載8個(gè)字數據到R4-R11中,每次裝載1個(gè)字后R0中地址加1,最后更新R0中地址31     STMIA    R1!,    {R4-R11}             ; 將R4-R11的8個(gè)字數據存入R1所指的目的數據區,每次裝載1個(gè)字后R1中地址加1,最后更新R1中地址32     SUBS    R3,    R3,    #1              ; 每一次,則R3=R3-1,表示已經(jīng)了1個(gè)8字單元,結果影響CPSR33     BNE    OCTCOPY                        ; 若CPSR的Z=0(即運算結果R3不等于0),跳轉到OCTCOPY,繼續下一個(gè)8字單元數據34     LDMFD    SP!,    {R4-R11}             ; 將堆棧內容恢復到R4-R11中,并更新堆棧指針,此時(shí)整8字單元數據已經(jīng)完成,且出棧模式應和入棧模式一樣35 36 ;少于8字單元數據處理程序37 COPYWORDS38     ANDS    R2,R2,    #7                  ; 得到NUM除以8后余數,即未滿(mǎn)8字單元數據的字數(1個(gè)字=4個(gè)字節)39     BEQ    STOP                           ; 若R2=0(NUM有整數個(gè)8字單元),則停止40 41 ;單字單元數據程序,用來(lái)處理不足8字單元數據    42 WORDCOPY43     LDR    R3,    [R0],    #4             ; 將R0所指源數據區的4個(gè)字節(1個(gè)字)數據裝載至R3,然后R0=R0+444     STR    R3,    [R1],    #4             ; 將R3中4個(gè)字節(1個(gè)字)數據存到R1所指目的數據區,然后R1=R1+445     SUBS    R2,    R2,    #1              ; 數據傳輸控制計數器減1(其總是小于8),成功一個(gè)字數據46     BNE    WORDCOPY                       ; 若R2不等于0,則轉到WORDCOPY,繼續下一個(gè)字數據47     48 ;停止操作死循環(huán)49 STOP50     B    STOP51 52 ;數據緩沖池53 LTORG                                     ;聲明一個(gè)數據緩沖池的開(kāi)始,一般在代碼的最后面54 ;定義源數據區,每個(gè)數據均是字型(占4個(gè)字節)55 ;DCD,分配一段字內存單元(分配的內存是字對齊的),并用后續的數據初始化該段內存56 SRC    DCD    1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4    57 58 ;定義目的數據區,并初始化為059 DST    DCD    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,060 61 62 ;源程序結尾63     END



關(guān)鍵詞: ARM匯編指令數據塊拷

評論


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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>