組合語言基本介紹與軟體工具學習 2011/9/22
DESCRIPTION
微處理機 Microprocessor (100 上 ) ARM 內核嵌入式 SOC 原理. 組合語言基本介紹與軟體工具學習 2011/9/22. 開啟 IAR Embedded Workbench. 請到 開始 > 所有程式 >IAR System … 根據下圖指示開啟 IAR Embedded Workbench 或從桌面點選捷徑開啟. 選擇 “create new project in current workspace”. - PowerPoint PPT PresentationTRANSCRIPT
組合語言基本介紹與軟體工具學習
2011/9/22
微處理機 Microprocessor (100 上 )
ARM 內核嵌入式 SOC原理
開啟 IAR Embedded Workbench
請到 開始 > 所有程式 >IAR System … 根據下圖指示開啟 IAR Embedded Workbench
或從桌面點選捷徑開啟
選擇 “create new project in current workspace”
Tool cahin 部份請選擇 ARM ,然後根據下圖所示點選 asm ,它會展開一個 asm 的分支 , 表示現在要開啟的是預設為組合語言的 project
按 ok後 , 會出現另一視窗 , 請輸入 project的檔名與選擇要存放的地方 ( 全英數 )
project的副檔名為 .ewp
IAR Embedded Workbench的工作環境 在 project 內預設的組合語言檔案名稱為 asm 可於
存檔時修改 , 其副檔名為 .s79注意 :
先將預設的組合語言程式架構手動清
除掉
實驗範例MOV R0, #0MOV R1, #1MOV R2, #2MOV R3, #3MOV R4, #4MOV R5, #5MOV R6, #6MOV R7, #7MOV R8, #8MOV R9, #9MOV R10, #10
B B .
在主程式區 , 重新輸入左邊的指令 .
此段程式功能為 將常數值 0~10 ( 十進制 ) 依序各別存放到 R0~R10暫存器裡 .
指令輸入完成後 , 按 make鍵 ( 圖示 ) 或是 F7鍵 , 此時會對你剛輸入的程式作編譯 , 編譯完成後若沒有錯誤發生則可在 Messages 視窗下看見相關訊息 .
在編譯完成無錯誤後 按 Debug鍵 ( 圖示 ) 或是 Crtl+D鍵 , 進入 Debug 模式 .
Make 鍵圖示
Debug 鍵圖示
第一次進入 Debug 模式時 , 通常只會跳出 Disassembly(反組譯 ) 的視窗 .
但是在執行程式碼時 ,我們同時也要觀察暫存器與記憶體內容的值 , 故以後在作實驗時 , 我們在這至少要打開三種功能視窗
1.Disassembly 2. Register 3.Memory .
打開方式 : 在 toolbar上的 View 下拉後 ,可依需要而選擇 .
目前在 Debug 模式下, 會使用到的一些功能說明 :
Rest : 將程式重置 .PC會被 Clear為 0 並從 address 0 開始執行指令 .
Step into (F11): 單步執行. 每按一次, 程式只執行一道指令 .
run to cursor: 若程式有設中斷點, 則會跑到中斷點程式就會停止 .
GO : 自動執行整個程式的指令 ,不會單步動作需要按 stop才會停止 .
Exit Debug: 離開 Debug模式 , 回到前面編輯模式 .
中斷點 : 當程式變複雜時 , 可藉用中 斷點的設定來幫助除錯 ( 可以設定多個中斷點 )
暫存器視窗
舉例說明 : 假設 Processor目前在 FIQ 的模式下 , 則在目前模式下的 R8~R14會與 R8_fiq~R14_fiq 暫存器的值相等 , 且當內容改變時會同步的變化 .
有關暫存器各種模式下的配置問題 , 請參考課本 .
在每個模式下的 SPSR 均可以點選
下拉 , 觀察裡面的各旗標值(flag) .
在目前模式下的暫存器
Memory 視窗預設為 位元組 (Byte)顯示模式
對著 Memory 視窗按右鍵勾選 4xUnits 即可改變為字組 (Word)顯示模式 .
排列方式勾選 Little Endian .
指令格式MOV R1, #1 e3a01001 11100011101000000001000000000001 1110 001 1101 0 0000 0001 000000000001
當按下 step into 單步執行的圖示後 , 綠色的指標就會往下跑一個指令 , 表示這是下次所要執行的指令 .
指令被執行時 , 相對應之暫存器的內容若有改變時 則會以紅色的數值來表示 .
基本指令格式<op>{<cond>}{S} Rd, Rn, #<32-bit immediate>
<op>{<cond>}{S} Rd, Rn, Rm {<shift>}
基本指令存入暫存器
MOV Rd, Rn ; Rd = RnMOV Rd, #12 ; Rd = 12
加減乘ADD r0, r1, r2 ; r0 = r1 + r2SUB r0, r1, r2 ; r0 = r1 – r2MUL r0, r1, r2 ; r0 = r1 * r2
左右移動 , 旋轉MOV Rd, Rn LSL #3 ; Rd = Rn * 23
最後 , 若存檔完要關畢 IAR Embedded Workbench 並離開時 , 記得要儲存目前的 workspace ,其 workspace 的副檔名為 .eww
實習一 : 用 16進位值將 (25,17)存入 (R1,R2),即 R1=25, R2=17
並且將 (1)R1+R2 (2)R1-R2 (3)R1*R2
分別顯示在 R3, R4, R5實習二 : 請將 (6+8)X4+(32/16)=?用組合語言表示出來,利用左右移動, 將運算結果指定存放在 R11暫存器中實習三:將 R1=2 並且只使用兩行指令 計算出 R11 = R1*35
( 不可直接使用乘法指令 )
作完請找助教檢查
實習問題