單片機(jī)原理第五章_第1頁
單片機(jī)原理第五章_第2頁
單片機(jī)原理第五章_第3頁
單片機(jī)原理第五章_第4頁
單片機(jī)原理第五章_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)2第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5-1-2 5-1-2 匯編語言程序設(shè)計(jì)步驟匯編語言程序設(shè)計(jì)步驟一一. .分析問題。分析問題。二二. .確定算法。確定算法。三三. .制定程序流程圖:表示程序結(jié)構(gòu)和程序功能制定程序流程圖:表示程序結(jié)構(gòu)和程序功能四四. .編制源程序編制源程序 1. 1. 合理分配存儲(chǔ)器單元和了解合理分配存儲(chǔ)器單元和了解I/OI/O接口地址。接口地址。 2. 2. 按功能設(shè)計(jì)程序,按功能設(shè)計(jì)程序, 明確各程序之間的相互關(guān)系。明確各程序之間的相互關(guān)系。 3. 3. 用注釋行說明程序,用注釋行說明程序, 便于閱讀和修改調(diào)試

2、和修改。便于閱讀和修改調(diào)試和修改。五五. .程序調(diào)試。程序調(diào)試。開始開始1 YN?3第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5 5-1-3 -1-3 評(píng)價(jià)程序質(zhì)量的標(biāo)準(zhǔn)評(píng)價(jià)程序質(zhì)量的標(biāo)準(zhǔn) (1)(1)程序的執(zhí)行時(shí)間。程序的執(zhí)行時(shí)間。 (2)(2)程序所占用的內(nèi)存字節(jié)數(shù)。程序所占用的內(nèi)存字節(jié)數(shù)。 (3)(3)程序的邏輯性、可讀性。程序的邏輯性、可讀性。 (4)(4)程序的兼容性、可擴(kuò)展性。程序的兼容性、可擴(kuò)展性。 (5)(5)程序的可靠性。程序的可靠性。45-2 5-2 順序程序順序程序 直線程序又稱簡(jiǎn)單程序,程序走向只有一條路徑。直線程序又稱簡(jiǎn)單程序,程序走向只有一條路徑。 例例1 雙字

3、節(jié)變補(bǔ)程序(設(shè)數(shù)據(jù)在雙字節(jié)變補(bǔ)程序(設(shè)數(shù)據(jù)在R4 R5中)中)雙字節(jié)變補(bǔ)程序雙字節(jié)變補(bǔ)程序(設(shè)數(shù)據(jù)在設(shè)數(shù)據(jù)在R4R5中中):MOV A,R5 ;取低字節(jié)取低字節(jié)CPL AADD A,#1 ;低字節(jié)變補(bǔ)低字節(jié)變補(bǔ)MOV R5,AMOV A,R4 ;取高字節(jié)取高字節(jié)CPL AADDC A,#0;高字節(jié)變補(bǔ)高字節(jié)變補(bǔ)MOV R4,A第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)例例2 2 壓縮式壓縮式BCDBCD碼分解成為單字節(jié)碼分解成為單字節(jié)BCDBCD碼。碼。MOV R0,#40H;設(shè)指針設(shè)指針MOV A,R0;取一個(gè)字節(jié)取一個(gè)字節(jié)MOV R2,A

4、;暫存暫存ANL A,#0FH;清清0高半字節(jié)高半字節(jié)INC R0MOV R0,A ;保存數(shù)據(jù)個(gè)位保存數(shù)據(jù)個(gè)位MOV A,R2SWAP A ;十位換到低半字節(jié)十位換到低半字節(jié)ANL A,#0FHINC R0MOV R0,A;保存數(shù)據(jù)十位保存數(shù)據(jù)十位十十 個(gè)個(gè)6第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 例例5-1 假設(shè)兩個(gè)雙字節(jié)無符號(hào)數(shù),分別存放在假設(shè)兩個(gè)雙字節(jié)無符號(hào)數(shù),分別存放在R1R0和和R3R2中,高字節(jié)在中,高字節(jié)在前,低字節(jié)在后。編程使兩數(shù)相加,和數(shù)存放回前,低字節(jié)在后。編程使兩數(shù)相加,和數(shù)存放回R2R1R0中。中。 ORG 1000h CLR C MOV A,R0;取被加數(shù)低字

