《單片機(jī)原理與應(yīng)用》-胡輝-電子教案-4917第4章.ppt_第1頁(yè)
《單片機(jī)原理與應(yīng)用》-胡輝-電子教案-4917第4章.ppt_第2頁(yè)
《單片機(jī)原理與應(yīng)用》-胡輝-電子教案-4917第4章.ppt_第3頁(yè)
《單片機(jī)原理與應(yīng)用》-胡輝-電子教案-4917第4章.ppt_第4頁(yè)
《單片機(jī)原理與應(yīng)用》-胡輝-電子教案-4917第4章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩57頁(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、第章 程序設(shè)計(jì),雖然單片機(jī)的每條指令能使計(jì)算機(jī)完成一種特定的操作。但要完成某一特定的任務(wù)還需要將這些指令按工作要求有序組合為一段完整的程序。程序?qū)嶋H上是一系列計(jì)算機(jī)指令的有序集合。我們把利用計(jì)算機(jī)的指令系統(tǒng)來(lái)合理地編寫出解決某個(gè)問題的程序的過程,稱之為程序設(shè)計(jì)。,4.1 簡(jiǎn)單匯編語(yǔ)言程序設(shè)計(jì),編制程序的步驟,1.任務(wù)分析(硬件、軟件系統(tǒng)分析) 2.確定算法和工作步驟; 3.程序總體設(shè)計(jì)和流程圖繪制,關(guān)于流程圖符號(hào): 開始、結(jié)束-圓角矩形 工作任務(wù)-矩形 判斷分支-菱形 程序流向- 程序連接-,開始,結(jié)束,4. 分配內(nèi)存,確定程序與數(shù)據(jù)區(qū)存放地址; 5. 編寫源程序; 6. 調(diào)試、修改,最終確定

2、程序。,方法技巧,1. 模塊化設(shè)計(jì)(按功能分:顯示、打印、輸入、發(fā)送等) 2. 盡量采用循環(huán)及子程序結(jié)構(gòu)(節(jié)省內(nèi)存),匯編語(yǔ)言的規(guī)范,匯編語(yǔ)言源程序由以下兩種指令構(gòu)成 匯編語(yǔ)句(指令語(yǔ)句) 偽指令(指示性語(yǔ)句) 匯編語(yǔ)句的格式: 標(biāo)號(hào):操作碼操作數(shù);注釋 數(shù)據(jù)表示形式: 二進(jìn)制(B)、十六進(jìn)制(H)、十進(jìn)制(D或省略)、ASCII碼(以單引號(hào)標(biāo)識(shí)),3.偽指令:控制匯編用的特殊指令,這些指令不屬 于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。,4.1.1 分支程序,分支程序可根據(jù)要求無(wú)條件或條件地改變程序執(zhí)行流向。編寫分支程序主要在于正確使用轉(zhuǎn)移指令。分支程序有:?jiǎn)畏种ЫY(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)(散轉(zhuǎn)),分支

3、程序,分支程序可根據(jù)要求無(wú)條件或條件地改變程序執(zhí)行流向。編寫分支程序主要在于正確使用轉(zhuǎn)移指令。分支程序有:?jiǎn)畏种ЫY(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)(散轉(zhuǎn)),1比較數(shù)的大小,入口條件:兩個(gè)帶符號(hào)數(shù)分別存在內(nèi)部RAM 30H和31H單元中,試比較它們的大小,將較大的數(shù)存入32H單元中。,XY為正: OV0,則XY OV=1,則XY XY為負(fù): OV0,則XY OV1,則XY,ORG0100H MOVA,30H;取初值 CLRC SUBBA,31H;XY JZDZ1;X=Y? JC EBB JBOV,EB1;XY0, OV=1,XY AJMPDZ1;XY0, OV=0,XY EBB:JBOV,DZ1;XY

