第五章匯編語(yǔ)言程序設(shè)計(jì)C_第1頁(yè)
第五章匯編語(yǔ)言程序設(shè)計(jì)C_第2頁(yè)
第五章匯編語(yǔ)言程序設(shè)計(jì)C_第3頁(yè)
第五章匯編語(yǔ)言程序設(shè)計(jì)C_第4頁(yè)
第五章匯編語(yǔ)言程序設(shè)計(jì)C_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2 占用內(nèi)存單元和占用內(nèi)存單元和CPUCPU少少程序簡(jiǎn)短,執(zhí)行速度快程序簡(jiǎn)短,執(zhí)行速度快直接調(diào)用計(jì)算機(jī)全部資源,有效利用計(jì)算機(jī)的專有特性直接調(diào)用計(jì)算機(jī)全部資源,有效利用計(jì)算機(jī)的專有特性準(zhǔn)確掌握指令的執(zhí)行時(shí)間,適用于實(shí)時(shí)控制系統(tǒng)準(zhǔn)確掌握指令的執(zhí)行時(shí)間,適用于實(shí)時(shí)控制系統(tǒng)3一一. .分析問(wèn)題,建立數(shù)學(xué)模型。分析問(wèn)題,建立數(shù)學(xué)模型。二二. .確定算法。確定算法。三三. .制定程序流程圖(程序結(jié)構(gòu)和程序功能)。制定程序流程圖(程序結(jié)構(gòu)和程序功能)。 四四. .編制源程序:編制源程序: 1. 1.合理分配存儲(chǔ)器單元和合理分配存儲(chǔ)器單元和I/OI/O接口的地址;接口的地址; 2. 2.按功能設(shè)計(jì)程序,明確

2、按功能設(shè)計(jì)程序,明確各程序之間的相互關(guān)系;各程序之間的相互關(guān)系; 3. 3.用注釋行說(shuō)明程序,便用注釋行說(shuō)明程序,便于閱讀、修改和調(diào)試。于閱讀、修改和調(diào)試。開(kāi)始開(kāi)始結(jié)束結(jié)束 YN? 五五. .程序調(diào)試。程序調(diào)試。4 (1)程序的執(zhí)行時(shí)間。程序的執(zhí)行時(shí)間。 (2)程序所占用存儲(chǔ)器的字節(jié)數(shù)。程序所占用存儲(chǔ)器的字節(jié)數(shù)。 (3)程序的邏輯性、可讀性。程序的邏輯性、可讀性。 (4)程序的兼容性、可擴(kuò)展性。程序的兼容性、可擴(kuò)展性。 (5)程序的可靠性。程序的可靠性。 5 l順序程序又稱簡(jiǎn)單程序,程序走向只有一條路徑。順序程序又稱簡(jiǎn)單程序,程序走向只有一條路徑。例例1 1 雙字節(jié)負(fù)數(shù)變補(bǔ)程序雙字節(jié)負(fù)數(shù)變補(bǔ)程

3、序( (設(shè)數(shù)據(jù)設(shè)數(shù)據(jù)在在R4R5R4R5中中) ): MOV A MOV A,R5R5 ;取低字節(jié)取低字節(jié) CPL A CPL A ADD A ADD A,#1#1 ;低字節(jié)變補(bǔ)低字節(jié)變補(bǔ) MOV R5 MOV R5,A A MOV A MOV A,R4R4 ;取高字節(jié)取高字節(jié) CPL A CPL A ADDCADDC A A,#0#0 ;高字節(jié)變補(bǔ)高字節(jié)變補(bǔ) SETB ACC.7SETB ACC.7 MOV R4 MOV R4,A A SJMP $ SJMP $6例例2 2 壓縮式壓縮式BCDBCD碼分解成為單字節(jié)碼分解成為單字節(jié)BCDBCD碼。碼。lMOVMOV R0 R0,#40H#40

4、H ;設(shè)指針設(shè)指針lMOVMOV A A,R0R0;取一個(gè)字節(jié)取一個(gè)字節(jié)lMOVMOV R2 R2,A A;暫存暫存R2R2lANLANL A A,#0FH#0FH;高半字節(jié)清高半字節(jié)清0 0lINCINC R0 R0lMOVMOV R0 R0,A A ;保存?zhèn)€位數(shù)據(jù)保存?zhèn)€位數(shù)據(jù)lMOVMOV A A,R2R2lSWAP ASWAP A ;十位換到低半字節(jié)十位換到低半字節(jié)lANLANL A A,#0FH #0FH ;高半字節(jié)清高半字節(jié)清0 0lINCINC R0 R0lMOVMOV R0 R0,A A;保存十位數(shù)據(jù)保存十位數(shù)據(jù) 片內(nèi)片內(nèi) RAM 42H 0 十十 41H 0 個(gè)個(gè) 40H 十十

