版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
3.3程序設(shè)計方法匯編語言程序設(shè)計步驟:
要想使計算機(jī)完成某一具體的工作任務(wù),必須按序執(zhí)行一條條指令。這種按工作要求編排指令序列的過程稱程序設(shè)計。使用匯編語言作為程序設(shè)計語言的編程步驟與高級語言編程步驟類似,但又有差異。3.3程序設(shè)計方法其程序設(shè)計步驟大致可分為以下幾步:(1)熟悉與分析工作任務(wù);明確其要求和要到達(dá)的工作目的、技術(shù)指標(biāo)等;(2)確定解決問題的計算方法和工作步驟;(3)畫工作流程圖(其圖形的符號規(guī)定均同于高級語言流程圖);(4)分配內(nèi)存工作單元,確定程序與數(shù)據(jù)區(qū)存放地址;(5)按流程圖編寫源程序;(6)上機(jī)調(diào)試、修改及最后確定源程序;在進(jìn)行程序設(shè)計時,必須根據(jù)實際問題和所使用的計算機(jī)的特點來確定算法,然后按照盡可能使程序簡短和縮短運行時間兩個原那么編寫程序。編程技巧需經(jīng)大量實踐后慢慢地加以提高。3.3程序設(shè)計方法3.3.1順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)是最簡單的一種程序結(jié)構(gòu),編程很容易,它具有兩個顯著特點:①程序中無轉(zhuǎn)移、調(diào)轉(zhuǎn)等指令;②程序執(zhí)行時按編寫順序,程序流向不變。
例編寫計算32E6H+0EACH的程序,把最后結(jié)果存入片外50H、51H單元,51H存結(jié)果高8位,50H存低8位。分析:根據(jù)題目,顯然是一個簡單的加法程序,采用順序結(jié)構(gòu)即可。程序框圖如圖3—1所示。圖3-1加法順序結(jié)構(gòu)程序框圖
取被加數(shù)低8位兩數(shù)低8位求和存低位和→50H取被加數(shù)高8位兩數(shù)高8位及進(jìn)位相加求和高位和→51H程序
ORG4000HCLRCMOVA,#0E6H;被加數(shù)低8位送AADDA,#0ACH;兩數(shù)低8位相加MOVR0,#50H;低位和的地址送AMOVX@R0,A;低位相加和送片外50HMOVA,#32H;被加數(shù)高8位送AADDCA,#0EH;高位和與進(jìn)位位之和送AMOVR0,#51H;高位和地址送R0MOVX@R0,A;高8位和及進(jìn)位位之和送片外51HEND
從程序框圖及程序看出,本程序無任何判斷轉(zhuǎn)移指令,程序逐條按順序執(zhí)行即可,故屬于順序結(jié)構(gòu)程序。3.3.2分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序特點:①根據(jù)要求利用轉(zhuǎn)移指令,改變程序流向;②設(shè)計難點是如何正確使用供條件轉(zhuǎn)移指令使用的條件。
轉(zhuǎn)移指令有三種:無條件轉(zhuǎn)移、條件轉(zhuǎn)移和散轉(zhuǎn)一、條件/無條件轉(zhuǎn)移程序設(shè)計例編寫按下述函數(shù)式求y值的程序,變量x在30H單元,結(jié)果存入31H單元中。x+1x>0y=0x=0-1x<0
分析:該題目共三個分支,轉(zhuǎn)移條件是x與0比較的結(jié)果,按x>0、x=0、x<0分別轉(zhuǎn)入三個分支程序。該題目程序框圖如圖3—4所示。圖3-4條件轉(zhuǎn)移分支程序框圖
開始X→A存結(jié)果A=A+1A=-1結(jié)束A=0?A>0?YYNNLP1LP0LP2
程序ORG4000HMOVA,30H;取變量X→ACJNEA,#00H,LP0;x≠0轉(zhuǎn)LP0SJMPLP1;x=0轉(zhuǎn)LP1分支LP0:JNCLP2;C=0表示X>0,轉(zhuǎn)LP2分支MOVA,#0FFH;C=1表示X<0,;-1(補(bǔ)碼)→A又一分支SJMPLP1;轉(zhuǎn)存結(jié)果程序LP2:ADDA,#01H;X+1→ALP1:MOV31H,A;結(jié)果→31HSJMP$END
該程序采用CJNEA,#00H,LP0與JNCLP2指令相配合,將程序三個分支區(qū)別開。二、散轉(zhuǎn)程序設(shè)計散轉(zhuǎn)程序的特點是利用散轉(zhuǎn)指令實現(xiàn)向各分支程序的轉(zhuǎn)移。JMP@A+DPTR散轉(zhuǎn)指令的操作是把16位數(shù)據(jù)指針DPTR的內(nèi)容與累加器A中的8位無符號數(shù)相加,形成地址,裝入程序計數(shù)器PC,此即散轉(zhuǎn)的目的地址。其操作結(jié)果不影響A和DPTR。散轉(zhuǎn)程序的設(shè)計可采用下面兩種方法:1、數(shù)據(jù)指針DPTR固定,根據(jù)累加器A的內(nèi)容,程序轉(zhuǎn)入相應(yīng)的分支程序中去;2、累加器A清零,根據(jù)數(shù)據(jù)指針DPTR的值,決定程序轉(zhuǎn)向目的地址。DPTR的值可用查表或其它方法獲得。
二、散轉(zhuǎn)程序設(shè)計
按散轉(zhuǎn)程序的結(jié)構(gòu)又可分為四種方法:
①轉(zhuǎn)移指令表法;②地址偏移量表法;②轉(zhuǎn)向地址表法;④查表與RET指令結(jié)合散轉(zhuǎn)法。1.轉(zhuǎn)移指令表法轉(zhuǎn)移指令表法是把散轉(zhuǎn)地址用無條件轉(zhuǎn)移指令A(yù)JMP或LJMP組成一個表,然后由散轉(zhuǎn)指令根據(jù)需要轉(zhuǎn)向表中相應(yīng)指令,那么可無條件跳轉(zhuǎn)到某分支程序入口地址。例1編寫程序,根據(jù)R7的狀態(tài)分別轉(zhuǎn)向八個功能鍵處理程序。設(shè)R7中為鍵號依次為0、1、2、3、4、5、6、7,分別轉(zhuǎn)向SB0、SB1、SB2、SB3、SB4、SB5、SB6、SB7八個鍵功能處理程序。程序ORG2000HMOVDPTR,#TAB;表首地址→DPTRMOVA,R7;R7→AADDA,R7;R7×2→A修正A值JNCLP;A無進(jìn)位轉(zhuǎn)LPINCDPH;A有進(jìn)位DPH+l→DPHLP:JMP@A+DPTR;散轉(zhuǎn)A+DPTR→PCTAB:AJMPSB0AJMPSB1;轉(zhuǎn)移指令表┋┋AJMPSB7SB0:0號鍵處理程序┋┋SB1:1號鍵處理程序SB7:7號鍵處理程序SJMP$END各鍵處理程序略。兩點說明:①因為本例是由AJMP指令構(gòu)成表,該指令為2字節(jié),故A中修正值R7×2,假設(shè)改為LJMP表(3字節(jié)指令)那么A中修正值為R7×3。⑦R7中存放散轉(zhuǎn)的標(biāo)志值,其最大值為255,所以一個8位存放器最多控制256個散轉(zhuǎn)點,假設(shè)散轉(zhuǎn)點多于256,可使用雙字節(jié)存放標(biāo)志值,如用R6存高位、R7存低位。2.地址偏移量表法地址偏移量表是用各散轉(zhuǎn)分支程序入口地址和表首地址之差組成一個表,然后利用查表指令和散轉(zhuǎn)指令相結(jié)合找到分支入口地址。
例2用地址偏移量表法設(shè)計上例程序。程序ORG2000HMOVA,R7;鍵號送AMOVDPTR,#TAB;表首地址→DPTRMOVCA,@A十DPTR;查表內(nèi)容送AJMP@A十DPTRTAB:DBSB0-TABDBSB1-TAB;地址偏移量表┊┊DBSB7-TABSB0:0號鍵處理程序SB1:1號鍵處理程序
┊┊SB7:7號鍵處理程序特點:表中內(nèi)容是兩個地址之差。如SB0-TAB是0號鍵處理程序入口地址SB0和表首地址TAB之差。程序中巧妙利用MOVCA,@A+DPTRJMP@A+DPTR兩條指令配合,查找散轉(zhuǎn)入口SB0~SB7。設(shè)R7=0,那么A+DPTR=TAB查表MOVCA,@A+DPTR;(A+DPTR)→A表示把表TAB的第一個字節(jié)內(nèi)容送A,查表指令執(zhí)行后A=SB0-TAB,由于DPTR=TAB,再執(zhí)行JMP@A+DPTR后,表示A+DPTR→PC即SB0-TAB+TAB→PC即SB0→PC所以執(zhí)行查表和散轉(zhuǎn)指令后PC=SB0,程序按PC指針的方向自動轉(zhuǎn)向0號鍵處理程序入口SB0。3.轉(zhuǎn)向地址表法轉(zhuǎn)向地址表法用要轉(zhuǎn)向的地址組成一個表,利用查表指令查找到該地址,再由散轉(zhuǎn)指令使程序轉(zhuǎn)向此入口地址。
例3
仍用例1條件,根據(jù)R7=0~7轉(zhuǎn)向SB0~SB7
程序ORG4000HMOVDPTR,#TAB;表首地址→DPTRMOVA,R7ADDA,R7JNCLPINCDPHLP:MOVR3,A;R3暫存A中修正值MOVCA,@A+DPTR;查表中高8位地址→AXCHA,R3;R3與A內(nèi)容交換INCA;A+1→A,修正值加1MOVCA,@A+DPTR;查表中低8位地址→AMOVDPL,A;低8位地址→DPLMOVDPH,R3;高8位地址→DPHCLRA;清A準(zhǔn)備下面用JMP@A+DPTR;因為A=0所以DPTR→PCTAB:DWSB0DWSB1;轉(zhuǎn)向地址表┋┋DWSB7SB0:0號鍵處理程序SB1:1號鍵處理程序┋┋SB7:7號鍵處理程序SJMP$END說明:SB0~SB7是16位地址,表中用DW定義一個字即兩個字節(jié),故查表分高8位和低8位兩次查表。設(shè)R7=0,第一次查到SB0的高位字節(jié)送DPH,第2次查表查到SB0的低位字節(jié)送DPL,執(zhí)行散轉(zhuǎn)指令JMP@A+DPTR后;由于A=0,故DPTR→PC即把SB0→PC,在PC指引下程序轉(zhuǎn)向0號鍵處理程序入口地址SB0,依次類推。4.利用RET指令實現(xiàn)散轉(zhuǎn)利用在執(zhí)行RET指令時,自動彈出堆棧地址到PC的功能,實現(xiàn)散轉(zhuǎn)。
例4利用RET指令仍設(shè)計例1的鍵功能程序。程序ORG2000HMOVSP,#30HMOVDPTR,#TABMOVA,R7ADDA,R7JNCLPINCDPH
LP:MOVR3,A;修正值送R3保存MOVCA,@A+DPTR;散轉(zhuǎn)地址高8位送AXCHA,R3;A←→R3(散轉(zhuǎn)高8位)INCA;A+1→AMOVCA,@A+DPTR;散轉(zhuǎn)地址低8垃送APUSHACC;低8位地址壓入堆棧MOVA,R3
PUSHACC;高8位地址壓入堆棧RET;彈出16位地址→PCTAB:DWSB0DWSB1┋┋DWSB7SB0:0號鍵處理程序SB1:1號鍵處理程序┋┋SB7:7號鍵處理程序SJMP$END3.3.3循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序是把需要屢次重復(fù)的程序段,利用轉(zhuǎn)移指令屢次轉(zhuǎn)向該程序段。循環(huán)程序的主要特點:①大大縮短程序,減少占用程序空間;②程序結(jié)構(gòu)優(yōu)化,清晰易讀;③可以實現(xiàn)多重循環(huán)控制,但循環(huán)不能交叉,不能從外循環(huán)跳入內(nèi)循環(huán);④循環(huán)程序主要由循環(huán)常數(shù)、循環(huán)體和循環(huán)控制三局部組成。例設(shè)計一個延時1s的程序,晶振6MHz。分析:設(shè)計的關(guān)鍵是循環(huán)體。本例選擇1ms的延時程序為循環(huán)體,第二層循環(huán)到達(dá)10ms,第三層循環(huán)延時到1s。程序框圖如圖3—5所示。圖3-5循環(huán)結(jié)構(gòu)延時程序框圖
開始10→R01ms延時R0-1→R0結(jié)束R0=0?YN
程序ORG4000HMOVR0,#100;送延時1s的常數(shù)LP2:MOVR1,#10;送延時10ms的常數(shù)LP1:MOVR2,#X;送延時1ms的常數(shù)(內(nèi)循環(huán))LP0:NOPNOP;內(nèi)循環(huán)體DJNZR2,LP0DJNZR1,LP1DJNZR0,LP2;循環(huán)控制END
循環(huán)常數(shù)的計算執(zhí)行完這段程序就可以延時到1s,其中內(nèi)循環(huán)常數(shù)與內(nèi)循環(huán)指令數(shù)及機(jī)器周期有關(guān)。內(nèi)循環(huán)常數(shù)的計算方法由于晶振頻率為6MHz,那么一個機(jī)器周期為2μs。設(shè)時間常數(shù)為X,計算公式如下:(循環(huán)體字節(jié)數(shù))×機(jī)器周期×?xí)r間常數(shù)=延時時間
內(nèi)循環(huán)體共3條指令:NOP;1字節(jié)(1機(jī)器周期)NOP;1字節(jié)(1機(jī)器周期)DJNZR2,LP0;2字節(jié)(2機(jī)器周期)把字節(jié)數(shù)、機(jī)器周期、延時時間代人上式那么為:(1+1+2)×2×X=l000μsX=125=7DH3.3.4查表程序設(shè)計一、查表法概念查表法就是把事先計算出的結(jié)果或測得的數(shù)據(jù)按一定順序組成表格,再利用查表程序查出所需結(jié)果。查表程序結(jié)構(gòu)的特點:①所需函數(shù)計算結(jié)果或測量所得數(shù)據(jù)按一定規(guī)律制成表格;②數(shù)據(jù)表一般放在程序區(qū);③用查表指令實現(xiàn)查表。數(shù)據(jù)表的格式大致分兩種:一種有序表即表中數(shù)據(jù)按一定順序排列,如按大小關(guān)系或按變量對應(yīng)順序等排列;另一種為無序表即表中數(shù)據(jù)是任意的,無規(guī)那么排列。二、有序表的查表程序設(shè)計有序表因表格按一定順序排列,查表方便,稱為簡單查表。查表方法MOVCA,@A+DPTRMOVCA,@A+PC以DPTR為基址〔遠(yuǎn)程查表〕以PC為基址〔近程查表〕例10~9十個十六進(jìn)制數(shù),對應(yīng)的ASCII碼為30H~39H,編程實現(xiàn)0~9十個數(shù)轉(zhuǎn)換或ASCII碼。設(shè)R0中存放十六進(jìn)制數(shù),查表結(jié)果存入R1中。
程序1ORG2000HMOVA,R0;16進(jìn)制數(shù)→AADDA,#01H;修正A值MOVCA,@A+PC;查表結(jié)果→AMOVR1,A;保存結(jié)果送R1TAB:DB30H,31H,32H;有序表DB33H,34H,35H;表中數(shù)據(jù)與0~9順序DB36H,38H,39H;對應(yīng)END
設(shè)R0=05H,修正后A=06H,即PC后第6個地址內(nèi)容送A,PC為查表指令下一條指令的地址,顯然,該地內(nèi)容為35H。由于R0=05H,查表后A=35H,所以35H那么為05H的ASCII碼。程序2ORG4000HMOVA,R0;16進(jìn)制數(shù)→AADDA,#02H;修正A值MOVCA,@A+PC;查表結(jié)果→AMOVR1,A;保存結(jié)果送R1RETTAB:DB30H,31H,32H;有序表DB33H,34H,35H;表中數(shù)據(jù)與0~9順序DB36H,38H,39H;對應(yīng)END程序3ORG4000HMOVA,R0
;16進(jìn)制數(shù)→AMOVDPTR,#TAB;表首地址→DPTRMOVCA,@A+DPTR;(A+DPTR)→A查表結(jié)果MOVR1,A;保存結(jié)果TAB:DB30H,31H,32HDB33H,34H,35HDB36H,38H,39HEND
3.3.5子程序結(jié)構(gòu)設(shè)計子程序是具有某種功能的獨立程序段。它與主程序是調(diào)用與被調(diào)用的關(guān)系。設(shè)計子程序時要注意的以下幾個問題:①每個子程序都要有一個名稱(入口地址代號);
②注意設(shè)堆棧指針,調(diào)用子程序時要把斷點壓入堆棧,子程序返回時再把斷點彈出送入程序指針PC;
③注意保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場,調(diào)用子程序前,要把A累加器和工作存放器中的重要結(jié)果先保存起來(保護(hù)現(xiàn)場),當(dāng)子程序即將返回時再將這些內(nèi)容取出送到原來位置(恢復(fù)現(xiàn)場);④子程序可以嵌套,即主程序可以調(diào)用子程序,子程序又可調(diào)用另外的子程序,通常情況下可允許嵌套8層。子程序的結(jié)構(gòu)主程序……LCALL子程序名……子程序名…RETEND調(diào)用子程序的概念所謂調(diào)用子程序,暫時斷開主程序的執(zhí)行,而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。調(diào)用子程序應(yīng)注意:〔1〕子程序占用的存儲單元和存放器?!?〕參數(shù)的傳遞?!?〕子程序經(jīng)過調(diào)用后得到的數(shù)據(jù)來完成程序之間的參數(shù)傳遞。
〔4〕嵌套調(diào)用與遞歸調(diào)用。RETLCALLSUB
子程序的調(diào)用與返回LCALLARETRETLCALLB
子程序的嵌套、調(diào)用與返回例
編制使P1口燈閃爍的程序,每個燈閃10次移位一次。LED與P1口接口電路所圖示。
分析:74LS240為反相驅(qū)動器,P1口為高電平時,發(fā)光二極管的燈點亮。
主程序ORG4000HMOVA,#01H;送初值LP:LCALLFLASH;調(diào)閃爍子程序
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漢字趣味學(xué)習(xí)課程設(shè)計
- 高職導(dǎo)游實務(wù)課程設(shè)計
- 自動澆花課程設(shè)計模版
- 高職國際英語課程設(shè)計
- 跑酷課程設(shè)計分析
- 2025年世界母乳喂養(yǎng)周活動總結(jié)例文(四篇)
- 2025年個人下鄉(xiāng)心得體會模版(3篇)
- 2025年HSE安全工作總結(jié)(三篇)
- 2025年專利實施授權(quán)合同(2篇)
- 2025年4月銀行個人工作總結(jié)(三篇)
- 服務(wù)經(jīng)營培訓(xùn)課件ppt 老客戶經(jīng)營綜合版
- MT/T 199-1996煤礦用液壓鉆車通用技術(shù)條件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力學(xué)性能試驗第1部分:桌類強(qiáng)度和耐久性
- 第三方在線糾紛解決機(jī)制(ODR)述評,國際商法論文
- 公寓de全人物攻略本為個人愛好而制成如需轉(zhuǎn)載注明信息
- 第5章-群體-團(tuán)隊溝通-管理溝通
- 腎臟病飲食依從行為量表(RABQ)附有答案
- 深基坑-安全教育課件
- 園林施工管理大型園林集團(tuán)南部區(qū)域養(yǎng)護(hù)標(biāo)準(zhǔn)圖例
- 排水許可申請表
評論
0/150
提交評論