4、0, OV=1,XY EB1:MOVA,31H;XY AJMPJS0 DZ1:MOVA,30H;XY JS0:MOV32H,A END,例:設(shè)變量x以補(bǔ)碼形式存放在片內(nèi)RAM 30H單元中,變量y與x的關(guān)系是:,編程根據(jù)x的值求y值并放回原單元。,2函數(shù)運(yùn)算,ORG 0000H START:MOV A,30H JZ NEXT ;x=0,轉(zhuǎn)移 ANL A,#80H ;保留符號(hào)位 JZ ED ;x0,轉(zhuǎn)移 MOV A,#05H ;x0,不轉(zhuǎn)移 ADD A,30H MOV 30H,A SJMP ED NEXT:MOV 30H,#20H ED:SJMP $,START:MOV DPTR,#TAB MO

5、V A,R7 ADD A,R7 ;R72A MOV R3,A ;暫存R3 MOVC A,A+DPTR ;取高位地址 XCH A ,R3 INC A MOVC A,A+DPTR ;取低位地址 MOV DPL,A MOV DPH,R3 ;轉(zhuǎn)移地址送入DPTR CLR A JMP A+DPTR TAB: DW P0 DW P1 DW PN,例:根據(jù)R7的內(nèi)容,轉(zhuǎn)至對(duì)應(yīng)的分支程序。設(shè)R7的內(nèi)容為0N,對(duì)應(yīng)的處理程序地址分別為P0P7,4.3.3 循環(huán)程序,循環(huán)程序一般由: 初始化部分 循環(huán)體部分-處理部分、修改部分、控制部分 結(jié)束部分 其結(jié)構(gòu)一般有兩種: 先進(jìn)入處理部分,再控制循環(huán) 至少執(zhí)行一次循環(huán)體

6、 先控制循環(huán),再進(jìn)入處理部分 循環(huán)體是否執(zhí)行,取決于判斷結(jié)果。,開始,設(shè)置循環(huán)初值,循環(huán)處理,循環(huán)修改,結(jié)束處理,結(jié)束,循環(huán)結(jié)束?,N,Y,Y,N,循環(huán)控制的一般方法: 循環(huán)次數(shù)已知 利用循環(huán)次數(shù)控制 循環(huán)次數(shù)未知 利用關(guān)鍵字控制 利用“邏輯尺” 根據(jù)“邏輯尺”的內(nèi)容,進(jìn)行控制。,例:統(tǒng)計(jì)數(shù)據(jù)塊的長(zhǎng)度,入口條件:內(nèi)部RAM 30H開始的存儲(chǔ)區(qū)有若干個(gè)數(shù)據(jù),最后一個(gè)數(shù)據(jù)為字符FFH,結(jié)果存入40H單元。 ORG 0100H MAIN:MOV R1,#30H;R1作為地址指針 CLRA;累加器A作為計(jì)數(shù)器 LOOP:CJNER1,#0FFH,NEXT;與數(shù)據(jù)FF比較,不等轉(zhuǎn)移 SJMPJSH1;找

7、到結(jié)束符號(hào),結(jié)束循環(huán) NEXT:INC A;計(jì)數(shù)器加1 INCR1;指針加l SJMP L00P;循環(huán) JSHl:INCA ;再加入l個(gè)字符 MOV40H,A;存結(jié)果 END,4.1.3 延時(shí)程序,10.1s延時(shí)程序(晶振為12M) ORG 0100H MOV R2,#200 LOOP: MOVR3,#250 DJNZR3,$ DJNZR2,LOOP RET 由于采用12M晶振,機(jī)器周期為1s,DJNZ的指令周期為2,整個(gè)程序的執(zhí)行時(shí)間為25020021s100000s0.1s,21s延時(shí)程序(晶振為12M),ORG0100H MOVR1,#10 LOOP1:MOVR2,#200 LOOP:M

8、OV R3,#250 DJNZR3,$ DJNZR2,LOOP DJNZR1,LOOP1 RET,例: 50ms延時(shí)子程序。設(shè)晶振頻率為12MHz,則機(jī)器周期為1us。,DEL: MOV R7,#200 ;1MC DEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC,延時(shí)時(shí)間:t=1+200(1+1+2*123)+2+2 50000us=50ms,4.2 MCS-51常用子程序,4.2.1 代碼轉(zhuǎn)換類程序設(shè)計(jì) 4.2.2 查表程序設(shè)計(jì) 4.2.3 定點(diǎn)數(shù)運(yùn)算子程序 4.2.4 浮點(diǎn)數(shù)運(yùn)算子程序,子程序問