5、 個(gè)個(gè)7由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。一個(gè)判斷決策框,程序有兩條出路。一個(gè)判斷決策框,程序有兩條出路。條件滿足條件滿足?N影響條件影響條件Y處理段處理段例例1 1 求求R2R2中數(shù)據(jù)的補(bǔ)碼(正數(shù)不變,負(fù)中數(shù)據(jù)的補(bǔ)碼(正數(shù)不變,負(fù)數(shù)變補(bǔ))。數(shù)變補(bǔ))。 MOV AMOV A,R2R2 JNB ACC.7 JNB ACC.7,NEXT NEXT ;為正數(shù)?為正數(shù)? MOV CMOV C,ACC.7ACC.7 CPL ACPL A ;負(fù)數(shù)取反負(fù)數(shù)取反 INC A MOV ACC.7 MOV ACC.7,C C MOV R2 MO

6、V R2,A ANEXTNEXT: SJMP NEXT SJMP NEXT ;結(jié)束結(jié)束8多次使用條件轉(zhuǎn)移指令,形成兩個(gè)以上判斷框。多次使用條件轉(zhuǎn)移指令,形成兩個(gè)以上判斷框。例例5-75-7 設(shè)設(shè)3030H H單元存放的是單元存放的是一元二次方程一元二次方程axax2 2+bx+c=0+bx+c=0根根的判別式的判別式= =b b2 2-4ac-4ac的值。的值。解解: :值為有符號(hào)數(shù),有三值為有符號(hào)數(shù),有三種情況:大于零、等于零以種情況:大于零、等于零以及小于零。及小于零。 9程序:程序: ORG 1000H START: MOV A,30H ;值送值送A JNB ACC.7,YES ;非負(fù),

7、非負(fù),轉(zhuǎn)轉(zhuǎn)YES MOV 31H,#0;0轉(zhuǎn)轉(zhuǎn)TOW MOV 31H,#1;=0有相同實(shí)根有相同實(shí)根 SJMP FINISH TOW: MOV 31H,#2;有兩個(gè)不同實(shí)根有兩個(gè)不同實(shí)根FINISH: SJMP $10 l 根據(jù)前面程序運(yùn)行的結(jié)果,可以有根據(jù)前面程序運(yùn)行的結(jié)果,可以有N N種選擇,并種選擇,并能轉(zhuǎn)向其中任一處理程序。能轉(zhuǎn)向其中任一處理程序。 例例5-105-10 128128路分支程序。路分支程序。 功能:功能:根據(jù)根據(jù)R3R3的值的值(00(00H H7FH)7FH)轉(zhuǎn)到轉(zhuǎn)到128128個(gè)目的地址。個(gè)目的地址。 入口條件:入口條件:( (R3)=R3)=轉(zhuǎn)移目的地轉(zhuǎn)移目的地址

8、代號(hào)址代號(hào)(00(00H H7FH)7FH)。出口條件:出口條件:轉(zhuǎn)移到轉(zhuǎn)移到128128個(gè)分支個(gè)分支程序段入口。程序段入口。 PRGTBL: AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F 11參考程序:參考程序: 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指令占指令占 ;256256個(gè)字節(jié)個(gè)字節(jié)12例例5-115-11 256路分支程序。路分支

9、程序。 功能:功能:根據(jù)根據(jù)R3的值轉(zhuǎn)移到的值轉(zhuǎn)移到256個(gè)目的地址。個(gè)目的地址。入口條件:入口條件:( (R3)=R3)=轉(zhuǎn)移目的地址代號(hào)轉(zhuǎn)移目的地址代號(hào)(00(00H HFFH)FFH)。出口條件:出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。轉(zhuǎn)移到相應(yīng)分支處理程序入口。特點(diǎn):特點(diǎn): 1.入口地址為雙字節(jié)入口地址為雙字節(jié)(16位位),查表前應(yīng)先把,查表前應(yīng)先把R3內(nèi)容乘以內(nèi)容乘以2。當(dāng)。當(dāng)?shù)刂反?hào)為地址代號(hào)為00H7FH時(shí)時(shí)(前前128路分支路分支),乘,乘2不會(huì)產(chǎn)生進(jìn)位;當(dāng)不會(huì)產(chǎn)生進(jìn)位;當(dāng)?shù)刂反?hào)為地址代號(hào)為80HFFH時(shí),乘時(shí),乘2會(huì)產(chǎn)生進(jìn)位,此時(shí)應(yīng)使基址高會(huì)產(chǎn)生進(jìn)位,此時(shí)應(yīng)使基址高8位位內(nèi)容