5、節(jié)至A ADD A,R2;與加數(shù)低字節(jié)相加 MOV R0,A;存和數(shù)低字節(jié) MOV A,Rl;取被加數(shù)高字節(jié)至A ADDC A,R3;與加數(shù)高字節(jié)相加 MOV Rl,A;存和數(shù)高字節(jié) MOV A,#0 ADDC A,#0;加進(jìn)位位 MOV R2,A;存和數(shù)進(jìn)位位 SJMP $ ;原地踏步 END7第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5-3 5-3 分支程序分支程序 由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。5-3-15-3-1 單重分支程序單重分支程序 一個(gè)判斷決策框,程序有兩條出路。兩種分支結(jié)構(gòu)。一個(gè)判斷決策框,程序有兩

6、條出路。兩種分支結(jié)構(gòu)。 例例1 求求R2中補(bǔ)碼絕對(duì)值,正數(shù)不變,負(fù)數(shù)變補(bǔ)。中補(bǔ)碼絕對(duì)值,正數(shù)不變,負(fù)數(shù)變補(bǔ)。 MOV A,R2 JNB ACC.7,NEXT ;為正數(shù)?為正數(shù)? CPL A ;負(fù)數(shù)變補(bǔ)負(fù)數(shù)變補(bǔ) INC A MOV R2,ANEXT: SJMP NEXT ;結(jié)束結(jié)束條件滿足條件滿足?N影響條件影響條件Y處理段處理段8第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5-3-2 5-3-2 多重分支程序多重分支程序多次使用條件轉(zhuǎn)移指令,形成兩個(gè)以上判斷框。例例5-75-7 設(shè)30H單元存放的是一元二次方程ax2+bx+c=0根的判別式=b2-4ac的值。解:值為有符號(hào)數(shù),有三種情況,即

7、大于零、等于零、小于零。 9第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 編程:編程: ORG 1000HSTART: MOV A,30H ;值送值送A JNB ACC.7,YES ;=0轉(zhuǎn)轉(zhuǎn)YES MOV 31H,#0 ;0轉(zhuǎn)轉(zhuǎn)TOW MOV 31H,#1 ;=0有相同實(shí)根有相同實(shí)根 SJMP FINISHTOW: MOV 31H,#2 ;有兩個(gè)不同實(shí)根有兩個(gè)不同實(shí)根FINISH:SJMP $10第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5-3-3 5-3-3 N路分支程序路分支程序 N路分支程序是根據(jù)前面程序運(yùn)行的結(jié)果,可以有路分支程序是根據(jù)前面程序運(yùn)行的結(jié)果,可以有N種選擇,并能轉(zhuǎn)

8、向其種選擇,并能轉(zhuǎn)向其中任一處理程序。中任一處理程序。11第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)例例5-10 1285-10 128路分支程序。路分支程序。 功能:根據(jù)功能:根據(jù)R3R3的值的值(00(00H H7FH)7FH)轉(zhuǎn)到轉(zhuǎn)到128128個(gè)目的地址。個(gè)目的地址。 參考程序:JMPl28: MOV A,R3 RL A ;(A)2 MOV DPTR,#PRGTBL ;散轉(zhuǎn)表首址送散轉(zhuǎn)表首址送DPTR JMP A+DPTR ;散轉(zhuǎn)散轉(zhuǎn)PRGTBL:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F ;128個(gè)個(gè)AJMP指令占指令占256個(gè)字節(jié)個(gè)字節(jié)12第五章第五

9、章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)例5-11 256路分支程序 功能:根據(jù)R3的值轉(zhuǎn)移到256個(gè)目的地址;入口條件:(R3)=轉(zhuǎn)移目的地址代號(hào)(00HFFH);出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。解:解:JMP256: MOV A,R3 ;取取N值值 MOV DPTR,#PRGTBL ;指向分支地址表首址指向分支地址表首址 CLR C RLC A ;(A)2 JNC LOWl28 ;是前是前128個(gè)分支程序,則轉(zhuǎn)移個(gè)分支程序,則轉(zhuǎn)移 INC DPH ;否則基址加否則基址加25613第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)LOWl28: MOV TEMP,A ;暫存A INC A ;指

10、向地址低8位 MOVC A,A+DPTR ;查表,讀分支地址低8位 PUSH ACC ;地址低8位入棧 MOV A,TEMP ;恢復(fù)A,指向地址高8位 MOVC A,A+DPTR ;查表,讀分支地址高8位 PUSH ACC ;地址高8位入棧 RET ;分支地址彈入PC實(shí)現(xiàn)轉(zhuǎn)移PRGTBL: DW ROUT00 ;占用512個(gè)字節(jié) DW ROUT01 2000H2003H2002H2001H高8位低8位14第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)例例5-12 大于大于256路分支轉(zhuǎn)移程序路分支轉(zhuǎn)移程序 功能:根據(jù)入口條件轉(zhuǎn)向功能:根據(jù)入口條件轉(zhuǎn)向n個(gè)分支處理程序個(gè)分支處理程序 入口條件:入