9、題,子程序設(shè)計(jì)時(shí)注意事項(xiàng): 1. 給子程序賦一個(gè)名字。實(shí)際為入口地址代號(hào)。 2. 要能正確傳遞參數(shù): 入口條件:子程序中要處理的數(shù)據(jù)如何給予。 出口條件:子程序處理結(jié)果如何存放。 (寄存器、存儲(chǔ)器、堆棧方式) 3. 保護(hù)與恢復(fù)現(xiàn)場(chǎng): 保護(hù)現(xiàn)場(chǎng):壓棧指令PUSH 恢復(fù)現(xiàn)場(chǎng):彈出指令POP 4. 子程序可以嵌套,4.2.1 代碼轉(zhuǎn)換類程序設(shè)計(jì),1單字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換成雙字節(jié)ASCII碼,表4-1 十六進(jìn)制數(shù)與ASCII碼之間的關(guān)系,入口條件:待轉(zhuǎn)換的單字節(jié)十六進(jìn)制數(shù)在寄存器R2中。 出口:高四位的ASCII碼在A中,低四位的ASCII碼在B中。,ORG0100H MOVA,R2 MOVB,A ;暫

10、存待轉(zhuǎn)換的單字節(jié)十六進(jìn)制數(shù) LCALLMS1 ;轉(zhuǎn)換低四位 XCHA,B;存放低四位的ASCII碼 SWAPA ;準(zhǔn)備轉(zhuǎn)換高四位 LCALLMS1 ;轉(zhuǎn)換高四位 SJMP$ MS1:ANLA,#0FH;將累加器的低四位轉(zhuǎn)換成 ASCII 碼 ADDA,#90H DA A ADDCA,#40H DA A RET,將多位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,設(shè)R0指向十六進(jìn)制數(shù)低位, R2存放字節(jié)數(shù),轉(zhuǎn)換后R1指向ASCII碼高位。,HTASC: MOV A,R0 ;取十六進(jìn)制數(shù) ANL A,#0FH ;取低四位 ADD A,#15 ;偏移修正 MOVC A,A+PC ;查表得ASCII碼 MOV R1,

11、A ;保存 INC R1 MOV A,R0 ;取十六進(jìn)制數(shù)高四位 SWAP A ; ANL A,#0F0H ADD A,#06H ;偏移修正 MOVC A,A+PC ;查表 MOV R1,A ;保存 INC R0 ;指向下一單元 INC R1 DJNZ R2,HTASC RET ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H,2.ASCII碼轉(zhuǎn)換成十六進(jìn)制數(shù),入口條件:待轉(zhuǎn)換的 ASCII 碼在R2中。 出口:轉(zhuǎn)換后的十六進(jìn)制數(shù)在R3中。 ORG 0100H MOV A,R2 SUBB A

12、,#30H CLR C JNB ACC.4,M1 SUBB A,#7 M1:MOV R3,A SJMP $ END,3.十六進(jìn)制整數(shù)轉(zhuǎn)換成單字節(jié)碼整數(shù),入口條件:待轉(zhuǎn)換的單字節(jié)十六進(jìn)制整數(shù)在R2中。 出口:轉(zhuǎn)換后的碼整數(shù)(十位和個(gè)位)在R5中,百位在R3中。 MOVA,R2 HBCD:MOVB,#100;分離出百位,存放在 R3中 DIVAB MOVR3,A MOVA,#10;余數(shù)繼續(xù)分離十位和個(gè)位 XCHA,B DIVAB SWAPA ORLA,B ;將十位和個(gè)位拼裝成碼 MOVR5,A SJMP$ END,4雙字節(jié)十六進(jìn)制整數(shù)轉(zhuǎn)換成雙字節(jié)碼整數(shù),入口條件:待轉(zhuǎn)換的雙字節(jié)十六進(jìn)制整數(shù)在R6、

