實驗3 :編寫一個以匯編(ASM)語言為基礎的DSP程序
一. 實驗目的
1.學習用匯編語言編制程序;了解匯編語言程序與C語言程序的區(qū)別和在設置上的不同。
2.了解TMS320C28x匯編語言程序結果和一些簡單的匯編語句用法。
3.學習在CCS環(huán)境中調(diào)試匯編代碼。
二. 實驗原理
1. 匯編語言程序
匯編語言程序除了程序中必須使用匯編語句之外,其編譯選項的設置與C語言編制的
程序也稍有不同。其區(qū)別為:
(1)匯編語言程序在執(zhí)行時直接從用戶指定入口開始,常見的入口標號為“start”,而C語言
程序在執(zhí)行時,先要調(diào)用C標準庫中的初始化程序(入口標號為“_c_init00”),完成設置
之后,才轉入用戶的主程序main()運行。
(2)由于CCS的代碼鏈接器默認支持C語言,在編制匯編語言程序時,需要設置鏈接參數(shù),
選擇非自動初始化,注明匯編程序的入口地址。
2.程序設計要求
程序框圖:
三. 實驗設備
PC兼容機一臺,操作系統(tǒng)為Windows2000(或Windows98,WindowsXP,以下默認為
Windows2000),安裝Code Composer Studio 2.2軟件。
四.實驗內(nèi)容與步驟
1.實驗準備
設置軟件仿真模式,參看:第一部分、四、1。
2.建立新的工程文件
(1)雙擊桌面上圖標,
啟動Code Composer Studio 2.21。
(2)進行以下設置:
圖3-2 設置工程文件
4.編輯輸入源程序
(1)匯編語言程序
-
圖3-3 新建源文件
先新建源程序窗口:
-輸入源程序:
.global start
start:
MOV @AR1,#9000 ;給ar1寄存器賦值
LOOP:
ADDB SP,#3 ;此時sp指針為403h地址
MOV *-SP[1],#10 ;把立即數(shù)10 放到402地址上
MOV *-SP[2],#1 ;把立即數(shù)1放到401地址上
MOV AL,*-SP[2] ;把401 地址上數(shù)據(jù)讀出放到AL寄存器中
ADD AL,*-SP[1] ;把401 和402地址中數(shù)據(jù)做加法運算,把結果放到AL寄存
器中
MOV *-SP[3],AL ;把AL中值放到400h地址中
nop ;空指令
nop
SUBB SP,#3 ;設置sp指針為400h地址
BANZ LOOP,AR1-- ;有條件跳轉,只要ar1中的值不為0
.end
-保存源程序為TASM.asm。
(2)連接命令文件
-如同第(1)步操作,建立空的源程序窗口。
-輸入連接命令文件內(nèi)容:
-stack 400h
-heap 100
MEMORY
{
PAGE 0 : PROG(R) : origin = 0x80000, length = 0x10000
PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0
PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2
PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3E
PAGE 1 : M0RAM(RW) : origin = 0x000000, length = 0x400
PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400
PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000
PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000
}
SECTIONS
{
/* 22-bit program sections */
.reset : > RESET, PAGE = 0
vectors : > VECTORS, PAGE = 0
.pinit : > PROG, PAGE = 0
.cinit : > PROG, PAGE = 0
.text : > PROG, PAGE = 0
/* 16-Bit data sections */
.const : > L0L1RAM, PAGE = 1
.bss : > L0L1RAM, PAGE = 1
.stack : > M1RAM, PAGE = 1
.sysmem : > M0RAM, PAGE = 1
/* 32-bit data sections */
.ebss : > H0RAM, PAGE = 1
.econst : > H0RAM, PAGE = 1
.esysmem : > H0RAM, PAGE = 1
}
-將文件存為C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\TASM.cmd
(3)將上述編譯的源程序加入工程TASM.pjt。
5.編譯源文件、下載可執(zhí)行程序
(1)選擇菜單Project->Rebuild All。
(2)執(zhí)行FileàLoad Program,在隨后打開的對話框中選擇剛剛建立的
C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\debug\TASM.out 文件。完成
后,系統(tǒng)自動打開TASM.asm源程序窗口,并在其中指示程序的入口地址為標號“start”
后的語句。
6.打開觀察窗口
(1)選擇菜單View->Disassembly。注意程序運行指針停留的位置。
(2)開啟CPU寄存器觀察窗口:單擊菜單View->Registers-> core。看PC指針取值與當前程
序運行地址對應。此處為0x80000。
(3)單擊菜單View->Registers->Pseudo。看AL寄存器,此時應為0。如果AL寄存器的值不
為0,請點擊Debug->Reset Cpu, 對2812 芯片進行復位。
(4)開啟內(nèi)存觀察窗口:
選擇“View”菜單中“Memory…”項,在“Memroy Window Options”窗口中的“Adress”
項中輸入0x400,單擊“OK”完成設置。
7.觀察程序運行結果
(1)單步運行1次(按F10 快捷鍵即可),在觀察窗中觀察到AR1 寄存器被賦值0x9000。
(2)再單步運行3 次,將看到內(nèi)存窗口中0x402 被賦值0x10,0x401地址被賦值0x1。
(3)再單步運行3 次,可觀察0x400 地址中的值變?yōu)?xb,此數(shù)據(jù)就是把0x402 和0x401 地址
中數(shù)據(jù)相加得到的。
可以修改下面兩句語句的立即數(shù)值,重新編譯,然后單步運行觀察結果。
MOV *-SP[1],#10 ;把立即數(shù)10 放到402 地址上
MOV *-SP[2],#1 ;把立即數(shù)1放到401 地址上
8.對照觀察map文件和cmd文件的內(nèi)容
(1)選擇菜單File->Open…,將找到
C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\Debug目錄,將文件類型改
為“Memory Map Files”,選擇TASM.map文件、打開。
(2)打開TASM.cmd文件。
(3)程序的入口地址:map文件中“ENTRY POINT SYMBOL”中說明了程序入口地址(start)。
(4)內(nèi)存使用情況:
-map文件中“MEMORY CONFIGURATION”標明了程序占用RAM 的使用情況,共占用
fH 個存儲單元。比較一下,這比用C編制的程序占用的要小得多。
-觀察map文件中的“SECTION ALLOCATION MAP”段,可以看出TASM.obj的入口地
址為80000H,這也是程序的入口地址。
9.退出CCS
五.預習要求
1.熟悉匯編語言,了解常用的匯編語言程序設計方法。
2.了解DSP內(nèi)存的分配情況。
六.注意事項
1.在輸入?yún)R編語言源程序時,除了標號以外的程序行必須以一個空格或退格字符開始。
2.由于本實驗的主程序為匯編語言,所以要把它設置為匯編模式才能正常工作。
七.思考題
修改程序完成0f000h+0e000h的計算。
八.實驗報告要求
1.匯編語言程序從指定位置開始運行,但匯編程序需要對運行環(huán)境的初始化工作。
2.實驗中的程序有堆棧操作,所以初始化堆棧指針。
3.編譯后,各寄存器和內(nèi)存窗口的變化
評論
查看更多