10、(內(nèi)容(DPH)加加1。乘。乘2功能采用指令功能采用指令RLC A完成。完成。 2. 程序采用程序采用“堆棧技術(shù)堆棧技術(shù)”,巧妙地將查表得到的分支入口地,巧妙地將查表得到的分支入口地址址低低8位和高位和高8位分別壓入堆棧,然后執(zhí)行位分別壓入堆棧,然后執(zhí)行RET指令把棧頂內(nèi)容指令把棧頂內(nèi)容(分分支入口地址支入口地址)彈入彈入PC實(shí)現(xiàn)轉(zhuǎn)移。實(shí)現(xiàn)轉(zhuǎn)移。 13 JMP256: MOV A,R3 ;取取N值值 MOV DPTR,#PRGTBL ;指向分支地址表首址指向分支地址表首址 CLR C RLC A ;(A)2 JNC LOWl28 ;是前是前128個(gè)分支程序,則轉(zhuǎn)移個(gè)分支程序,則轉(zhuǎn)移 INC D

11、PH ;否則基址加否則基址加256LOWl28: MOV TEMP,A ;暫存暫存A INC A ;指向地址數(shù)據(jù)的低指向地址數(shù)據(jù)的低8位位 MOVC A,A+DPTR ;查表,讀分支地址低查表,讀分支地址低8位位 PUSH ACC ;地址數(shù)據(jù)的低地址數(shù)據(jù)的低8位入棧位入棧 MOV A,TEMP ;恢復(fù)恢復(fù)A,指向地址數(shù)據(jù)的高指向地址數(shù)據(jù)的高8位位 MOVC A,A+DPTR ;查表,讀分支地址高查表,讀分支地址高8位位 PUSH ACC ;地址數(shù)據(jù)的高地址數(shù)據(jù)的高8位入棧位入棧 RET ;分支地址彈入分支地址彈入PC,實(shí)現(xiàn)轉(zhuǎn)移實(shí)現(xiàn)轉(zhuǎn)移PRGTBL: DW ROUT00 ;高高8 8位在低地址,

12、低位在低地址,低8 8位在高地址位在高地址 14例例5-125-12 大于大于256路分支轉(zhuǎn)移程序。路分支轉(zhuǎn)移程序。( (不講不講) ) 功能:功能:根據(jù)入口條件轉(zhuǎn)向根據(jù)入口條件轉(zhuǎn)向n個(gè)分支處理程序。個(gè)分支處理程序。入口條件:入口條件:(R7R6)=轉(zhuǎn)移目的地址代號(hào)。轉(zhuǎn)移目的地址代號(hào)。出口條件:出口條件:轉(zhuǎn)移到相應(yīng)分支處理程序入口。轉(zhuǎn)移到相應(yīng)分支處理程序入口。特點(diǎn):特點(diǎn): 程序散轉(zhuǎn)表中有程序散轉(zhuǎn)表中有N N條條LJMPLJMP指令,每條指令,每條LJMPLJMP指令占指令占3 3個(gè)個(gè)字節(jié),因此要按入口條件將地址代號(hào)乘以字節(jié),因此要按入口條件將地址代號(hào)乘以3 3,并將乘積的,并將乘積的高字節(jié)加上

13、(高字節(jié)加上(DPHDPH)、)、將乘積的低字節(jié)送將乘積的低字節(jié)送A(A(變址寄存器變址寄存器) )。15參考程序:參考程序:JMPN:MOV DPTR,#PRGTBL ;DPTR指向散轉(zhuǎn)表首址指向散轉(zhuǎn)表首址 MOV A,R7 ;取地址代號(hào)取地址代號(hào)高高8位位 MOV B,#3 MUL AB ;3 ADD A,DPH MOV DPH,A ;修改指針高修改指針高8位位 MOV A,R6 ;取地址代號(hào)低取地址代號(hào)低8位位 MOV B,#3 ;3 MUL AB XCH A,B ;交換乘積的高低字節(jié)交換乘積的高低字節(jié) ADD A,DPH ;乘積的高字節(jié)加上乘積的高字節(jié)加上(DPH) MOV DPH,A

14、 XCH A,B ;乘積的低字節(jié)送乘積的低字節(jié)送A JMP A+DPTR ;散轉(zhuǎn)散轉(zhuǎn) PRGTBL: LJMP ROUT0 16包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。循環(huán)控制循環(huán)控制 ?循環(huán)工作循環(huán)工作循環(huán)結(jié)束循環(huán)結(jié)束循環(huán)初始化循環(huán)初始化YN一初始化部分一初始化部分(循環(huán)準(zhǔn)備工作)(循環(huán)準(zhǔn)備工作) 如:清結(jié)果單元、設(shè)指針、設(shè)循如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。環(huán)控制變量初值等。二循環(huán)體二循環(huán)體 循環(huán)工作部分:需多次重復(fù)處理的工作。循環(huán)工作部分:需多次重復(fù)處理的工作。 循環(huán)控制部分:修改指針和循環(huán)控制變循環(huán)控制部分:修改指針和循環(huán)

15、控制變量;檢測(cè)循環(huán)條件(滿足循環(huán)條件則繼續(xù)循量;檢測(cè)循環(huán)條件(滿足循環(huán)條件則繼續(xù)循環(huán),否則退出循環(huán))。環(huán),否則退出循環(huán))。三三. . 結(jié)束部分結(jié)束部分(處理和保存循環(huán)結(jié)果)(處理和保存循環(huán)結(jié)果) 循環(huán)次數(shù)的控制:循環(huán)次數(shù)的控制:循環(huán)次數(shù)已知(用計(jì)數(shù)器控制);循環(huán)循環(huán)次數(shù)已知(用計(jì)數(shù)器控制);循環(huán)次數(shù)未知(按給定條件控制)。次數(shù)未知(按給定條件控制)。 允許允許0 0次循環(huán)的循環(huán)結(jié)構(gòu)應(yīng)在循環(huán)工作次循環(huán)的循環(huán)結(jié)構(gòu)應(yīng)在循環(huán)工作之前之前檢測(cè)循環(huán)條件。檢測(cè)循環(huán)條件。17簡(jiǎn)單循環(huán)結(jié)構(gòu):簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。循環(huán)體中不套循環(huán)。l例:例:求求n n個(gè)單字節(jié)數(shù)據(jù)的累加和。設(shè)數(shù)據(jù)在個(gè)單字節(jié)數(shù)據(jù)的累加和。

16、設(shè)數(shù)據(jù)在4343H H起始單元,起始單元,數(shù)據(jù)串長(zhǎng)度數(shù)據(jù)串長(zhǎng)度n n在在4242H H單元,累加和不超過(guò)單元,累加和不超過(guò)2 2個(gè)字節(jié)。個(gè)字節(jié)。 片片內(nèi)內(nèi) RAM Xn 43H X1 42H n 41H SUMH 40H SUML SUMSUM: MOVMOVR0R0,#42H#42H;設(shè)指針設(shè)指針MOVMOVA A,R0R0MOVMOVR2R2,A A ;循環(huán)計(jì)數(shù)器循環(huán)計(jì)數(shù)器n nCLRCLRA A ;結(jié)果單元清結(jié)果單元清0 0(A(A放和放和) )MOVMOVR3R3,A A (R3(R3放相加后進(jìn)位位放相加后進(jìn)位位) )ADD1ADD1:INCINCR0R0 ;修改指針修改指針ADDAD

17、DA A,R0 R0 ;累加累加JNC NEXTJNC NEXT ;處理進(jìn)位處理進(jìn)位INCINCR3R3 ;有進(jìn)位,高字節(jié)加有進(jìn)位,高字節(jié)加1 1NEXT:NEXT: DJNZ DJNZ R2,ADD1 R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完循環(huán)控制:數(shù)據(jù)是否加完?MOVMOV40H40H,A A ;循環(huán)結(jié)束,保存結(jié)果循環(huán)結(jié)束,保存結(jié)果MOVMOV41H41H,R3R3RETRET18一一. .計(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

18、 7位加上位加上奇校驗(yàn)奇校驗(yàn)。設(shè)數(shù)據(jù)存放在。設(shè)數(shù)據(jù)存放在片外片外RAMRAM的的21012101H H起始單元,數(shù)據(jù)長(zhǎng)度在起始單元,數(shù)據(jù)長(zhǎng)度在21002100H H單元。單元。 片片外外 RAM 2102H 01101000 2101H 00101101 2100H n MOV DPTRMOV DPTR,#2100H#2100HMOVX AMOVX A,DPTRDPTRMOV R2MOV R2,A A;(R2(R2放數(shù)據(jù)長(zhǎng)度放數(shù)據(jù)長(zhǎng)度) )NEXTNEXT:INC DPTRINC DPTRMOVX AMOVX A,DPTRDPTRORL AORL A,#80H#80H;(最高位置;(最高位置1

19、 1)JNB PJNB P,PASSPASS;判斷是否需要加奇校驗(yàn)判斷是否需要加奇校驗(yàn)(P(P為為ACCACC奇偶標(biāo)志)奇偶標(biāo)志)MOVX DPTRMOVX DPTR,A A ;需要,則加奇校驗(yàn)需要,則加奇校驗(yàn)PASSPASS:DJNZ R2DJNZ R2,NEXTNEXTDONEDONE:SJMP DONESJMP DONE19二二. .特征控制:特征控制:設(shè)定設(shè)定循環(huán)結(jié)束標(biāo)志循環(huán)結(jié)束標(biāo)志實(shí)現(xiàn)循環(huán)控制。實(shí)現(xiàn)循環(huán)控制。例:例:找正數(shù)表最小值。正數(shù)表存在片外找正數(shù)表最小值。正數(shù)表存在片外RAMRAM中以中以LISTLIST開(kāi)始的單開(kāi)始的單元,以元,以-1-1(補(bǔ)碼為補(bǔ)碼為0 0FFHFFH)為結(jié)

20、束標(biāo)志。為結(jié)束標(biāo)志。STARTSTART:MOVMOVDPTRDPTR,#LIST#LIST ;數(shù)表首地址數(shù)表首地址 MOVMOVB B,#127#127 ;預(yù)置最小值預(yù)置最小值127127(8(8位正數(shù)的最大值位正數(shù)的最大值) )NEXTNEXT: MOVX A MOVX A,DPTRDPTR ;取數(shù)取數(shù) INC INCDPTRDPTR ;修改指針修改指針 CJNE ACJNE A,#0FFH#0FFH,NEXT1NEXT1;是否為數(shù)表結(jié)尾?是否為數(shù)表結(jié)尾? SJMP DONESJMP DONE ;是結(jié)尾,則循環(huán)結(jié)束是結(jié)尾,則循環(huán)結(jié)束NEXT1NEXT1:CJNE ACJNE A,B B,N

21、EXT2NEXT2 ;與與預(yù)置最小值預(yù)置最小值127127比較比較 NEXT2NEXT2:JNCJNCNEXT NEXT ;Cy=1,Cy=1,則則ABAB;Cy=0,Cy=0,則則ABAB MOV MOVB B,A A ;保存小值(把小的數(shù)放到保存小值(把小的數(shù)放到B B里,里, SJMP NEXT SJMP NEXT ;作為下一次的被比較數(shù))作為下一次的被比較數(shù))DONEDONE: SJMP DONE SJMP DONE20 循環(huán)體中套循環(huán),以雙重循環(huán)使用居多。循環(huán)體中套循環(huán),以雙重循環(huán)使用居多。 例:例:將片內(nèi)將片內(nèi)RAMRAM中一串單字節(jié)無(wú)符號(hào)數(shù)按升序排序。(不講)中一串單字節(jié)無(wú)符號(hào)數(shù)

22、按升序排序。(不講) 具體做法:具體做法:每次取相鄰單元的兩個(gè)數(shù)比較,決定是否需要交每次取相鄰單元的兩個(gè)數(shù)比較,決定是否需要交換數(shù)據(jù)位置。換數(shù)據(jù)位置。 第一次循環(huán),比較第一次循環(huán),比較N-1N-1次,取到數(shù)據(jù)表中最大值。次,取到數(shù)據(jù)表中最大值。 第二次循環(huán),比較第二次循環(huán),比較N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循環(huán):比較一次,排序結(jié)束。次循環(huán):比較一次,排序結(jié)束。片片 內(nèi)內(nèi) RAMM AX5241T TA AB B3內(nèi)循環(huán)控制內(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)初始化開(kāi)始開(kāi)始外循環(huán)初始化外循環(huán)初始化21SORTS

23、ORT: MOV MOV A A,#(N-1)#(N-1) MOVMOV R4 R4,A A;外循環(huán)次數(shù)外循環(huán)次數(shù)LOOP1LOOP1: MOV MOV A A,R4R4 MOV MOV R3 R3,A A;內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù) MOVMOV R0 R0,#TAB#TAB;設(shè)數(shù)據(jù)指針設(shè)數(shù)據(jù)指針LOOP2LOOP2: MOV MOV A A,R0R0;取相鄰兩數(shù)取相鄰兩數(shù) MOVMOV B B,A A INC INC R0 R0 MOV MOV A A,R0R0 CJNE A CJNE A,B B,L1L1;比較比較L1L1: JNC JNC UNEX UNEX;ABAB,不交換不交換 DECD

24、EC R0 R0;否則交換數(shù)據(jù)否則交換數(shù)據(jù) XCHXCH A A,R0R0 INC INC R0 R0 MOV MOV R0 R0,A AUNEXUNEX: DJNZ R3 DJNZ R3,LOOP2LOOP2;內(nèi)循環(huán)結(jié)束??jī)?nèi)循環(huán)結(jié)束? DJNZ R4DJNZ R4,LOOP1LOOP1;外循環(huán)結(jié)束?外循環(huán)結(jié)束? RETRET(R3)1=0 ?B (R0) A ( R0 + 1 )循環(huán)結(jié)束循環(huán)結(jié)束外循環(huán)次數(shù)外循環(huán)次數(shù)R4(R4)1=0 ?內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù)R3表首表首TABR0開(kāi)始開(kāi)始A BA B?( (R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N22軟件延時(shí)

25、程序:軟件延時(shí)程序:用循環(huán)程序使指令重復(fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。用循環(huán)程序使指令重復(fù)多次執(zhí)行,實(shí)現(xiàn)軟件延時(shí)。例:例:試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。試計(jì)算延時(shí)程序的執(zhí)行時(shí)間。源程序源程序 指令周期指令周期(M) (M) 指令執(zhí)行次數(shù)指令執(zhí)行次數(shù)DELAYDELAY:MOV R6MOV R6,#64H#64H1 1 I1 I1: MOV R7 MOV R7,#0FFH #0FFH 1 1 I2 I2: DJNZ R7 DJNZ R7,I2I22 2 DJNZ R6 DJNZ R6,I1 2I1 2 RET RET 2 2延時(shí)時(shí)間計(jì)算(設(shè)振蕩頻率為延時(shí)時(shí)間計(jì)算(設(shè)振蕩頻率為12MHz12MHz):(1(

26、11+11+1100+2100+2100100255+2255+2100+2100+21)1)M = 51.3msM = 51.3ms1 11001001001002552551001001 123編寫循環(huán)程序應(yīng)注意的問(wèn)題:編寫循環(huán)程序應(yīng)注意的問(wèn)題: 1)進(jìn)入循環(huán)體前應(yīng)注意安排循環(huán)初始化,合理設(shè)置初始化變)進(jìn)入循環(huán)體前應(yīng)注意安排循環(huán)初始化,合理設(shè)置初始化變 量;量; 2)循環(huán)體只能執(zhí)行有限次,無(wú)限執(zhí)行的為)循環(huán)體只能執(zhí)行有限次,無(wú)限執(zhí)行的為“死循環(huán)死循環(huán)”; 3)不能破壞或修改循環(huán)體,避免從循環(huán)體外直接跳轉(zhuǎn)到循環(huán)體)不能破壞或修改循環(huán)體,避免從循環(huán)體外直接跳轉(zhuǎn)到循環(huán)體 內(nèi);內(nèi); 4)內(nèi)外循環(huán)間