13、R7中。出口:轉(zhuǎn)換后的三字節(jié)碼整數(shù)在R3、R4、R5中。 ORG0100HHB2:CLRA;碼初始化 MOVR3,A MOVR4,A MOVR5,A MOV R2,#10H;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)HB3:MOVA,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到 CY 中 RLCA MOV R7,A MOVA,R6 RLCA,MOVR6,A MOVA,R5;碼帶進(jìn)位自身相加,相當(dāng)于乘 ADDCA,R5 DAA ;十進(jìn)制調(diào)整 MOVR5,A MOVA,R4 ADDC A,R4 DAA MOVR4,A MOVA,R3 ADDCA,R3 MOVR3,A;雙字節(jié)十六進(jìn)制數(shù)的萬(wàn)位數(shù)不超過,不用調(diào)整 DJNZR2,HB

14、3;判斷16位處理完? SJMP$ END,5雙字節(jié)碼整數(shù)轉(zhuǎn)換成雙字節(jié)十六進(jìn)制整數(shù),入口條件:待轉(zhuǎn)換的雙字節(jié)碼整數(shù)在R2、R3中。 出口:轉(zhuǎn)換后的雙字節(jié)十六進(jìn)制整數(shù)仍在R2、R3中。 ORG 0100H BH2:MOV A,R3;將低字節(jié)轉(zhuǎn)換成十六進(jìn)制 LCALL BCD1 MOV R3,A MOV A,R2;將高字節(jié)轉(zhuǎn)換成十六進(jìn)制 LCALL BCD1 MOV B,#100;擴(kuò)大一百倍 MUL AB ADD A,R3;和低字節(jié)按十六進(jìn)制相加 MOV R3,A CLR A,ADDCA,B MOV R2,A SJMP $ BCD1:MOVB,#10H;分離十位和個(gè)位 DIV AB MOV R4,

15、B;暫存?zhèn)€位 MOV B,#10;將十位轉(zhuǎn)換成十六進(jìn)制 MUL AB ADDA,R4;十六進(jìn)制加上個(gè)位 RET END,4.2.2 查表程序設(shè)計(jì),MOVCA,A+DPTR MOVCA,A+PC 1查表求ASCII碼 入口條件:R0低四位有一個(gè)十六進(jìn)制數(shù)(0F)。 出口:將查表找出的相應(yīng)ASCII碼并送回R0中。,ORG0100H MOVA,R0 ANLA,#0FH;屏蔽高4位 ADDA,#03H;查表指令PC值與表格PC值相差3字節(jié) MOVCA,A+PC;查表 MOVR0,A;存結(jié)果 SJMP$ ASCTAB:DB0,1,2,3,4,5,6,7 DB8,9,A,B,C,D,E,F(xiàn),4.2.3

16、定點(diǎn)數(shù)運(yùn)算子程序,1多字節(jié)碼加法 入口條件:字節(jié)數(shù)在R7中,被加數(shù)在30H起始單元中,加數(shù)在40H起始單元中。 出口:和在30H起始單元中,最高位進(jìn)位在CY中。 ORG 0100H MOV R7,#03H MOV R0,#30H MOV R1,#40H MOV A,R7 ;取字節(jié)數(shù)至 R2 中 MOV R2,A ADD A,R0;初始化數(shù)據(jù)指針,MOVR0,A MOVA,R2 ADDA,R1 MOVR1,A CLR C BB1:DECR0;調(diào)整數(shù)據(jù)指針 DECR1 MOV A,R0 ADDC A,R1;按字節(jié)相加 DAA;十進(jìn)制調(diào)整 MOV R0,A;和存回 R0 中 DJNZ R2,BB1;