11、口條件:(R7R6)=轉(zhuǎn)移目的地址代號(hào);轉(zhuǎn)移目的地址代號(hào); 出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。 程序散轉(zhuǎn)表中有程序散轉(zhuǎn)表中有N N條條LJMPLJMP指令,每條指令,每條LJMPLJMP指令占指令占3 3個(gè)字節(jié),因此個(gè)字節(jié),因此要按入口條件將址代號(hào)乘以要按入口條件將址代號(hào)乘以3 3,用乘積的高字節(jié)加,用乘積的高字節(jié)加DPHDPH,乘積乘積的低字節(jié)送的低字節(jié)送A(A(變址寄存器變址寄存器) )。PRGTBL:LJMP ROUT0 LJMP ROUT1 LJMP ROUT2 15第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)參考程序:參考程序:JMPN:M

12、OV DPTR,#PRGTBL;DPTR指向表首址指向表首址MOV A,R7 ;取地址代號(hào)高取地址代號(hào)高8位位MOV B,#3 ;MUL AB ;3ADD A,DPH ;MOV DPH,A ;修改指針高修改指針高8位位MOV A,R6 ;取地址代號(hào)低取地址代號(hào)低8位位MOV B,#3 ;3MUL AB ;XCH A,B ;交換乘積的高低字節(jié)交換乘積的高低字節(jié)ADD A,DPH ;乘積的高字節(jié)加乘積的高字節(jié)加DPHMOV DPH,AXCH A,B ;乘積的低字節(jié)送乘積的低字節(jié)送AJMP A+DPTR ;散轉(zhuǎn)散轉(zhuǎn)16第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5-45-4 循環(huán)程序循環(huán)程序包含多

13、次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。5-4-15-4-1循環(huán)程序的導(dǎo)出循環(huán)程序的導(dǎo)出各個(gè)環(huán)節(jié)任務(wù):各個(gè)環(huán)節(jié)任務(wù):一初始化部分一初始化部分循環(huán)準(zhǔn)備工作。循環(huán)準(zhǔn)備工作。如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。二循環(huán)體二循環(huán)體循環(huán)工作部分:循環(huán)工作部分:需多次重復(fù)處理的工作。需多次重復(fù)處理的工作。循環(huán)控制部分:循環(huán)控制部分:1.修改指針和循環(huán)控制變量。修改指針和循環(huán)控制變量。2.檢測(cè)循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。檢測(cè)循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。三三.結(jié)束部分結(jié)束

14、部分 處理和保存循環(huán)結(jié)果。處理和保存循環(huán)結(jié)果。1)已知循環(huán)次數(shù))已知循環(huán)次數(shù) 2)循環(huán)次數(shù)未知)循環(huán)次數(shù)未知允許允許0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測(cè)循環(huán)條件。次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測(cè)循環(huán)條件。循環(huán)控制循環(huán)控制 ?循環(huán)工作循環(huán)工作循環(huán)結(jié)束循環(huán)結(jié)束循環(huán)初始化循環(huán)初始化YN17第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)單重循環(huán)單重循環(huán)簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。例:例:求n個(gè)單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在43H起始單元,數(shù)據(jù)串長度在42H單元,累加和不超過2個(gè)字節(jié)。SUM:MOVR0,#42H;設(shè)指針設(shè)指針MOV A,R0MOV R2,A ;

15、循環(huán)計(jì)數(shù)器循環(huán)計(jì)數(shù)器R2nCLRA ;結(jié)果單元清結(jié)果單元清0MOV R3,AADD1:INCR0 ;修改指針修改指針 ADDA,R0 ;累加累加 JNC NEXT ;處理進(jìn)位處理進(jìn)位 INCR3 ;有進(jìn)位,高字節(jié)加有進(jìn)位,高字節(jié)加1NEXT:DJNZ R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完?循環(huán)控制:數(shù)據(jù)是否加完? MOV 40H,A ;循環(huán)結(jié)束,保存結(jié)果循環(huán)結(jié)束,保存結(jié)果 MOV41H,R3 RET片片內(nèi)內(nèi)RAMXn43HX142Hn41HSUMH40HSUML18第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)v 循環(huán)控制方法循環(huán)控制方法:計(jì)數(shù)控制、特征標(biāo)志控制。計(jì)數(shù)控制、特征標(biāo)志控制。一