27、不應(yīng)相互交叉;)內(nèi)外循環(huán)間不應(yīng)相互交叉; 5)循環(huán)體內(nèi)可直接轉(zhuǎn)到循環(huán)體外或外層循環(huán)中,實(shí)現(xiàn)一個(gè)循環(huán))循環(huán)體內(nèi)可直接轉(zhuǎn)到循環(huán)體外或外層循環(huán)中,實(shí)現(xiàn)一個(gè)循環(huán) 由多個(gè)條件控制結(jié)束的結(jié)構(gòu)。由多個(gè)條件控制結(jié)束的結(jié)構(gòu)。 24例例5-19 一個(gè)十六進(jìn)制數(shù)存放在一個(gè)十六進(jìn)制數(shù)存放在HEX單元的低四位,將其轉(zhuǎn)換成單元的低四位,將其轉(zhuǎn)換成ASCII碼并送回碼并送回HEX單元。單元。 程序:程序: ORG 0100H HEX EQU 30H HEXASC:MOV A , ,HEX ANL A,#00001111B ADD A,#3 ;變址調(diào)整變址調(diào)整 MOVC A, A+PC MOV HEX,A ;2 2字節(jié)字節(jié)

28、RET ;1 1字節(jié)字節(jié) ASCTAB:DB 30H,3lH,32H,33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H END 25 子程序:能完成某項(xiàng)特定功能的獨(dú)立程序段,可被子程序:能完成某項(xiàng)特定功能的獨(dú)立程序段,可被反復(fù)調(diào)用。反復(fù)調(diào)用。一、子程序結(jié)構(gòu)一、子程序結(jié)構(gòu) 1 1)子程序入口用標(biāo)號(hào)作為子程序名。)子程序入口用標(biāo)號(hào)作為子程序名。 2 2)調(diào)用子程序之前設(shè)置好堆棧。)調(diào)用子程序之前設(shè)置好堆棧。 3 3)用返回指令)用返回指令RETRET結(jié)束子程序,并保證堆棧棧頂為調(diào)用程序結(jié)束子程序,并保證堆棧棧頂為調(diào)用程序的返回

