• 沒有找到結果。

實驗實驗實驗實驗四四四四

N/A
N/A
Protected

Academic year: 2022

Share "實驗實驗實驗實驗四四四四"

Copied!
15
0
0

加載中.... (立即查看全文)

全文

(1)

實驗 實驗 實驗

實驗四 四 四 四. AndeSight 組 組 組 組合語言與 合語言與 合語言與 合語言與 C 語言 語言 語言 語言程 程 程 程式練習 式練習 式練習 式練習實習 實習 實習 實習

本實習由四資工二 B 林淵博、劉德寬、郭撫龍所實驗研究,由周志學副教授 指導。

一 一 一

一、 、 、 、 實習目的 實習目的 實習目的 實習目的

此單元旨在幫助同學了解 AndesCore™系統晶片開發專案程式的撰寫,藉由 練習 AndesCore™組合語言程式與在控制 AndesCore™晶片的 C 語言程式中使用 組合語言以提升程式效能以及彌補 C 語言程式部份無法直接存取的硬體,使用者 完整練習所有實作步驟後,將可養成專案開發控制晶片基本程式寫作能力與使用 AndESLive™虛擬模擬平台驗證開發專案的正確性。

二 二

二 二、 、 、 、 工作 工作 工作 工作原理 原理 原理 原理

此實習共有一個組合語言程式及一個 C 語言程式。NDSHEX2ASC 是微控制器 製作過程中經常遇到的數字與 ASCII 碼的轉換,為了將存在記憶體中二進制的資 料以十六進制的數字顯示出來以利閱讀,一般需要先將欲顯示的數字的 ASCII 碼 找出來然後直接送至顯示輸出的副程式顯示在螢幕上,欲顯示的數字分成兩組,

第一組 0~9,其 ASCII 碼恰好是二進制的數值加上 0x30,第二組則是 A~F 其 ASCII 碼恰好是二進制的數值加上 0x37。現在要利用 NDSHEX2ASC 為藍本撰寫將 0~F 的 ASCII 碼轉換回數字碼。

在 C 程式部分 NDSINLINEASM 示範在 C 語言程式中如何使用行內組合語言 (inline assembly)讀取 C 語言程式中的變數,同時將執行結果存入 C 語言變數供 C 程式運算。現在要以 NDSINLINEASM 為藍本,將 C 變數 i,j 放入行內組合語言中,

執行乘法後將乘積放回 C 變數 product 中。

三 三

三 三、 、 、 、 實習步驟 實習步驟 實習步驟 實習步驟

如以上說明,本實習共有兩個實作模組,以下將說明專案開發流程及程式撰 寫做步驟與技巧。

(2)

實作範例一 實作範例一 實作範例一

實作範例一:::組合語言程式練習:組合語言程式練習組合語言程式練習-組合語言程式練習--NDSHEX2ASC

以下為此程式程式碼:

.text .global main main:

la $r0, digit !load the address of the digit to converted la $r1, asc !load the address for the result

li $r5,#16 loop:

lwi.bi $r3, [$r0], #4 !load a word into R3 and update R0 slti $r4, $r0, #0x40

add:

addi $r3, $r3, #-0x30 bnez $r4, exit addi $r3, $r3, #-0x01 exit:

swi.bi $r3, [$r1],#4

addi $r5,$r5,#-1 !decrement the word counter bnez $r5,loop !and repeat loop if not finished ret

.data .align 2 digit:

.word 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46

.sbss_w asc:

.space 16 !storage for result

.end

1. 啟動 AndeSight™。

(3)

2. 成功啟動 AndeSight™後,接下來在 Project Explore 的視窗上點右鍵,點選

《Import…》來匯入一個專案。

3. 在出現的視窗中選擇《Existing Projects into Workspace》,設定完成點選《Next》

進入下一個視窗。

(4)

4. 在此視窗選擇放置專案位置,點選《Finish》完成專案設定。

5. 匯入成功後,即可在 Project Explore 視窗可看到剛匯入的檔案。

(5)

6. 將要傳送的目標平台匯入,點選 Target 選單中的《Input Target》,利用此功能 將剛剛所啟動的 VEP Simulator Engine 匯入。

7. 匯入動作完成後會在 AndeSight™開發環境中的 Target Manager 視窗,看到

"VEP:[電腦名稱] "的圖呈現綠點狀態。

8. 接下來即可 Build 所開發的程式,在剛匯入的檔案上按下滑鼠右鍵出現選單,

點選《Build Project》。

(6)

9. 如在 Console 未出現錯誤訊息則表示 Build 成功。