17、處理完所有字節(jié) END,2多字節(jié)碼減法,入口條件:字節(jié)數(shù)在 R7 中,被減數(shù)在R0 中,減數(shù)在 R1 中。 出口:差在 R0 中,最高位借位在CY中。 ORG 0100H BCDB:LCALL MN1 ;減數(shù) R1 十進(jìn)制取補(bǔ) LCALL BCDA ;按多字節(jié)碼加法處理 CPL C;將補(bǔ)碼加法的進(jìn)位標(biāo)志轉(zhuǎn)換成借位標(biāo)志 MOV F0,C LCALL MN1 ;恢復(fù)減數(shù) R1 的原始值 MOV C,F(xiàn)0;恢復(fù)借位標(biāo)志 RET,MN1:MOVA,R0 ;R1 十進(jìn)制取補(bǔ)子程序入口 XCHA,R1;交換指針 XCHA,R0 LCALLNEG;通過 R0 實(shí)現(xiàn) R1 取補(bǔ) MOVA,R0 XCHA,R1

18、 ;換回指針 XCHA,R0 RET BCDA:MOV A,R7 ;取字節(jié)數(shù)至 R2 中 MOVR2,A ADDA,R0 ;初始化數(shù)據(jù)指針 MOVR0,A MOVA,R2,ADDA,R1 MOVR1,A CLRC BCD1:DECR0;調(diào)整數(shù)據(jù)指針 DECR1 MOVA,R0 ADDCA,R1 ;按字節(jié)相加 DAA;十進(jìn)制調(diào)整 MOVR0,A;和存回 R0 中 DJNZR2,BCD1;處理完所有字節(jié) RET NEG:MOVA,R7;BCD碼取補(bǔ)子程序 DECA,MOVR2,A MOVA,R0 MOVR3,A NEG0: CLRC MOVA,#99H SUBBA,R0 ;按字節(jié)十進(jìn)制取補(bǔ) MOV

19、R0,A;存回 R0 中 INCR0 ;調(diào)整數(shù)據(jù)指針 DJNZR2,NEG0 ;處理完( R2 )字節(jié) MOVA,#9AH ;最低字節(jié)單獨(dú)取補(bǔ) SUBB A,R0 MOVR0,A MOVA,R3 ;恢復(fù)指針 MOV R0,A RET,4雙字節(jié)二進(jìn)制無(wú)符號(hào)數(shù)乘法子程序 入口條件:被乘數(shù)在R2、R3 中,乘數(shù)在R6、R7中。 出口:乘積在 R2 、 R3 、 R4 、 R5 中。 ORG0100H MULD:MOVA,R3;計(jì)算 R3 乘 R7 MOVB,R7 MULAB MOVR4,B ;暫存部分積 MOVR5,A MOVA,R3;計(jì)算 R3 乘 R6 MOVB,R6 MULAB ADDA,R4

20、;累加部分積 MOVR4,A,CLRA ADDCA,B MOVR3,A MOVA,R2 ;計(jì)算 R2 乘 R7 MOVB,R7 MULAB ADDA,R4;累加部分積 MOVR4,A MOVA,R3 ADDCA,B MOVR3,A CLRA RLCA,XCHA,R2 ;計(jì)算 R2 乘 R6 MOVB,R6 MULAB ADDA,R3 ;累加部分積 MOVR3,A MOVA,R2 ADDCA,B MOVR2,A RET,6雙字節(jié)二進(jìn)制無(wú)符號(hào)數(shù)除法子程序 入口條件:被除數(shù)在 R2 、 R3 、 R4 、 R5 中,除數(shù)在 R6 、 R7 中。 出口: OV=0 時(shí),雙字節(jié)商在 R2 、 R3 中,

21、 OV=1 時(shí)溢出。 ORG 0100H DIVD: CLR C;比較被除數(shù)和除數(shù) MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1 SETB OV ;溢出 RET,DVD1:MOVB,#10H;計(jì)算雙字節(jié)商 DVD2:CLRC;部分商和余數(shù)同時(shí)左移一位 MOVA,R5 RLCA MOVR5,A MOVA,R4 RLCA MOVR4,A MOVA,R3 RLCA MOVR3,A XCHA,R2 RLCA,XCHA,R2 MOVF0,C ;保存溢出位 CLRC SUBBA,R7;計(jì)算( R2R3 R6R7 ) MOVR1,A MOVA,R2 SUBBA,