16、一. .計(jì)數(shù)控制:計(jì)數(shù)控制: 設(shè)循環(huán)計(jì)數(shù)器,控制循環(huán)次數(shù)。設(shè)循環(huán)計(jì)數(shù)器,控制循環(huán)次數(shù)。正計(jì)數(shù)正計(jì)數(shù)和和倒計(jì)數(shù)倒計(jì)數(shù)兩種方式。兩種方式。例:例:為一串為一串7 7位位ASCIIASCII碼數(shù)據(jù)的碼數(shù)據(jù)的D D7 7位加上位加上奇校驗(yàn)奇校驗(yàn),設(shè)數(shù)據(jù)存放在片外,設(shè)數(shù)據(jù)存放在片外RAMRAM的的21012101H H起始單元,數(shù)據(jù)長起始單元,數(shù)據(jù)長度在度在21002100H H單元。單元。MOV DPTR,#2100HMOVX A,DPTRMOV R2,ANEXT:INC DPTRMOVX A,DPTRORL A,#80HJNB P,PASS ;判斷是否加校驗(yàn)判斷是否加校驗(yàn)MOVX DPTR,A;是,

17、則加奇校驗(yàn)是,則加奇校驗(yàn)PASS:DJNZ R2,NEXTDONE:SJMP DONE片片外外RAM2102H011010002101H001011012100Hn19第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)二二. .特征控制:特征控制:設(shè)定循環(huán)結(jié)束標(biāo)志實(shí)現(xiàn)循環(huán)控制。例:找正數(shù)表最小值。正數(shù)表存在片外RAM中以LIST為起始單元,用-1作為結(jié)束標(biāo)志。START:MOVDPTR,#LIST ;數(shù)表首地址數(shù)表首地址 MOVB,#127 ;預(yù)置最小值預(yù)置最小值NEXT: MOVX A,DPTR ;取數(shù)取數(shù) INC DPTR ;修改指針修改指針 CJNE A,#0FFH,NEXT1;是否為數(shù)表結(jié)

18、尾?是否為數(shù)表結(jié)尾? SJMP DONE ;循環(huán)結(jié)束循環(huán)結(jié)束NEXT1:CJNE A,B,NEXT2 ;比較比較NEXT2:JNCNEXT ;Cy=1,則則AB MOVB,A ;保存較小值保存較小值 SJMP NEXTDONE: SJMP DONE20第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5-4-2 5-4-2 多重循環(huán)多重循環(huán)循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。例:將內(nèi)存一串單字節(jié)無符號(hào)數(shù)升序排序。步驟:每次取相鄰單元的兩數(shù)比較,決定是否需要交換數(shù)據(jù)位置。第一次循環(huán),比較N-1次,取數(shù)據(jù)表中最大值。第二次循環(huán),比較N-2次,取到次大值。 第N-1次循環(huán):比較一次,排序結(jié)束。內(nèi)循環(huán)

19、控制內(nèi)循環(huán)控制 ?循環(huán)工作循環(huán)工作循環(huán)結(jié)束循環(huán)結(jié)束外循環(huán)控制外循環(huán)控制 ?內(nèi)循環(huán)初始化內(nèi)循環(huán)初始化開始開始外循環(huán)初始化外循環(huán)初始化21第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)SORT: MOV A,#N-1;N個(gè)數(shù)據(jù)排序個(gè)數(shù)據(jù)排序 MOV R4,A;外循環(huán)次數(shù)外循環(huán)次數(shù)LOOP1:MOV A,R4 MOV R3,A;內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù) MOV R0,#TAB;設(shè)數(shù)據(jù)指針設(shè)數(shù)據(jù)指針LOOP2:MOV A,R0;取二數(shù)取二數(shù) MOV B,A INC R0 MOV A,R0 CJNE A,B,L1 ;比較比較L1: JNC UNEX;AB,不交換不交換 DEC R0;否則交換數(shù)據(jù)否則交換數(shù)據(jù)

