單元 匯編語言程序設(shè)計_第1頁
單元 匯編語言程序設(shè)計_第2頁
單元 匯編語言程序設(shè)計_第3頁
單元 匯編語言程序設(shè)計_第4頁
單元 匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、單元 匯編語言程序設(shè)計第1頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識子程序的概念 通常把這些基本操作功能編制為程序段作為獨立的子程序, 以供不同程序或同一程序反復調(diào)用。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令, 當程序執(zhí)行到調(diào)用指令, 就轉(zhuǎn)到子程序中完成規(guī)定的操作, 并返回到原來的程序繼 續(xù)執(zhí)行下去。子程序結(jié)構(gòu)能供調(diào)用的子程序,其結(jié)構(gòu)應(yīng)具備:必須標明子程序的入口地址,又稱首地址,以便程序調(diào)用必須以返回指令RET結(jié)束子程序。 第2頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識參數(shù)傳遞在使用調(diào)

2、用指令不附帶任何參數(shù)時,參數(shù)的互相傳遞要由設(shè)計者通過程序安排。一般可采用以下方法:傳遞數(shù)據(jù)。將需傳遞的參數(shù)通過工作寄存器Rn或累加器A傳遞給子程序。即在主程序調(diào)用子程序前將參數(shù)差額主選定的工作寄存器組R0R7、累加器A中,供子程序讀取或者將參數(shù)在調(diào)用前先壓入堆棧,進入子程序后再從堆棧中讀出。傳遞地址。將要傳遞的參數(shù)存放在數(shù)據(jù)存儲器中,將其地址通過工作寄存器R0、R1或數(shù)據(jù)指針DPTR傳遞,供子程序讀取參數(shù)。 第3頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識現(xiàn)場保護主程序的現(xiàn)場保護和恢復。子程序(包括中斷服務(wù)程序)是個獨立的程序段,在子程序執(zhí)行過

3、程中常需用到通用單元,例如:工作寄存器R0R7、累加器A、數(shù)據(jù)指針DPTR,以及有關(guān)標志、狀態(tài)位等。而這個單元中的原內(nèi)容在調(diào)用子程序結(jié)束之后 的主程序中仍有用,需進行保護,稱現(xiàn)場保護。在執(zhí)行完子程序并返回繼續(xù)執(zhí)行主程序前應(yīng)恢復其原內(nèi)容,稱現(xiàn)場恢復。一般有兩種現(xiàn)場保護/恢復方式:第4頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識調(diào)用前保護、返回后恢復。這種方式是在主程序邏輯的調(diào)節(jié)器用指令前進行現(xiàn)場保護,在調(diào)用指令之后,即返回原斷點處進行恢復現(xiàn)場。其程序結(jié)構(gòu)如下所示: 主程序PUSH PSW ;將PSW、A、DPTR等入棧保護PUSH APUSH B

4、PUSH DPL PUSH DPH PUSH PSW,#10H ;選用工作寄存器組2,將0組保護第5頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識LCALL addr16 ;調(diào)用子程序addr16POP DPH ;出棧POP DPLPOP BPOP APOP PSW這種結(jié)構(gòu)靈活,可根據(jù)實際需要實現(xiàn)現(xiàn)場保護/恢復。調(diào)用后保護、返回前恢復。這種結(jié)構(gòu)是在子程序的開始部分進行現(xiàn)場保護,而在子程序的結(jié)束部分、返回指令前恢復。其程序結(jié)構(gòu)如下所示: 第6頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識 ;子程序AD

5、DR:PUSH PSW 現(xiàn)場保護 PUSH A PUSH B PUSH DPL PUSH DPH MOV PSW,#08H ;選用工作寄存器組1,0組保護 ;子程序主體 POP DPH 現(xiàn)場恢復POP DPL POP B第7頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八LED顯示電路 相關(guān)知識POP APOP PSWRET ;返回這是子程序標準格式,現(xiàn)場保護/恢復內(nèi)容固定,但程序規(guī)范、清晰。上述兩種方式可由設(shè)計者任選。 第8頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識子程序特性隨著匯編語言程序設(shè)計技術(shù)的發(fā)展,子程序的應(yīng)用越

6、顯重要。因此,對子程序的設(shè)計具有較高要求,除通常在程序設(shè)計中應(yīng)遵循的原則外,還應(yīng)具備以下特性:通用性嚴格講,子程序有通用和專用兩種。前者如數(shù)制轉(zhuǎn)換、浮點運算等子程序可廣泛應(yīng)用于同系列單片機的任何應(yīng)用系統(tǒng),后者僅限用于同一個應(yīng)用系統(tǒng)中。特別是前者,都應(yīng)注意子程序的通用性。為了使子程序具有通用性,在設(shè)計中要解決的一個重要問題,就是確定哪些變量作為參量以及何傳遞參量。 第9頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識可浮動性可浮動性是指子程序段可安置在程序存儲器的任何區(qū)域。為此,在子程序中應(yīng)避免選用絕對轉(zhuǎn)移地址??蛇f歸和可重入性子程序能自己調(diào)用自己和

7、同時能被多個任務(wù)(或多個用戶程序)調(diào)用的特性,分別稱之為子程序的可遞歸性和可重入性。這類子程序常在龐大而復雜的程序中應(yīng)用,在單片機應(yīng)用程序設(shè)計中較少用到。 第10頁,共19頁,2022年,5月20日,2點8分,星期二4.2 任務(wù)八 LED顯示電路 相關(guān)知識子程序說明文件對于通用子程序,為便于各種應(yīng)用程序的選用,要求在子程序編制、調(diào)試完成后應(yīng)提供一個說明文件。其內(nèi)容應(yīng)包含以下內(nèi)容。子程序名。標明子程序功能的名稱。子程序功能。簡要說明子程序能完成的主要功能,包括重要算法、參量要求及有關(guān)存儲單元配置等。子程序調(diào)用。指明本子程序還需調(diào)用哪些子程序。附子程序流程圖及程序清單。由于子程序結(jié)構(gòu)在程序設(shè)計中應(yīng)

