《组合语言撰写组合语言撰写》由会员分享,可在线阅读,更多相关《组合语言撰写组合语言撰写(20页珍藏版)》请在金锄头文库上搜索。
1、DSP54.3DSP54.3 - - 1 1Ch.3 Ch.3 組合語言撰寫組合語言撰寫組合語言撰寫組合語言撰寫?認識認識認識認識 5 5 種基本的定址模式和使用理由種基本的定址模式和使用理由種基本的定址模式和使用理由種基本的定址模式和使用理由?使用這些定址模式執行一個範例使用這些定址模式執行一個範例使用這些定址模式執行一個範例使用這些定址模式執行一個範例- - 1 1DSP54.3DSP54.3 - - 2 2三個數相加三個數相加三個數相加三個數相加如何完成如何完成如何完成如何完成? ?如何配置適當區段如何配置適當區段如何配置適當區段如何配置適當區段? ?RAMRAMx3x3RAMRAMy
2、y5454x x CPUCPU系系系系 統統統統 設設設設 計計計計 圖圖圖圖DROMDROMinit3init3ROMROM(code)(code)- - 2 2y = x1 + x0 + x2y = x1 + x0 + x2數學式數學式數學式數學式?區段配置區段配置區段配置區段配置 ( (code, constants, code, constants, varsvars) )?選定定址模式選定定址模式選定定址模式選定定址模式?進行加法運算進行加法運算進行加法運算進行加法運算 ( (x1 + x0 + x2)x1 + x0 + x2)?儲存結果儲存結果儲存結果儲存結果 ( (y)y)步步步
3、步驟驟驟驟DSP54.3DSP54.3 - - 3 3區段區段區段區段 配置配置配置配置( (複習複習複習複習?)?)未初始化區段有未初始化區段有未初始化區段有未初始化區段有: :初始化區段有初始化區段有初始化區段有初始化區段有: :?x3x3?y1y1?tbltbl 1,2,31,2,3?codecode連結命令檔如何撰寫連結命令檔如何撰寫連結命令檔如何撰寫連結命令檔如何撰寫? ?RAMRAMx3x3RAMRAMy y5454x x CPUCPU系統設計圖系統設計圖系統設計圖系統設計圖DROMDROMtbl3tbl3ROMROMcodecodex.usect “vars“,3 y.usect
4、 “result“,1.sect ”init“ tbl.int 1,2,3.sect “code”;main.asm- - 3 3DSP54.3DSP54.3 - - 4 4連結命令檔連結命令檔連結命令檔連結命令檔 複習複習複習複習?典型的連結命令檔含有典型的連結命令檔含有典型的連結命令檔含有典型的連結命令檔含有 那那那那 3 3個主要的部份個主要的部份個主要的部份個主要的部份? ?如何產生資料如何產生資料如何產生資料如何產生資料 位置提供位置提供位置提供位置提供 tbltbl, x , x 和和和和 y y存取存取存取存取? ?/* file i/o */MEMORY PAGE 0: ROM
5、: org=0F000h len=0F80h VECS: org=0FF80h len=0080h PAGE 1: RAM: org=00085h len=0020h DROM: org=08000h len=0100h SECTIONS code : ROM PAGE 0 vectors : VECS PAGE 0 init : DROM PAGE 1 vars: RAM PAGE 1 result : RAM PAGE 1 ?這些區段將會配置去哪裏呢這些區段將會配置去哪裏呢這些區段將會配置去哪裏呢這些區段將會配置去哪裏呢? ? - - 程式碼程式碼程式碼程式碼( (code),code),
6、重置向量重置向量重置向量重置向量( ( vectors)?vectors)? - - 常數常數常數常數( (init),init),變數變數變數變數( (varsvars), ),運算運算運算運算結果結果結果結果( (result)?result)?;main.asmx.usect “vars“,3 y.usect “result“,1.sect ”init“ tbl.int 1,2,3.sect “code”RAMRAMx3x3RAMRAMy y5454x x CPUCPU系統設計圖系統設計圖系統設計圖系統設計圖DROMDROMtbl3tbl3ROMROMcodecode- - 4 4DSP
7、54.3DSP54.3 - - 5 5資料資料資料資料 位址產生位址產生位址產生位址產生間接間接間接間接Indirect Indirect 使用使用使用使用1616- -位元暫存器當成指標器位元暫存器當成指標器位元暫存器當成指標器位元暫存器當成指標器( (pointers)pointers)存取資料存取資料存取資料存取資料直接直接直接直接Direct Direct 可不依順序存取一個明確指定的位址資料可不依順序存取一個明確指定的位址資料可不依順序存取一個明確指定的位址資料可不依順序存取一個明確指定的位址資料絕對絕對絕對絕對AsoluteAsolute指定指定指定指定 1616- -位元位址存取
8、資料位元位址存取資料位元位址存取資料位元位址存取資料立即立即立即立即Immediate Immediate 指令本身包含著資料的運算元指令本身包含著資料的運算元指令本身包含著資料的運算元指令本身包含著資料的運算元MMRMMR存取記憶體映射暫存器內容值存取記憶體映射暫存器內容值存取記憶體映射暫存器內容值存取記憶體映射暫存器內容值 C54xC54x提供以下提供以下提供以下提供以下 5 5 種基本資料位置定址模式種基本資料位置定址模式種基本資料位置定址模式種基本資料位置定址模式: :- - 5 5DSP54.3DSP54.3 - - 6 6?間接定址法允許陣列的間接定址法允許陣列的間接定址法允許陣列
9、的間接定址法允許陣列的連續連續連續連續存取存取存取存取?8 8 個位址暫存器個位址暫存器個位址暫存器個位址暫存器 ( (AR0AR0- -7) 7) 使用使用使用使用 像像像像 1616- -位元指標指向資料一樣位元指標指向資料一樣位元指標指向資料一樣位元指標指向資料一樣?ARsARs 能夠容易的修正能夠容易的修正能夠容易的修正能夠容易的修正start: ;main.asmx.usect “vars“,3 y.usect “result“,1.sect ”init“ tbl.int 1,2,3LD*AR1+,A STLA,*AR2+ ;.sect “code”RAMRAMx3x3RAMRAMy
10、 y5454x x CPUCPU系統設計圖系統設計圖系統設計圖系統設計圖DROMDROMtbl3tbl3ROMROMcodecode首先首先首先首先, , 讓我們拷貝讓我們拷貝讓我們拷貝讓我們拷貝 DROM DROM 的值的值的值的值 到到到到 RAM (RAM (經由經由經由經由A A累積器累積器累積器累積器): ):如何初始化如何初始化如何初始化如何初始化 ARsARs 的值的值的值的值? ?間間間間 接接接接 定定定定 址址址址 法法法法 - - - 6 6* *DSP54.3DSP54.3 - - 7 7start: MMR MMR 和和和和 立即定址法立即定址法立即定址法立即定址法s
11、tart: ;main.asmx.usect “vars“,3 y.usect “result“,1.sect ”init“ tbl.int 1,2,3LD*AR1+,A STLA,*AR2+ ;.sect “code”start: STM#tbl,AR1 STM#x,AR2?STM (STM (SToreSTore to Memoryto Memory- -mappedmapped register) register) 儲存一個立即值到指定儲存一個立即值到指定儲存一個立即值到指定儲存一個立即值到指定 的的的的 MMR MMR 或或或或 SPRAM SPRAM 的位址上的位址上的位址上的位址
12、上. . ?立即運算元立即運算元立即運算元立即運算元 , , 像像像像 # #tbltbl, ,位在程位在程位在程位在程 式記憶體式記憶體式記憶體式記憶體 , , 是運算元是運算元是運算元是運算元( (opcodeopcode) ) 的一部份的一部份的一部份的一部份. .00000000h h00600060h h007007FhFhMMRsMMRsSPRAMSPRAMSTM to AR1STM to AR1 # # tbltbl 16 16 位元位元位元位元2 2 words, 2 cycleswords, 2 cycles現在現在現在現在, , 進行加法運算進行加法運算進行加法運算進行加法
13、運算. .?# #tbltbl表示陣列表示陣列表示陣列表示陣列 tbltbl 第一個數值的第一個數值的第一個數值的第一個數值的 1 16 6位元位址位元位址位元位址位元位址. .- - 7 7DSP54.3DSP54.3 - - 8 8直接定址法直接定址法直接定址法直接定址法 - - start: ;main.asmx.usect “vars“,3 y.usect “result“,1.sect ”init“ tbl.int 1,2,3LD*AR1+,A STLA,*AR2+ ;.sect “code”start: STM#tbl,AR1 STM#x,AR2?直接定址法允許不照順序的直接定址法
14、允許不照順序的直接定址法允許不照順序的直接定址法允許不照順序的 , , 單一週期單一週期單一週期單一週期 內存取內存取內存取內存取 128 128 個位置個位置個位置個位置 , , 依照基底位址的偏依照基底位址的偏依照基底位址的偏依照基底位址的偏 移量移量移量移量( 7( 7- -bit offset ).bit offset ).y = x1 + x0 + x2y = x1 + x0 + x2LDx+1,A ADDx,A ADDx+2,A?這直接定址法這直接定址法這直接定址法這直接定址法1616位元是來自於連續的位元是來自於連續的位元是來自於連續的位元是來自於連續的 基底位址基底位址基底位址
15、基底位址 (DP) (DP) 和包含在指令中和包含在指令中和包含在指令中和包含在指令中7 7位元位元位元位元 的偏移量的偏移量的偏移量的偏移量 : :opcodeopcode7 7- -bit offsetbit offset9 9- -bit DPbit DP7 7- -bit offsetbit offset指指指指令令令令位位位位 址址址址16 16 位元位元位元位元DP (data page, DP (data page, 資料頁資料頁資料頁資料頁) ) 如何被初始化如何被初始化如何被初始化如何被初始化? ?- - 8 8DSP54.3DSP54.3 - - 9 9立即定址法立即定址法
16、立即定址法立即定址法 - - # #start: ;main.asmx.usect “vars“,3 y.usect “result“,1.sect ”init“ tbl.int 1,2,3LD*AR1+,A STLA,*AR2+ ;.sect “code”start: STM#tbl,AR1 STM#x,AR2LDx+1,A ADDx,A ADDx+2,A現在現在現在現在, , 讓我們看看讓我們看看讓我們看看讓我們看看 C54x C54x 是如何計算直接定址值是如何計算直接定址值是如何計算直接定址值是如何計算直接定址值. .LD #x,DPLD #x,DPLD#x,DP?在一個單一週期內在一個單一週期內在一個單一週期內在一個