20、 XCH A ,R0 INC R0 MOV R0,AUNEX: DJNZ R3,LOOP2;內(nèi)循環(huán)結(jié)束??jī)?nèi)循環(huán)結(jié)束? DJNZ R4,LOOP1;外循環(huán)結(jié)束?外循環(huán)結(jié)束? RETR3R31=0 ?B (R0) A ( R0 + 1 )循環(huán)結(jié)束循環(huán)結(jié)束外循環(huán)次數(shù)外循環(huán)次數(shù)R4R4R41=0 ?內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù)R3表首表首TABR0開始開始A BA B?( (R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N22第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)v 軟件延時(shí)程序軟件延時(shí)程序 用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實(shí)現(xiàn)軟件

21、延時(shí)。 試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。源程序源程序指令周期指令周期( (M) M) 指令執(zhí)行次數(shù)指令執(zhí)行次數(shù)DELAY:MOV R6,#64H1 I1: MOV R7,#0FFH 1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2延時(shí)時(shí)間計(jì)算:(設(shè)時(shí)鐘延時(shí)時(shí)間計(jì)算:(設(shè)時(shí)鐘f=12MHz)t=(11+1100+2100255+2100+21)M=51.3 ms1100100255100123第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)5.5.2編寫循環(huán)程序應(yīng)注意的問題編寫循環(huán)程序應(yīng)注意的問題 1)循環(huán)體前應(yīng)注意安排循環(huán)初始化;)循環(huán)體前應(yīng)注意安排

22、循環(huán)初始化;2)內(nèi)外循環(huán)間不應(yīng)相互交叉。)內(nèi)外循環(huán)間不應(yīng)相互交叉。24第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)v 5-5 5-5 查表程序查表程序例例5-19 一個(gè)十六進(jìn)制數(shù)存放在一個(gè)十六進(jìn)制數(shù)存放在HEX單元的低四位,將其轉(zhuǎn)換成單元的低四位,將其轉(zhuǎn)換成ASCII碼并送回碼并送回HEX單單元。元。 編程: ORG 0100H HEX EQU 30HHEXASC: MOV A, HEX ANL A ,#00001111B ADD A, #3 ;變址調(diào)整 MOVC A, A+PC MOV HEX,A ;2字節(jié) RET ;1字節(jié)ASCTAB: DB 30H,3lH,32H,33H DB 34H

23、,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H END 25第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)v 5-6 子程序設(shè)計(jì)子程序:能完成某項(xiàng)特定功能的獨(dú)立程序段,可被反復(fù)調(diào)用。優(yōu)點(diǎn): (1)不必重復(fù)書寫同樣的程序,提高編程效率; (2)程序的邏輯結(jié)構(gòu)簡(jiǎn)單,便于閱讀; (3)縮短了源程序和目標(biāo)程序的長度,節(jié)省了程序存儲(chǔ)器空間; (4)使程序模塊化、通用化,便于交流,共享資源; (5)便于按某種功能調(diào)試。26第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)1. 子程序結(jié)構(gòu)一子程序入口用標(biāo)號(hào)作為子程序名。二調(diào)用子程序之前設(shè)置好堆棧。三用返回指

24、令RET結(jié)束子程序,并保證堆棧棧頂為調(diào) 用程序的返回地址。四. 子程序嵌套須考慮堆棧容量。五. 提供足夠的調(diào)用信息:如:子程序名、子程序功能、入口參數(shù)和出口參數(shù)、子程序占用的硬件資源、子程序中調(diào)用的其他子程序名。27第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)2. 參數(shù)傳遞入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。 (1)子程序無須傳遞參數(shù)子程序無須傳遞參數(shù)28第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)(2)用累加器和工作寄存器傳遞參數(shù)用累加器和工作寄存器傳遞參數(shù)例5-24 雙字節(jié)求補(bǔ)子程序CPLD。解 入口參數(shù):(R7R6)=16位數(shù) 出口

25、參數(shù):(R7R6)=求補(bǔ)后的16位數(shù) CPLD:MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A RET 29第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)(3)通過操作數(shù)地址傳遞參數(shù)通過操作數(shù)地址傳遞參數(shù)例例5-25 n字節(jié)求補(bǔ)子程序。字節(jié)求補(bǔ)子程序。解解 入口參數(shù):入口參數(shù):(R0)=求補(bǔ)數(shù)低字節(jié)指針,求補(bǔ)數(shù)低字節(jié)指針,(R7)=n-1 出口參數(shù):出口參數(shù):(R0)=求補(bǔ)后的高字節(jié)指針求補(bǔ)后的高字節(jié)指針 CPLN: MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET30第五章第五章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)(4)通過堆棧傳遞參數(shù)通過堆棧傳遞參數(shù)例例5-26 在在HEX單元存放兩個(gè)十六進(jìn)制數(shù),將它們分別轉(zhuǎn)換單元存放兩個(gè)十六進(jìn)制數(shù),將它們分別轉(zhuǎn)換 成成ASC碼并存入碼并存入ASC和和ASC+1單元。單元。解解 由于要進(jìn)行兩次轉(zhuǎn)換,故可調(diào)用查表子程序完成。由于要進(jìn)行兩次轉(zhuǎn)換,故可調(diào)用查表子程序完成。主程序:主程序:MAIN: PU

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論