10. 將資料夾中的《hex2asc.vep》檔拉至 VEP Target。

11. 選到專案夾上按下滑鼠右鍵,彈出選單選擇《Debug As》中的《Debug…》來 使用此功能來進行 Debug 動作。

(7)

12. 在 Debug 設定視窗中,將要 Debug 的相關檔案路徑以及中斷點設定完成後點 選《Debug》進入 Debug 視窗。

13. 在 Debug 視窗右方點選《Registers》視窗中,即可看到程式中使用到的暫存 器各個記憶體內容。

(8)

14. 在 Debug 視窗右方點選《Memory》視窗中,點選新增觀看記憶體內容動作 的位址,彈出新增視窗輸入《r0》的內容。

15. 新增完記憶體內容後,在下方即可看到記憶體內容。

16. 接下來使用單步執行,來觀察記憶題資料搬移動作,點選單步執行模式後,

即可看到目前程式執行的順序。

(9)

 實驗結果 實驗結果 實驗結果 實驗結果

1. 執行前,ASCII 的數值從 0x30~0x39 以及 0x41~0x46。

2. 點選單步執行按鈕,讓程式執行一次流程後,即可看到記憶體資料變成 16進制的 1~15。

 討論 討論 討論 討論

ASCII 碼在微處理器的領域中,是經常使用到的編碼方式。此實習只需要修 改程式語法,便能應用各種微處理器上實用性很大。

(10)

實作範例二 實作範例二 實作範例二

實作範例二:::C 程式練習: 程式練習程式練習-程式練習--NDSINLINEASM

以下為此程式程式碼:

#include <stdio.h>

int main(void)

{

int i=5, j=20,sum;

asm (

"mul %[summary], %[intg1], %[intg2]"

:[summary]"=r"(sum) :[intg1] "r" (i), [intg2]"r" (j) );

printf("\ni*j=%d", sum);

return (1) ; }

1. 啟動 AndeSight™。

(11)

2. 成功啟動 AndeSight™後,接下來在 Project Explore 的視窗上點右鍵,點選

《Import…》來匯入一個專案。

3. 在出現的視窗中選擇《Existing Projects into Workspace》,設定完成點選《Next》

進入下一個視窗。

(12)

4. 在此視窗選擇放置專案位置,點選《Finish》完成專案設定。

5. 匯入成功後,即可在 Project Explore 視窗可看到剛匯入的檔案。

(13)

6. 將要傳送的目標平台匯入,點選 Target 選單中的《Input Target》,利用此功能 將剛剛所啟動的 VEP Simulator Engine 匯入。

7. 匯入動作完成後會在 AndeSight™開發環境中的 Target Manager 視窗,看到

"VEP:[電腦名稱] "的圖文會呈現綠點狀態。

8. 接下來即可 Build 所開發的程式,在剛匯入的檔案上按下滑鼠右鍵出現選單,

點選《Build Project》。

(14)

9. 如在 Console 未出現錯誤訊息則表示 Build 成功。

10. 將資料夾中的 inlineasm.vep 檔拉至《VEP Target》。

11. 接下來就可將 Build 好的程式模擬執行過程,在專案資料夾中點選到 Binaries 中的《NDSinlineasm.adx》檔案,在檔案上點選滑鼠右鍵彈出視窗選到《Run As》

中的《Run Andes Cross PlatForm Application》。

(15)

 實驗結果 實驗結果 實驗結果 實驗結果

1. 程式正確執行時在 Target Manager 視窗中的"VEP:[電腦名稱] "的圖中的 綠點會變成紅點狀態。

2. 在 Console 出現下圖表示成功。

 討論 討論 討論 討論

程式經過 AndeSight 的執行,我們可以看出,使用高階程式語言 C,也能執 行低階的組合語言,且執行速度會比 C 語言來得更有效率。

參考文獻

相關文件

• 實驗數據的標準差:單一測量與平均值的 可能偏差程度,重複或增加實驗次數不會 減少其值,其代表單一測量的精密度。.

課堂上操作過的實驗務必要詳知實驗 操作原理及過程,及實驗後的統整與 結論。.

課堂上操作過的實驗務必要詳知實 驗操作原理及過程,到實驗後的統整 與結論。.

平衡機是測量旋轉物體(轉子)不平衡量 大小和位置的機器。任何轉子在圍繞其軸 線旋轉時,由於相對於軸線的質量分佈不 均勻而産生離心力。這種不平衡離心力作

課堂上操作過的實驗務必要詳知實驗 操作原理及過程,到實驗後的統整與結 論。.

[r]

實驗四

[r]