1 / 6

ARM 指令實驗

ARM 指令實驗. 實驗說明. 實驗目的: 通過實驗掌握 ARM 組合語言的使用方法。 實驗設備: 硬體使用 PC 主機,軟體使用 Embest IDE 2003 整合開發環境, Windows 98/2000/NT/XP 。 實驗內容: 使用簡單 ARM 組合語言,操作暫存器和記憶體區作互相的資料交換。. 實驗操作步驟. 執行 Embest IDE 整合開發環境,打開實驗系統常式目錄下 ARMcode_test 子目錄下的 ARMcode.ews 常式。 通過操作功能表欄或使用快捷命令編譯鏈結專案。

Download Presentation

ARM 指令實驗

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ARM指令實驗

  2. 實驗說明 • 實驗目的: • 通過實驗掌握ARM組合語言的使用方法。 • 實驗設備: • 硬體使用PC主機,軟體使用Embest IDE 2003整合開發環境,Windows 98/2000/NT/XP。 • 實驗內容: • 使用簡單ARM組合語言,操作暫存器和記憶體區作互相的資料交換。

  3. 實驗操作步驟 • 執行Embest IDE整合開發環境,打開實驗系統常式目錄下ARMcode_test子目錄下的ARMcode.ews常式。 • 通過操作功能表欄或使用快捷命令編譯鏈結專案。 • 選擇Debug功能表Remote Connect 進行連接軟體模擬器,執行Download命令下載程式,並打開暫存器視窗。 • 單步執行程式並觀察和記錄暫存器R0-R15的值變化。 • 切換到組譯原始程式,分別在19行和35行設定中斷點,全速執行到中斷點;再單步執行程式,觀察和記錄暫存器R0-R15的值變化。 • 結合實驗內容和相關資料,觀察程式執行,通過實驗加深理解ARM指令的使用。

  4. 實驗參考程式 • #/* $Revision: 1.1.34.1 $: • # AREA Block, CODE, READONLY • .global _start • .text • _start: /*程式碼開始旗標*/ • .equ num, 20 /* 定義變數num,並賦值為20*/ • # ENTRY /* 程式入埠旗標*/ • start: • LDR r0, =src /* SRC標識的位址放入R0 */ • LDR r1, =dst /* DST標識的位址放入R1 */ • MOV r2, #num /* 裝載num的值到R2 */ • MOV sp, #0x400 /* 設定SP堆疊開始位址為 0x400*/

  5. 實驗參考程式 • blockcopy: • MOVS r3,r2, LSR #3 /* R2右移3位元後的值放入R3 */ • BEQ copywords /* 判斷是否為0,為0跳移*/ • STMFD sp!, {r4-r11} /* 把R4到R11的值保存到SP標識的堆疊中*/ • octcopy: • LDMIA r0!, {r4-r11} /* 把R0中的位址標識的內容順序裝載到R4到R11中*/ • STMIA r1!, {r4-r11} /* 把R4到R11的值順序保存到以R1起始位址的記憶體中*/ • SUBS r3, r3, #1 /* R3 -1 計數 */ • BNE octcopy /* 判斷結果是否為0,不為0 跳移*/ • /*需要注意的是,LDMIA或者STMIA指令執行後,R0,R1的值產生變化,每一次暫存器操作,R0或者R1的值會自動增加一個位元組的量,這裏操作了8個暫存器,R0或者R1的值也相應增加了8個位元組*/ • LDMFD sp!, {r4-r11} /* 把剛才保存的SP堆疊中的值恢復到R4到R11中*/

  6. 實驗參考程式 • copywords: • ANDS r2, r2, #7 /* 邏輯與,把R2前7位元扔掉*/ • BEQ stop /* 判斷是否為0,為0跳移*/ • wordcopy: • LDR r3, [r0], #4 /* 把R0表示位址的內容的後4位元全部拷貝到R3*/ • STR r3, [r1], #4 /* 把R3的內容,放入以R1為起始位址的4位元記憶體中*/ • SUBS r2, r2, #1 /* R2 –1 放回R2 */ • BNE wordcopy /* 判斷是否為0,不為0跳移 */ • /*同樣的,這裏R0,R1操作後,R0,R1會自動加上便宜量*/ • stop: • B stop /*程式結束,進入閉環*/ • src: • .long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 /*定義了一個資料區,以SRC為起始位址*/ • dst: • .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /*定義了一個資料區,以DST為起始位址*/

More Related