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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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一一. .分析問題,建立數(shù)學(xué)模型。分析問題,建立數(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.用注釋行說明程序,便用注釋行說明程序,便于閱讀、修改和調(diào)試。于閱讀、修改和調(diào)試。開始開始結(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 $6lMOVMOV R0 R0,#40H#40H ;設(shè)指針設(shè)指針lMOVMOV A A,R0R0;取一個(gè)字節(jié)取一個(gè)字節(jié)lMOVMOV

4、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 十十 個(gè)個(gè)7一個(gè)判斷決策框,程序有兩條出路。一個(gè)判斷決策框,程序有兩條出路。條件滿足條件滿足

5、?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 MOV R2,A ANEXTNEXT: SJMP NEXT SJMP NEXT ;結(jié)束結(jié)束8例例5-75-7 設(shè)設(shè)3030H H單元存放的是單元存放的是一元二次方程一元二次方程axax2 2+bx

6、+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ù),非負(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 $10l 根據(jù)前面程序運(yùn)行的結(jié)果,可以有根據(jù)前面程序運(yùn)行的結(jié)果,

7、可以有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)移目的地址代號(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

8、 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路分支程序。路分支程序。 功能:功能:根據(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)

9、: 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)容(內(nèi)容(DPH)加加1。乘。乘2功能采用指令功能采用指令RLC A完成。完成。 2. 程序采用程序采用“堆棧技術(shù)堆棧技術(shù)”,巧妙地將查表得到的分支入口地,巧妙地將查表得到的分支入口地址址低低8位和高位和高8位分別壓入堆棧,然后執(zhí)行位分別壓入堆棧,然后執(zhí)行RET指令把棧頂內(nèi)容指令

10、把棧頂內(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 DPH ;否則基址加否則基址加256LOWl28: MOV TEMP,A ;暫存暫存A INC A ;指向地址數(shù)據(jù)的低指向地址數(shù)據(jù)的低8位位 MOVC A,A+DPTR ;查表,讀分支地址低查表,讀分支地址低8位位 PUSH ACC ;地址數(shù)據(jù)的低地址數(shù)據(jù)的低8位入棧位入棧 MO

11、V 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位在低地址,低位在低地址,低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)移目的地

12、址代號(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é)加上(高字節(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

13、 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 XCH A,B ;乘積的低字節(jié)送乘積的低字節(jié)送A JMP A+DPTR ;散轉(zhuǎn)散轉(zhuǎn) PRGTBL: LJMP ROUT0 16循環(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é)果單元、

14、設(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)控制變量;檢測(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次

15、循環(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)條件。17l例:例:求求n n個(gè)單字節(jié)數(shù)據(jù)的累加和。設(shè)數(shù)據(jù)在個(gè)單字節(jié)數(shù)據(jù)的累加和。設(shè)數(shù)據(jù)在4343H H起始單元,起始單元,數(shù)據(jù)串長(zhǎng)度數(shù)據(jù)串長(zhǎng)度n n在在4242H H單元,累加和不超過單元,累加和不超過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

16、(A(A放和放和) )MOVMOVR3R3,A A (R3(R3放相加后進(jìn)位位放相加后進(jìn)位位) )ADD1ADD1:INCINCR0R0 ;修改指針修改指針ADDADDA 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ù)器

17、控制循環(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ù)長(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ù)

18、長(zhǎng)度) )NEXTNEXT:INC DPTRINC DPTRMOVX AMOVX A,DPTRDPTRORL AORL A,#80H#80H;(最高位置;(最高位置1 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ù)表存在片外找正數(shù)表最小值。正數(shù)表存在片外RAMRAM中以中以LISTLIS

19、T開始的單開始的單元,以元,以-1-1(補(bǔ)碼為補(bǔ)碼為0 0FFHFFH)為結(jié)束標(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é)束

20、是結(jié)尾,則循環(huán)結(jié)束NEXT1NEXT1:CJNE ACJNE A,B B,NEXT2NEXT2 ;與與預(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)將

21、片內(nèi)RAMRAM中一串單字節(jié)無符號(hào)數(shù)按升序排序。(不講)中一串單字節(jié)無符號(hào)數(shù)按升序排序。(不講) 具體做法:具體做法:每次取相鄰單元的兩個(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)控

22、制 ?內(nèi)循環(huán)初始化內(nèi)循環(huán)初始化開始開始外循環(huán)初始化外循環(huán)初始化21SORTSORT: 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;比較比較L1

23、L1: JNC JNC UNEX UNEX;ABAB,不交換不交換 DECDEC 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開始開始A BA B?( (R0)(R0

24、+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N22例:例:試計(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(11+11+1100+2100+2100

25、100255+2255+2100+2100+21)1)M = 51.3msM = 51.3ms1 11001001001002552551001001 123編寫循環(huán)程序應(yīng)注意的問題:編寫循環(huán)程序應(yīng)注意的問題: 1)進(jìn)入循環(huán)體前應(yīng)注意安排循環(huán)初始化,合理設(shè)置初始化變)進(jìn)入循環(huán)體前應(yīng)注意安排循環(huán)初始化,合理設(shè)置初始化變 量;量; 2)循環(huán)體只能執(zhí)行有限次,無限執(zhí)行的為)循環(huán)體只能執(zhí)行有限次,無限執(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)間不應(yīng)相互交叉;)內(nèi)外循環(huán)間不應(yīng)相互交叉;

26、 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é) RET ;1 1字節(jié)字節(jié) ASCTAB:

27、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)用程序的返回地址。的返回地址。 4 4)子程序嵌套時(shí)

28、須考慮堆棧容量。)子程序嵌套時(shí)須考慮堆棧容量。 5 5)提供足夠的調(diào)用信息)提供足夠的調(diào)用信息: : 如:如:子程序名子程序名、子程序功能子程序功能、入口參數(shù)入口參數(shù)和和出口參數(shù)出口參數(shù)、子、子程序占用的程序占用的硬件資源硬件資源、子程序中調(diào)用的、子程序中調(diào)用的其他子程序名其他子程序名等。等。入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):子程序返回給調(diào)用程序的結(jié)果參數(shù)。出口參數(shù):子程序返回給調(diào)用程序的結(jié)果參數(shù)。 1)1)子程序無須傳遞參數(shù)子程序無須傳遞參數(shù) 例例5-23 5-23 27 例例5-24 5-24 雙字節(jié)負(fù)數(shù)求補(bǔ)子程序雙字

29、節(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é)指針,(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)通過操作數(shù)地址傳遞參數(shù)通過操作數(shù)地址傳遞參數(shù) 29例例5-265-26 在在HEXHEX單元存放兩個(gè)十六進(jìn)制數(shù)單元存放兩個(gè)十六進(jìn)制數(shù)(8(8位位) ),將它們,將它們分別轉(zhuǎn)換成分別轉(zhuǎn)換成ASCASC碼并存入碼并

溫馨提示

  • 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)論