freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第7章匯編語言程序設(shè)計(jì)(已修改)

2025-08-01 12:28 本頁面
 

【正文】 第 7章 匯編語言程序設(shè)計(jì) ? 程序流程控制 ? 數(shù)據(jù)塊傳送 ? 定點(diǎn)數(shù)的基本算術(shù)運(yùn)算 ? 長字運(yùn)算和并行運(yùn)算 ? FIR濾波器的 DSP實(shí)現(xiàn) ? IIR數(shù)字濾波器的 DSP實(shí)現(xiàn) ? FFT運(yùn)算的 DSP實(shí)現(xiàn) 程序流程控制 ? 程序存儲(chǔ)器地址生成 ? 條件操作 ? 分支轉(zhuǎn)移 ? 調(diào)用與返回 ? 重復(fù)操作 ? TMS320C54x中斷系統(tǒng) ? 堆棧的使用 返回首頁 程序存儲(chǔ)器地址生成 程序存儲(chǔ)器中存放指令代碼、參數(shù)表和立即數(shù)。程序地址產(chǎn)生邏輯( PAGEN), 包括以下 5個(gè)寄存器(如圖71所示): 程序計(jì)數(shù)器( PC); 重復(fù)計(jì)數(shù)器( RC); 塊重復(fù)計(jì)數(shù)器( BRC); 塊重復(fù)起始地址寄存器( RSA); 塊重復(fù)結(jié)束地址寄存器( REA)。 圖 71 程序地址產(chǎn)生邏輯( PAGEN) 寄存器 返回本節(jié) 條件操作 表 71 條件指令中的各種條件 操作符號 條 件 說 明 操作符號 條 件 說 明 AEQ A=0 累加器 A等于 0 AOV AOV=1 累加器 A溢出 BEQ B=0 累加器 B等于 0 BOV BOV=1 累加器 B溢出 ANEQ A?0 累加器 A不等于 0 ANOV AOV=0 累加器 A不溢出 BNEQ B?0 累加器 B不等于 0 BNOV BOV=0 累加器 B不溢出 ALT A0 累加器 A小于 0 C C=1 ALU進(jìn)位位置 1 BLT B0 累加器 B小于 0 NC C=0 ALU進(jìn)位位置 0 ALEQ A?0 累加器 A小于等于 0 TC TC=1 測試 /控制標(biāo)志位置 1 BLEQ B?0 累加器 B小于等于 0 NTC TC=0 測試 /控制標(biāo)志位置 0 AGT A0 累加器 A大于 0 BIO BIO低 BIO信號電平為低 BGT B0 累加器 B大于 0 NBIO BIO高 BIO信號電平為高 AGEQ A?0 累加器 A大于等于 0 UNC 無 無條件操作 BGEQ B?0 累加器 B大于等于 0 表 72 多條件指令中的條件組合 返回本節(jié) 可以使用多個(gè)條件作為條件指令的操作數(shù) ,只有所有條件滿足時(shí)才被認(rèn)為是滿足條件。 這種多個(gè)條件的組合就構(gòu)成了指令的多重條件,但必須是特定的條件組合。 第 1組 第 2組 A類 B類 A類 B類 C類 EQ NEQ LEQ GEQ LT GT OV NOV TC NTC C NC BIO NBIO 選用 多重 條件時(shí)應(yīng)當(dāng)注意以下幾點(diǎn): ① 第 1組:分為兩類,最多可選擇兩個(gè)條件, 組內(nèi)兩類條件可以與 /或構(gòu)成多重條件,但不能用組內(nèi)同類條件構(gòu)成 與 /或 多重條件。 當(dāng)選擇兩個(gè)條件時(shí),累加器必須是同一個(gè)。 例如,可以同時(shí)選擇 AGT和 AOV, 但不能同時(shí)選擇 AGT和 BOV。 ② 第 2組:分為三類, 最多可選三個(gè)條件, 可以在每類中各選一個(gè)條件進(jìn)行與 /或構(gòu)成多重條件,但不能在同類選兩個(gè)條件。 例如,可以同時(shí)測試 TC、 C和 BIO, 但不能同時(shí)測試 NTC、 C和 NC。 【 例 71】 條件 操作程序 。 BC sub, BLEQ 。 條件分支轉(zhuǎn)移 若累加器 B≤0, 則轉(zhuǎn)至 sub, 否則,往下執(zhí)行 CC start, AGEQ, AOV 。 條件調(diào)用 若累加器 A≥0且溢出 , 則調(diào)用 start, 否則往下執(zhí)行 RC NTC 。 條件返回 若 TC = 0, 則返回,否則往下執(zhí)行 注意: ? 若需要多個(gè)條件相與時(shí),用單條指令表示。 如: BC new, AGT, AOV 轉(zhuǎn)移條件: AGT和 AOV的與邏輯 ? 若需要兩個(gè)條件相或時(shí),需用兩條指令分別表示。 如: 若累加器 A大于 0或溢出 ,則轉(zhuǎn)移至 sub 轉(zhuǎn)移條件: AGT和 AOV的或邏輯 BC sub, AGT BC sub, AOV 分支轉(zhuǎn)移 通過傳送控制到程序存儲(chǔ)器的其他位置,分支轉(zhuǎn)移會(huì)中斷連續(xù)的指令流。 分支轉(zhuǎn)移指令通過改寫 PC值,使程序改變流向。其指令分為無條件分支轉(zhuǎn)移、條件分支轉(zhuǎn)移和遠(yuǎn)分支轉(zhuǎn)移三類。 三者都可以帶延時(shí)操作和不帶延時(shí)操作。 分支轉(zhuǎn)移指令 分 類 指 令 說 明 無條件 分支轉(zhuǎn)移 B[D] 用該指令指定的地址加載 PC BACC[D] 用累加器的低 16位指定的地址加載 PC 條 件 分支轉(zhuǎn)移 BC[D] 若滿足指令給定條件,用該指令指定的地址加載 PC BANG[D] 若當(dāng)前選擇輔助寄存器不等于 0,用該指令指定的地址加載 PC 遠(yuǎn) 程 分支轉(zhuǎn)移 FB[D] 用該指令指定的地址加載 PC和 XPC FBACC[D] 用累加器的低 23位指定的地址加載 PC和 XPC 無條件分支轉(zhuǎn)移:無條件執(zhí)行分支轉(zhuǎn)移; 條件分支轉(zhuǎn)移:要在滿足用戶一個(gè)或多個(gè)條件時(shí)才執(zhí)行分支轉(zhuǎn)移; 遠(yuǎn)程分支轉(zhuǎn)移:允許分支轉(zhuǎn)移到擴(kuò)展存儲(chǔ)器。 【例 72】 分支轉(zhuǎn)移舉例。 STM 88H, AR0 LD 1000H, A zhong: SUB AR0, A BC zhong, AGT, AOV ; 將操作數(shù) 88H裝入 AR0 ; 將操作數(shù) 1000H裝入 ACC ; 將 A中的內(nèi)容減去 AR0中 的 ;內(nèi)容結(jié)果裝入 A ; 若累加器 A0且溢出, ; 則轉(zhuǎn)至 zhong,否則往下執(zhí)行 【例 73】 比較操作后條件分支轉(zhuǎn)移 STM 5,AR1 。 AR1=5 STM 10,AR0 。 AR0=10 loop: … … *AR1+ 。 AR1=AR1+1 … … CMPR LT,AR1 。若 AR1AR00, 則 TC=1, 否則為 0 BC loop, TC 。若 AR1AR00, 則循環(huán) 若 AR1=AR0, 則順序執(zhí)行 調(diào)用與返回 與分支轉(zhuǎn)移一樣,中斷當(dāng)前程的執(zhí)行,轉(zhuǎn)移到其他位置去執(zhí)行,子程序調(diào)用會(huì)中斷連續(xù)的指令流。但是與分支轉(zhuǎn)移不同的是,這種轉(zhuǎn)移是臨時(shí)的,執(zhí)行完調(diào)用程序還要返回到被中斷的地方繼續(xù)執(zhí)行。 當(dāng)函數(shù)的子程序被調(diào)用時(shí),緊跟在調(diào)用后的下一條指令的地址保存在堆棧中。這個(gè)地址用于返回到調(diào)用前的程序并繼續(xù)執(zhí)行調(diào)用前的程序。 子程序調(diào)用操作分成三種形式:無條件調(diào)用和返回、有條件調(diào)用和返回、遠(yuǎn)調(diào)用和遠(yuǎn)返回,三者都可以帶延時(shí)操作和不帶延時(shí)操作。 無條件調(diào)用是指無條件執(zhí)行 調(diào)用。 條件調(diào)用和無條件調(diào)用操作相同,但是條件調(diào)用要在滿足一個(gè)或多個(gè)條件時(shí)才執(zhí)行 調(diào)用 。 遠(yuǎn) 程 調(diào)用允許對擴(kuò)展存儲(chǔ)器的子程序或函數(shù)進(jìn)行調(diào)用。 子程序調(diào)用指令 分 類 指 令 說 明 無條件 調(diào)用 CALL[D] 將返回的地址壓入堆棧,并用該指令指定的地址加載 PC CALA[D] 將返回的地址壓入堆棧,用累加器 A或 B指定的地址加載 PC 條件 調(diào)用 CC[D] 如果滿足指令給定條件,將返回的地址壓入堆棧,并用該 指令指定的地址加載 PC 遠(yuǎn)程 調(diào)用 FCALL [D] 將 XPC和 PC壓入堆棧,并用該指令指定的地址加載 PC和 XPC FCALA [D] 將 XPC和 PC壓入堆棧,用累加器的低 23位指定的地址加載 PC和 XPC 子程序返回指令可以使程序重新在被中斷的連續(xù)指令處繼續(xù)執(zhí)行。 返回指令通過 將 彈出堆棧的值(包含將要執(zhí)行的下一條指令的地址) ,送 到程序計(jì)數(shù)器 PC來實(shí)現(xiàn)返回功能。 C54x可以執(zhí)行無條件返回和條件返回,并且它們都可以帶延時(shí)或不帶延時(shí) 操作 。 子程序返回指令 分 類 指 令 說 明 無條件 返回 RET[D] 將堆棧頂部的返回地址加載到 PC。 RETE[D] 將堆棧頂部的返回地址加載到 PC, 并使能可屏蔽中斷。 RETF[D] 將 RTN寄存器中的返回地址加載到 PC, 并使能可屏蔽中斷。 條件 返回 RC[D] 如果滿足指令給定條件,將堆棧頂部的返回地址加載到 PC。 遠(yuǎn)程 返回 FCALL [D] 將堆棧頂部的值彈出加載到 XPC, 將堆棧中下一個(gè)值彈出加載到 PC。 FCALA [D] 將堆棧頂部的值彈出加載到 XPC, 將堆棧中下一個(gè)值彈出加載到 PC, 并使能可屏蔽中斷。 無條件返回是無條件執(zhí)行 返回操作 。 條件返回 可以給予被調(diào)用函數(shù)或中斷服務(wù)程序( ISR) 更多的返回 方式 ,以便根據(jù)被處理的數(shù)據(jù)選擇返回路徑 , 通過使用條件返回指令 來實(shí)現(xiàn)返回 。 遠(yuǎn) 程 返回允許從擴(kuò)展存儲(chǔ)器的子程序或函數(shù)返回。 【例 74】 子程序調(diào)用舉例。 STM 123H, AR0 LD 456H, AR1 CALL new LD AR1, 16, A new: MPY AR0, AR1, A RET ; 將操作數(shù) 123H裝入 AR0 ; 將操作數(shù) 456H裝入 AR1 ; 調(diào)子程序 new ; 將 AR1的內(nèi)容左移 16位后裝入 A ; AR0與 AR1的內(nèi)容相乘 ,結(jié)果放入 A中 ; 子程序返回 C54x的重復(fù)操作是使 CPU重復(fù)執(zhí)行一條指令或一段指令。可以分為單指令重復(fù)和塊程序重復(fù)。 實(shí)現(xiàn)重復(fù)操作的指令: RPT —— 重復(fù)執(zhí)行下條指令; RPTZ—— 累加器清 0,并重復(fù)執(zhí)行下條指令; RPTB—— 使下一塊指令重復(fù)執(zhí)行。 使用 RPT、 RPTZ能重復(fù)下一條指令;而 RPTB用于重復(fù)代碼塊若干次。 利用重復(fù)指令可實(shí)現(xiàn)比 BANZ指令更快的循環(huán)程序。 重復(fù)操作 利用 RPT和 RPTZ可重復(fù)執(zhí)行緊隨其后的一條指令。重復(fù)次數(shù)由該指令的操作數(shù)決定,并且等于操作數(shù)加 1。 若要重復(fù)執(zhí)行 N+1次,則重復(fù)指令中應(yīng)規(guī)定重復(fù)次數(shù)為 N。 該數(shù)值保存在 16位重復(fù)計(jì)數(shù)器 RC中,這個(gè)值只能由重復(fù)指令( RPT或 RPTZ) 加載,而不能編程設(shè)置 RC寄存器中的值。一條指令的最大重復(fù)次數(shù)為 65536。 由于要重復(fù)的指令只需要取指一次, 對于多周期指令,采用重復(fù)操作后,可使多周期指令變成單周期指令,提高運(yùn)行速度。 1 、 單指令重復(fù)操作 【 例 75】 對數(shù)組進(jìn)行初始化,使 x[8]={0,0,0,0,0,0,0,0}。 .bss x, 8 STM x, AR1 LD 0, A RPT 7 STL A,*AR1+ .bss x, 8 STM x, AR1 RPTZ A, 7 STL A, *AR1+ 注意: ① 對 x[8]中的 8個(gè)元
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1