22、R6 ANLC,/F0;結(jié)果判斷 JCDVD3 MOVR2,A;夠減,存放新的余數(shù) MOVA,R1 MOVR3,A INCR5;商的低位置一,DVD3:DJNZB,DVD2 ;計(jì)算完十六位商( R4R5 ) MOVA,R4;將商移到 R2R3 中 MOVR2,A MOVA,R5 MOVR3,A CLROV;設(shè)立成功標(biāo)志 RET,4.2.4 浮點(diǎn)數(shù)運(yùn)算子程序,1浮點(diǎn)數(shù)的表示 (1)二進(jìn)制浮點(diǎn)操作數(shù) 用三個(gè)字節(jié)表示,第一個(gè)字節(jié)的最高位為數(shù)符,其余七位為階碼(補(bǔ)碼形式),第二字節(jié)為尾數(shù)的高字節(jié),第三字節(jié)為尾數(shù)的低字節(jié),尾數(shù)用雙字節(jié)純小數(shù)(原碼)來(lái)表示。當(dāng)尾數(shù)的最高位為時(shí),便稱為規(guī)格化浮點(diǎn)數(shù),簡(jiǎn)稱操作

23、數(shù),(2)十進(jìn)制浮點(diǎn)操作數(shù) 用三個(gè)字節(jié)表示,第一個(gè)字節(jié)的最高位為數(shù)符,用來(lái)表示正負(fù)數(shù)(0表示正數(shù),1表示負(fù)數(shù))其余七位為階碼(二進(jìn)制補(bǔ)碼形式),第二字節(jié)為尾數(shù)的高字節(jié),第三字節(jié)為尾數(shù)的低字節(jié),尾數(shù)用雙字節(jié)BCD碼純小數(shù)(原碼)來(lái)表示。當(dāng)十進(jìn)制數(shù)的絕對(duì)值大于時(shí),階碼就等于整數(shù)部分的位數(shù)。 例如:156.6 的階碼是03H,156.6 的階碼是 83H ; 當(dāng)十進(jìn)制數(shù)的絕對(duì)值小于 1 時(shí),階碼就等于 80H 減去小數(shù)點(diǎn)后面零的個(gè)數(shù)。 例如 :0.00362的階碼是 7EH ,0.00362 的階碼是 0FEH 。 例如:有一個(gè)十進(jìn)制浮點(diǎn)操作數(shù)存放在30H、31H、32H中,數(shù)值是0.07315,即

24、0.7315 乘以10 的1 次方,則階碼為7FH,若加上數(shù)符(30H)=0FFH,31H=73H,(32H)=15H 。,(3)運(yùn)算精度 單次定點(diǎn)運(yùn)算精度為結(jié)果最低位的當(dāng)量值;單次二進(jìn)制浮點(diǎn)算術(shù)運(yùn)算的精度優(yōu)于十萬(wàn)分之三;單次二進(jìn)制浮點(diǎn)超越函數(shù)運(yùn)算的精度優(yōu)于萬(wàn)分之一;BCD碼浮點(diǎn)數(shù)本身的精度比較低(萬(wàn)分之一到千分之一),不宜作為運(yùn)算的操作數(shù),僅用于輸入或輸出時(shí)的數(shù)制轉(zhuǎn)換。不管那種數(shù)據(jù)格式,隨著連續(xù)運(yùn)算的次數(shù)增加,精度都會(huì)下降。,2浮點(diǎn)數(shù)加減法子程序 入口條件:被加數(shù)在 R0 中,加數(shù)在 R1 中。被減數(shù)在 R0 中,減數(shù)在 R1 中。 當(dāng)F0=0時(shí),程序作浮點(diǎn)數(shù)加法運(yùn)算;當(dāng)F0=1時(shí),程序作浮