8、用極為普遍,因此,一般在指令集中均設(shè)有子程序調(diào)用指令。AT89S系列的指令集中,考慮到程序存儲器空間的限制和節(jié)省,特設(shè)置了絕對調(diào)用和長調(diào)兩條指令,供實際應(yīng)用時選擇。 第11頁,共19頁,2022年,5月20日,2點8分,星期二4.4 任務(wù)八 LED顯示電路 相關(guān)知識 查表程序結(jié)構(gòu) 查表程序是一種常用程序, 它廣泛使用于 LED顯示控制、 打印機打印控制、數(shù)據(jù)補償、數(shù)值計算、轉(zhuǎn)換等功能程序中, 這類程序具有簡單、執(zhí)行速度快等特點。 所謂查表法, 就是預(yù)先將滿足一定精度要求的表示變量與函數(shù)值之間關(guān)系的一張表求出, 然后把這張表存于單片機的程序存儲器中, 這時自變量值為單元地址, 相應(yīng)的函數(shù)值為該地

9、址單元中的內(nèi)容。查表, 就是根據(jù)變量 X在表格中查找對應(yīng)的函數(shù)值 Y, 使 Y=f(X)。 第12頁,共19頁,2022年,5月20日,2點8分,星期二4.4 任務(wù)八 LED顯示電路 相關(guān)知識兩條查表指令: MOVC A, A+PC MOVC A, A+DPTR選用DPTR為首地址指針時表格參量可存放在64KB范圍內(nèi)的任何區(qū)段,可供無限次查表,選用PC當前值為首地址指針時表硌參量必須設(shè)置在緊跟查表指令(MOVC)之后,基本上只能一次性查表,編程時應(yīng)根據(jù)實際情況進行選擇,一般以選擇DPTR為基址指針的查表指令靈活、方便,可省去一些麻煩。 第13頁,共19頁,2022年,5月20日,2點8分,星期

10、二4.4 任務(wù)八 LED顯示電路 相關(guān)知識選用DPTR作為基地址的查表指令時,其操作可分3步進行:將待查表格的首地址置入DPTR基址寄存器;將待查的表格具體項數(shù)值置入變址寄存器A中;執(zhí)行指令MOVC A,A+DPTR將查表結(jié)果值讀入累加器A中。 第14頁,共19頁,2022年,5月20日,2點8分,星期二4.4 任務(wù)八 LED顯示電路 相關(guān)知識選用PC當前值作為基地址的查表指令時,由于PC的當前值正是查表指令的下一條指令的第一個字節(jié)的地址值,亦即表格數(shù)據(jù)串的首地址,當執(zhí)行完查表指令,讀取到表格數(shù)據(jù)后仍需從這個PC的當前值繼續(xù)往下執(zhí)行,顯然兩者發(fā)生重疊,為解決這個矛盾,勢必將表格下移若干個字節(jié),

11、以便設(shè)置一條跳轉(zhuǎn)指令跳過表格串繼續(xù)安排順序往下執(zhí)行的程序。把表格串下移的字節(jié)數(shù)加到變址寄存器A中,即在查表指令前加一條指令。ADD A,#dataA中為經(jīng)動態(tài)運算得到的待查表格數(shù)的項數(shù)。Data為表格串下移的字節(jié)數(shù),亦即PC的當前值到下移后的表格串首地址的距離數(shù)。這個距離數(shù)顯然不宜太大,因為它將影響表格串的長度,兩者之和不能超過565B,這種表格一般屬一次性查找,因為PC的當前值隨程序的執(zhí)行而改變 第15頁,共19頁,2022年,5月20日,2點8分,星期二4.4 任務(wù)八 LED顯示電路程序設(shè)計舉例【例4.8 】 4位BCD碼整數(shù)轉(zhuǎn)換成二進制整數(shù)入口參數(shù):BCD碼字節(jié)地址指針R0,位數(shù)存于R2

12、中。出口參數(shù):二進制數(shù)存于R3R4中。算法:A=103a3+102a2+10a1+a0程序流程如7.7所示。子程序清單如下:BCDA:PUSH PSW ;現(xiàn)場保護PUSH APUSH BMOV PSW,#08HMOV R3,#00HMOV R2,#3 ;BCD碼D的位數(shù)MOV A,R0 ; a0-R4第16頁,共19頁,2022年,5月20日,2點8分,星期二4.4 任務(wù)八 LED顯示電路程序設(shè)計舉例MOV R4,ABCKB:MOV A,R3 ;(R3R4)10 MOV B,#10 ;R4MUL ABMOV R4,AXCH A,BMOV B,#10XCH A,R3MUL ABADD A,R3XCH A,R4INC R0 ;(R0)+1-R0ADD A,R0 ;( R3R4)- (R0)-RR3R4第17頁,共19頁,2022年,5月20日,2點8分,星期二4.4 任務(wù)八 LED顯示電路程序設(shè)計舉例XCH A,R4ADDC A,#0MOV R3,ADJNZ R2,BCDB ;循環(huán)n-1次POP B ;恢復現(xiàn)場PIP APOP PSWRET ;返回上例中的R2內(nèi)容是BCD碼的位數(shù)n,本例中n=4,即兩個字節(jié)4位BCD碼,在程序中作為循環(huán)控制寄存器的計數(shù)值為n-1=4-1=3,

溫馨提示

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

評論

0/150

提交評論