29、地址。的返回地址。 4 4)子程序嵌套時(shí)須考慮堆棧容量。)子程序嵌套時(shí)須考慮堆棧容量。 5 5)提供足夠的調(diào)用信息)提供足夠的調(diào)用信息: : 如:如:子程序名子程序名、子程序功能子程序功能、入口參數(shù)入口參數(shù)和和出口參數(shù)出口參數(shù)、子、子程序占用的程序占用的硬件資源硬件資源、子程序中調(diào)用的、子程序中調(diào)用的其他子程序名其他子程序名等。等。二、參數(shù)傳遞二、參數(shù)傳遞入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):子程序返回給調(diào)用程序的結(jié)果參數(shù)。出口參數(shù):子程序返回給調(diào)用程序的結(jié)果參數(shù)。 1)1)子程序無(wú)須傳遞參數(shù)子程序無(wú)須傳遞參數(shù) 例例5-23

30、5-23 27 例例5-24 5-24 雙字節(jié)負(fù)數(shù)求補(bǔ)子程序雙字節(jié)負(fù)數(shù)求補(bǔ)子程序CPLDCPLD。 入口參數(shù):入口參數(shù):(R7R6)=16位數(shù)。位數(shù)。 出口參數(shù):出口參數(shù):(R7R6)=求補(bǔ)后的求補(bǔ)后的16位數(shù)。位數(shù)。 CPLD: MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 SETB ACC.7 MOV R7,A RET 2)2)用累加器或工作寄存器傳遞參數(shù)用累加器或工作寄存器傳遞參數(shù) 28例例5-255-25 n字節(jié)負(fù)數(shù)求補(bǔ)子程序。字節(jié)負(fù)數(shù)求補(bǔ)子程序。入口參數(shù):入口參數(shù):(R0)=待待求補(bǔ)數(shù)的低字節(jié)指針,求補(bǔ)數(shù)的低字節(jié)指

31、針,(R7)=n-1。出口參數(shù):出口參數(shù):(R0)=求補(bǔ)后的指針(高字節(jié))。求補(bǔ)后的指針(高字節(jié))。 CPLN: MOV A,R0 CPL A ADD A,#1 MOV R0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT MOV A,R0 SETB ACC.7 MOV R0,A RET3)3)通過(guò)操作數(shù)地址傳遞參數(shù)通過(guò)操作數(shù)地址傳遞參數(shù) 29例例5-265-26 在在HEXHEX單元存放兩個(gè)十六進(jìn)制數(shù)單元存放兩個(gè)十六進(jìn)制數(shù)(8(8位位) ),將它們,將它們分別轉(zhuǎn)換成分別轉(zhuǎn)換成ASCASC碼并存入碼并存入ASCASC和和ASC+1ASC+1單元。單元。解解 需進(jìn)行兩次轉(zhuǎn)換,可

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論