SP第4章語言和偽指令_第1頁
SP第4章語言和偽指令_第2頁
SP第4章語言和偽指令_第3頁
SP第4章語言和偽指令_第4頁
SP第4章語言和偽指令_第5頁
已閱讀5頁,還剩27頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章匯編語言和偽指令1采用匯編語言,用戶可以直接操作到處理器內部的工作寄存器和片內RAM單元,能把數據的處理過程表述得非常具體和詳實。匯編語言并不獨立于具體機器,是一種非常通用的低級程序設計語言。4.1匯編語言程序設計24.1.1匯編語言源程序格式典型的匯編語言格式是四段式格式:標號段:操作碼段操作數段;注釋段

LABLE:OPCODEOPRAND;COMMENT其中操作碼段是必選項,任何語句都必須有操作碼段。如果是多個操作數,中間用逗號隔開。P1:ADD#1;ACC加1,結果保存在ACC中BCNDP1,LEQ;如果ACC≤0則轉到P134.1.2常用偽指令介紹[指令語句]

每一條指令語句在源程序匯編時都要產生可供計算機執行的指令代碼(即目標代碼),所以這種語句又叫可執行語句。每一條指令語句表示計算機具有的一個基本能力,如數據傳送,兩數相加或相減,移位等,而這種能力是在目標程序(指令代碼的有序集合)運行時完成的,是依賴于汁算機內的中央處理器(CPU)、存儲器、I/O接口等硬件設備來實現的。

4[偽指令語句]

偽指令語句是用于指示匯編程序如何匯編源程序,所以這種語句又叫命令語句。例如源程序中的偽指令語句告訴匯編程序:該源程序如何分段,有哪些邏輯段在程序段中哪些是當前段,它們分別由哪個段寄存器指向;定義了哪些數據,存儲單元是如何分配的等等。偽指令語句除定義的具體數據要生成目標代碼外,其他均沒有對應的目標代碼。偽指令語句的這些命令功能是由匯編程序在匯編源程序時,通過執行一段程序來完成的,而不是在運行目標程序時實現的。

5

6條件匯編偽指令以下分兩種情況介紹條件匯編偽指令。(1)第一種情況:.ifwell-definedexpression.elseifwell-definedexpression.else.endif(2)第二種情況:.loop [well-definedexpression].break[well-definedexpression].endloop74.2C語言程序設計用匯編語言編寫程序是一件繁雜的事情,開發周期相對較長。因此各個DSP公司都推出了相應的高級語言(如C語言),使得DSP芯片的軟件可以直接使用高級語言寫成。,從而大大提高DSP芯片的開發速度,也使程序的修改和移植變得十分方便。

C語言程序文件的后綴名為.c。在該程序中實現DSP要完成的功能,由開發人員編寫。8C編譯器概述TMS320C2xxC編譯器是一個功能齊全的優化編譯器。它的主要功能是把標準的ANSIC語言程序轉換成TMS320DSP芯片能夠識別執行的匯編語言代碼。94.3調試時需要的五種文件調試時需要以下五種文件:(1)C語言程序(.c)或者匯編語言文件(.asm)(2)頭文件(.h)(3)庫文件(rts2xx.lib)(4)命令文件(.cmd)(5)復位和中斷向量文件vectors.asm104.3.1C語言文件文件或匯編語言文件該文件的擴展名為:*.c或*.asm;該文件內容為DSP所要完成功能的源程序代碼。114.3.2頭文件頭文件的擴展名為:*.h;匯編語言頭文件:包含了各種寄存器的名稱和地址,此外,用戶還可以定義各種常量和宏;C語言頭文件:包含了C語言定義下的各種語言定義下的各種寄存器和地址,還包含支持C語言的的各種庫函數;頭文件必須放在C源程序的開始,并使用“#include”語句聲明和添加。或者在匯編主程序的開始使用匯編偽指令.include、.copy對頭文件進行調用。12頭文件部分寄存器和宏定義舉例:;IMR.set0004h;中斷屏蔽寄存器IFR.set0006h;中斷標志寄存器;DELAY_S.macrodelay_value;延時=0.05μs×延時計數RPT#delay_valueNOP.endm調用宏:DELAY_S0AC5H13頭文件F2407.h,在該文件中寄存器都以指針方式進行尋址。頭文件為DSP的寄存器和位測試指令的位碼定義助記符144.3.3命令文件擴展名為*.cmd,實現對程序存儲空間和數據存儲器空間的分配;它由三部分組成:一是輸入輸出文件和選項等(該部分可以省略),二是目標存儲器定義,使用偽指令MEMORY定義,三是各段的定位,由SECTIONS命令定義。

MEMORY偽指令用來標示實際存在目標系統中并且可被使用的存儲器范圍。每個存儲器范圍有名字、起始地址和長度。