25、點(diǎn)數(shù)減法運(yùn)算。 出口: OV=0 時(shí),和(差)仍在 R0 中, OV=1 時(shí),溢出。,ORG0100H FADD:CLRF0 ;設(shè)立加法標(biāo)志 SJMPAS ;計(jì)算代數(shù)和 FSUB:SETBF0 ;設(shè)立減法標(biāo)志 AS: LCALLMVR1 ;計(jì)算代數(shù)和。先將 R1 傳送到第二工作區(qū) MOVC,F(xiàn)0 ;用加減標(biāo)志來(lái)校正第二操作數(shù)的有效符號(hào) RRCA XRLA,R1 MOVC,ACC.7ASN:MOV1EH,C ;將第二操作數(shù)的有效符號(hào)存入位 1EH 中 XRLA,R0 ;與第一操作數(shù)的符號(hào)比較 RLCAMOVF0,C ;保存比較結(jié)果 LCALLMVR0;將 R0 傳送到第一工作區(qū)中 LCALLAS

26、1 ;在工作寄存器中完成代數(shù)運(yùn)算MOV0:INCR0 ;將結(jié)果傳回到 R0 中的子程序入口 INCR0,MOV A,R4 ;傳回尾數(shù)的低字節(jié) MOVR0,A DECR0 MOVA,R3 ;傳回尾數(shù)的高字節(jié) MOVR0,A DECR0 MOVA,R2 ;取結(jié)果的階碼 MOVC,1FH ;取結(jié)果的數(shù)符 MOVACC.7,C ;拼入階碼中 MOVR0,A CLRACC.7 ;不考慮數(shù)符 CLROV ;清除溢出標(biāo)志 CJNEA,#3FH,MV01 ;階碼是否上溢? SETBOV ;設(shè)立溢出標(biāo)志MV01:MOVA,R0 ;取出帶數(shù)符的階碼 RETMVR0:MOVA,R0 ;將 R0 傳送到第一工作區(qū)中的

27、子程序 MOVC,ACC.7 ;將數(shù)符保存在位 1FH 中 MOV 1FH,C,MOVC,ACC.6 ;將階碼擴(kuò)充為補(bǔ)碼 MOVACC.7,C MOV R2,A ;存放在 R2 中 INC R0 MOV A,R0 ;將尾數(shù)高字節(jié)存放在 R3 中 MOV R3,A INC R0 MOV A,R0 ;將尾數(shù)低字節(jié)存放在 R4 中 MOV R4,A DEC R0 ;恢復(fù)數(shù)據(jù)指針 DEC R0 RETMVR1: MOV A,R1 ;將 R1 傳送到第二工作區(qū)中的子程序 MOV C,ACC.7 ;將數(shù)符保存在位 1EH 中 MOV 1EH,C MOV C,ACC.6 ;將階碼擴(kuò)充為補(bǔ)碼 MOV ACC.

28、7,C MOV R5,A ;存放在 R5 中 INC R1,MOV A,R1 ;將尾數(shù)高字節(jié)存放在 R6 中MOV R6,A INC R1 MOV A,R1 ;將尾數(shù)低字節(jié)存放在 R7 中 MOV R7,A DEC R1 ;恢復(fù)數(shù)據(jù)指針 DEC R1 RETAS1: MOV A,R6 ;讀取第二操作數(shù)尾數(shù)高字節(jié) ORL A,R7 JZ AS2 ;第二操作數(shù)為零,不必運(yùn)算 MOV A,R3 ;讀取第一操作數(shù)尾數(shù)高字節(jié) ORL A,R4 JNZ EQ MOV A,R6 ;第一操作數(shù)為零,結(jié)果以第二操 作數(shù)為準(zhǔn),MOV R3,A MOV A,R7 MOVR4,A MOV A,R5 MOV R2,A MOV C,1EH MOV 1FH,C AS2: RETEQ: MOV A,R2 ;對(duì)階,比較兩個(gè)操作數(shù)的階碼 XRL A,R5 JZ AS4 ;階碼相同,對(duì)階結(jié)束 JB ACC.7,EQ3 ;階符互異 MOV A,R2 ;階符相同,比較大小 CLR C SUBB A,R5 JC EQ4EQ2: CLRC ;第二操作數(shù)右規(guī)一次 MOVA,R6 ;尾數(shù)縮小一半,RRCA MOVR6,A MOVA,R7 RRCA MOVR7,A INCR5 ;階碼加一 ORLA,R6 ;尾數(shù)為零否? JNZEQ ;尾數(shù)不為零,繼續(xù)對(duì)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論