SECTIONS偽指令的作用是:描述輸入段怎樣被組合到輸出段;在可執行程序內定義輸出段;規定在存儲器內何處放置輸出段;允許重命名輸出段。15MEMORY{PAGE0:/*程序存儲器*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;PAGE1:/*數據存儲器*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;PAGE2:/*I/O空間*/name1[(attr)]:origin=constant,length=constant;……namen[(attr)]:origin=constant,length=constant;}16

SECTIONS{name:[property,property,property,…]name:[property,property,property,…]name:[property,property,property,…]}17

每一個以name開始的段的規格說明定義了一個輸出段。在段名之后是特性列表,定義段的內容以及它們是怎樣被分配的。(1)裝載位置,規定段將被裝載在存儲器內何處。(2)運行位置,定義段將在存儲器內何處運行。(3)輸入段,定義組成輸出段的輸入段。(4)段類型,定義特定段類型的標志。(5)填充值,定義用于填充未初始化空位的數值。18命令文件舉例-MEMORY偽指令和SECTION偽指令:MEMORY{PAGE0:VECS:origin=0000h,length=0040h/*程序復位*/PVECS:origin=0040h,length=0F00h/*外設中斷向量*/PM:origin=1000h,length=6000hPM1:origin=7000h,length=1000hPM2:origin=8000h,length=800h/*如果PON=1,則為SARAM*/B0_PM:origin=0FF00h,length=100h/*如果CNF=1,則為DARAMB0塊*/PAGE1:MMRS:origin=0000h,length=0060hB2:origin=0060h,length=0020h/*DARAMB2塊*/

B0:origin=0200h,length=0100h/*如果CNF=0則為DARAMB0塊*/B1:origin=0300h,length=0100h/*DARAMB1塊*/SARAM:origin=0800h,length=0800h/*如果DON=1則為SARAM*/

PERIPH:origin=7000h,length=1000h/*外設幀*/EXTRAM:origin=8000h,length=8000h/*外部擴展RAM*/PAGE2:

IO_EX:origin=0000h,length=0FFF0hIO_IN:origin=0FFF0h,length=0Fh}19SECTIONS{

.reset:{}>VECSPAGE0

/*復位中斷向量*/

.vectors:{}>

VECSPAGE0/*中斷向量表*/

.pvecs:{}>

PVECSPAGE0

/*外設中斷向量表*/

.text:{}>

PMPAGE0

/*代碼*/

.table:{}>

PMPAGE0

.bss:{}>

B1PAGE1

.data0:{}>

B0PAGE1

.data2:{}>

B2PAGE1.stack:{}>

SARAMPAGE1

}204.3.4中斷向量文件中斷向量文件vectors.asm定義了系統中各種中斷服務程序的入口地址。214.3.5庫文件rts2xx.librts2xx.lib庫文件可在C:\CCStudio_v3.1\C2400\cgtools\lib下找到,不得修改,完全復制到需要的地方。rts2xx.lib包含以下內容:ANSIC標準庫;系統啟動程序_c_int0;允許C訪問特殊指令的函數和宏。224.4C語言和匯編語言混合編程方法4.4.1在C語言中嵌入匯編語言程序1.在C語言中嵌入單條匯編語句//系統初始化程序voidinital(){asm("setcSXM");//SXM位置1,抑制符號擴展位asm("clrcOVM");//OVM位清0,累加器中結果正常溢出asm("clrcCNF");//CNF位清0,B0被映射到數據存儲器空間}232.在C語言中嵌入實現某一完整功能的多條匯編語句

在C語言中調用匯編語言編寫的子程序,用戶必須遵循相關規則自行維護模塊的入口和出口代碼,主要應弄清楚堆棧的使用情況。244.5分開編寫C語言和匯編語言程序1.分離的C語言程序和匯編語言程序接口

須注意:在編寫匯編語言程序時,必須遵守有關調用規則和寄存器規則,這樣不會影響C語言程序的運行環境。252.在C語言程序中訪問匯編語言程序的變量

2種操作方法:(1)匯編變量在.bss段中定義采用.bss命令定義變量采用.global命令定義變量在變量名前加一下劃線“_”在C語言程序中將變量說明為外部變量26(2)用.set和.global命令定義的常數。在匯編語言中將常數符號定義成全局常數;在C語言程序中訪問匯編語言程序中的常數時,應在常數前加一個地址符號“&”273.在匯編語言程序中訪問C語言程序變量在C語言程序中定義變量(如x);在匯編語言程序中使用前面加下劃線“_”(如_x)。284.6用C語言處理DSP中斷1.通過軟件識別中斷標志的方法實現可屏蔽的中斷

例如,要實現捕捉單元4的中斷(CAP4INT),則先建立一個復位和中斷向量文件vectors.asm.title"vectors.asm".ref_c_int0,_nothing,_capint;定義每個需要用到的符號.sect".vectors"reset:b_c_int0;復位向量INT1:b_nothingINT2:b_nothingINT3:b_nothingINT4:b_capint;當發生INT4中斷時,程序跳轉至capint所標志;的終端服務程序INT5:b_nothingINT6:b_nothing;當發生其他級別中斷時,直接跳轉至nothing

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論