PIC單片機應(yīng)用開發(fā)典型模塊-第八章程序_第1頁
PIC單片機應(yīng)用開發(fā)典型模塊-第八章程序_第2頁
PIC單片機應(yīng)用開發(fā)典型模塊-第八章程序_第3頁
PIC單片機應(yīng)用開發(fā)典型模塊-第八章程序_第4頁
PIC單片機應(yīng)用開發(fā)典型模塊-第八章程序_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、(1)1616位定點數(shù)加、減法程序LISTp=16f877INCLUDEp16f877.incACCALOEQU20;存放加數(shù)或減數(shù)低8位ACCAHIEQU21 ;存放加數(shù)或減數(shù)高8位ACCBLOEQU23 ;存放被加數(shù)或被減數(shù)低8位ACCBHIEQU24 ;存放被加數(shù)或被減數(shù)高8位ORG0X0000STARTGOTOMAIN;*雙字節(jié)減法子程序,入口地址ACCB-ACCA,出口地址ACCB*D_subCALLNEG_A ;求ACCA的補碼;雙字節(jié)加法子程序,入口地址ACCB+ACCA,出口地址ACCBD_adddMOOVFACCCALLO,00 ;AACCBB和ACCCA低低半字節(jié)節(jié)相加AD

2、DDWFACCCBLLOBBTFSSCSTAATUSS, C ;有進進位否?INNCFACCCBHHI;有,ACCCB高字字節(jié)加11,再加AACCAAHIMOVVFACCCAHII,0;ACCCA、AACCBB高半字字節(jié)相加加ADDDWFFAACCBBHIRETTURNN;子程序序返回;ACCCA取補補子程序序NEG_ACCOMFFAACCAALO;ACCCALOO取反加加1IINCFFAACCAALOBTFFSCSTTATUUS,ZZ;低8位位有進位位嗎?DECCFACCCAHII;有,AACCAAHI減減1,再再取反COMMFACCCAHII;否則AACCAAHI直直接取反反REETURR

3、N ;子程程序返回回(2)116116位定定點數(shù)乘乘法程序序LISTTp=16ff8777INNCLUUDEp166f8777.iincACCCALOOEEQU200;存放乘乘數(shù)低88位AACCAAHIEQQU21;存放乘乘數(shù)高88位AACCBBLOEQQU23;存放被被乘數(shù)低低8位和和乘積第第1623位位ACCCBHHIEQUU224;存放被被乘數(shù)高高8位和和乘積第第2431位位ACCCCLLOEQUU226;存放乘乘積低88位AACCCCHIEQQU27;存放乘乘積高88位AACCDDLOEQQU28;臨時寄寄存器ACCCDHIIEEQU299;臨時寄寄存器TEMMPEQUU22A;臨時寄

4、寄存器SIGGNEQUU22B;存放乘乘積的符符號OORG0X000000STAARTGOTTOMAIINORGG0XX01000D_mpyyCAALLS_SIGGN;求取乘乘積的符符號,并并對負(fù)數(shù)數(shù)取補CAALLSEETUPP;調(diào)用子子程序,將ACCCB的的值送AACCDDINNCFTEMMPCCLRFFAACCCCHI;清ACCCCCLRRFACCCCLOOMLOOOPBCFFSSTATTUS,C;清進位位位RRRFACCCDHHI;ACCCD右移移RRRFACCCDLOOBTTFSCCSSTATTUS,C;判斷是是否需要要相加CALLLD_aadd;加乘數(shù)數(shù)至ACCCB,見加法法程序BC

5、FFSSTATTUS,C;清進位位位RRRFACCCBHHI;右移部部分乘積積RRRFACCCBLOORRRFACCCCHIIRRRFACCCCLOODEECFSSZTEMMP;乘法完完成否?GOOTOMLLOOPP;否,繼繼續(xù)求乘乘積BBTFSSSSIGGN,77;是,確確定乘積積的符號號GOOTOOVVER;為正,乘法結(jié)結(jié)束CCOMFFAACCCCLO;為負(fù),乘積取取補IINCFFACCCCLOOBTTFSCCSSTATTUS,ZDDECFFACCCCHIICOOMFAACCCCHIBTFFSCSSTATTUS,ZNEEG_BBDEECFAACCBBLOCCOMFFACCCBLOOBTTF

6、SCCSTAATUSS,ZDECCFACCCBHHICCOMFFACCCBHIIOVEERRRETUURN;子程序序返回SETUUPMMOVLLW15;初始化化TEMMP寄存存器MOOVWFFTTEMPPMOOVFACCCBHHI,00;ACCCB送AACCDDMOOVWFFACCCDHHIMMOVFFAACCBBLO,0MMOVWWFACCCDLOOCLLRFACCCBHHI;清ACCCBCLRRFACCCBLOOREETURRN;子程序序返回S_SIIGNMOVVFACCCAHII,0;ACCCAHII異或AACCBBHI,結(jié)果送送SIGGN單元元XOORWFFAACCBBHI,0MMOV

7、WWFSIGGNBBTFSSSACCCBHII,7;ACCCB為負(fù)負(fù)嗎?GOTTOCHEEK_AA;否,檢檢查ACCCACALLLNNEG_B;是,求求取ACCCB絕絕對值CCHEKK_ABTFFSCACCCAHHI,77;ACCCA為負(fù)負(fù)嗎?CALLLNEGG_A;ACCCA為負(fù)負(fù),求取取ACCCA絕對對值,RETTURNN;ACCCA和AACCBB均為正正,返回回(3)116116位定定點數(shù)除除法程序LISTTp=16ff8777INCCLUDDEpp16f8777.inncACCCALLOEEQU200;存放除除數(shù)低88位ACCCAHHIEQUU221;存放除除數(shù)高88位ACCCBLLO

8、EQUU222;存放被被除數(shù)和和商的低低8位AACCBBHIEQQU23;存放被被除數(shù)和和商的高高8位AACCCCLOEQQU24;存放余余數(shù)低88位ACCCCHHIEQUU225;存放余余數(shù)高88位ACCCDLLOEQUU226;臨時寄寄存器AACCDDHIEQQU27;臨時寄寄存器TTEMPPEEQU288;臨時寄寄存器SSIGNNEEQU299;存放商商的符號號ORGG0XX00000STARRTGGOTOOMAAINORG0X001000D_ddivCALLLS_SSIGNN;確定商商的符號號,并將將負(fù)數(shù)取取補CAALLSETTUP;初始化化TEMMP,將將被除數(shù)數(shù)移至AACCDDIN

9、NCFTEMMPCCLRFFACCCCHHI;清余數(shù)數(shù)寄存器器CLLRFACCCCLOODLOOOPBCFFSTTATUUS,CC;清進位位位RRLFACCCDLOO;被除數(shù)數(shù)、余數(shù)數(shù)左移11位RRLFACCCDHIIRLLFAACCCCLORLFFACCCCHHIMMOVFFACCCAHHI,00;ACCCCHII-ACCCAHHISSUBWWFAACCCCHI,0BBTFSSSSSTATTUS,Z;ACCCCHII=ACCCAHHI?GOTTONNOCHHKMMOVFFACCCALLO,00;是,AACCCCLO-ACCCALOOSUUBWFFACCCCLLO,00NOCCHKBTFFSS

10、STAATUSS,C;ACCCCAACCAA?GGOTOONOOGOMOVVFAACCAALO,0;是,余余數(shù)減除除數(shù)SSUBWWFAACCCCLOBTFFSSSTAATUSS,CDECCFAACCCCHIMOVVFAACCAAHI,0SSUBWWFAACCCCHIBSFFSTTATUUS,CC;置進位位位NOOGORLFFACCCBLLO;商左移移1位RLFFACCCBHHIDDECFFSZTEMMP;循環(huán)完完畢?GOTTODDLOOOPBBTFSSSSIGGN,77;是,確確定商的的符號GOTTODIVVOVEER;為正,除法結(jié)結(jié)束,跳跳轉(zhuǎn)到結(jié)結(jié)束行COMMFACCCCLOO;為負(fù),商和余

11、余數(shù)分別別取補INCCFACCCCLOOBTTFSCCSTTATUUS,ZZDEECFACCCCHHICCOMFFAACCCCHICALLLNNEG_B;見乘法法程序中中間NEEG_BBDIVVOVEERRRETUURN;子程序序返回S_SIIGNMOVVFACCCAHII,0;ACCCAHII異或AACCBBHI,結(jié)果送送SIGGN單元元XOORWFFAACCBBHI,0MMOVWWFSIGGNBBTFSSSACCCBHII,7;ACCCB為負(fù)負(fù)?GGOTOOCCHEKK_A;否,檢檢查ACCCACOMMFACCCBLOO;是,AACCBB取補INCCFACCCBLOOBTTFSCCSSTA

12、TTUS,ZDDECFFAACCBBHICOMMFACCCBHIICHEEK_AABTTFSCCAACCAAHI,7;ACCCA為負(fù)負(fù)?CCALLLNNEG_A;ACCCA為負(fù)負(fù),取補補(NEEG_AA子程序序請參見見;1616位位定點數(shù)數(shù)乘法子子程序NNEG_A)RETTURNN;ACCCA和AACCBB均為負(fù)負(fù),返回回(4)浮浮點數(shù)加加減法程程序LISTTp=116f8877INCCLUDDEp116f8877.inccACCCALLOEQQU20;存放加加數(shù)或減減數(shù)的尾尾數(shù)AACCAAHIEEQU21EXPPAEQUU222;存放加加數(shù)或減減數(shù)階碼碼ACCCBLLOEQUU223;存放被

13、被加數(shù)或或被減數(shù)數(shù)尾數(shù)以以及和或或差A(yù)ACCBBHIEEQU244EXXPBEEQU25;存放被被加數(shù)或或被減數(shù)數(shù)階碼ACCCCLOOEEQU266;臨時寄寄存器ACCCCHIIEQUU227;臨時寄寄存器ACCCDLOOEEQU288;臨時寄寄存器ACCCDHIIEQUU229;臨時寄寄存器TEMMPEQQU2A;臨時寄寄存器TEMMP1EEQU300;臨時寄寄存器TIMMESEEQU311;臨時寄寄存器ORGG0XX0000STAARTGOTTOMAIINOORG00X01100F_suubCCALLLNEGG_A;求ACCCA的的補碼,將減法法轉(zhuǎn)換為為補碼加加法F_adddCAALLSU

14、UBADDJ;調(diào)子程程序判斷斷EXPPB和EEXPAA的大小小BTTFSCCSTAATUSS,Z;參與運運算的兩兩個數(shù)階階碼相等等?GGOTOOPADDD;是,求求尾數(shù)的的和BBTFSSCSTTATUUS,CC;EXPPBEEXPAA?CCALLLF_sswapp;是,AACCBB與ACCCA互互換MMOVFFEXPPA,00;否,求求取兩者者的差值值SUUBWFFEXPPBSCCLOOOPCCALLLSHFFTSRR;ACCCB右移移規(guī)格化化INNCFSSZEXXPB;EXPPBEEXPAA?GOOTOSSCLOOOP;否,繼繼續(xù)右移移MOOVFEEXPAA,0;是,存存和(差差)的階階碼M

15、MOVWWFEXPPBPAADDMOVVFACCCAHHI,00;ACCCAHII或ACCCBHHIIIORWWFACCCBHHI,00MOOVWFFSIGGN;存于SSIGNN寄存器器MOOVFACCCBHHI,00;暫存AACCBBHIMOOVWFFEEXPAACAALLDD_addd;尾數(shù)相相加BBTFSSSSIIGN,7;ACCCA和AACCBB有負(fù)數(shù)數(shù)?BTTFSCCACCCBHII,7;否,把把和的最最高位和和次高位位同時進進位?GOTTOADDD2;否,轉(zhuǎn)轉(zhuǎn)ADDD2BBTFSSSACCCAHII,7;ACCCA為負(fù)負(fù)嗎?GOTTOADDD3;ACCCA和AACCBB不同時時為負(fù)

16、,轉(zhuǎn)ADDD3BTFFSSEXXPA,7;是,AACCBB為負(fù)嗎嗎?GGOTOOAADD33BSFFSTAATUSS,C;ACCCA和AACCBB同為負(fù)負(fù),帶負(fù)負(fù)號右移移RRRFACCCBHHIRRRFAACCBBLOINCCFEXXPBAADD33CLLRFAACCCCHI;和(差差)規(guī)格格化CCLRFFACCCCLOOCAALLFF_noormRETTURNN;子程序序返回AADD22BCCFSSTATTUS,C;最高位位次高位位不同時時進位,ACCCB右移移INNCFEEXPBBGOOTOSSHFTTRSHHFTSSRBCFFSTTATUUS,CC;ACCCB帶符符號右移移子程序序BTT

17、FSCCACCCBHII,7BSFFSTTATUUS,CCSHFFTRRRRFACCCBHIIRRRFAACCBBLORETTURNN;子程序序返回F_swwapMOVVFACCCAHHI,00;ACCCAHII、ACCCBHHI互換換MOOVWFFTEMMPMMOVFFACCCBHII,0MOVVWFAACCAAHIMOVVFTEEMP,0MMOVWWFACCCBHHIMMOVFFACCCALOO,0;ACCCALOO、ACCCBLLO互換換MOOVWFFTEMMPMMOVFFACCCBLOO,0MOVVWFAACCAALOMOVVFTEEMP,0MMOVWWFACCCBLLOMMOVFFE

18、XPPA,00;EXPPA、EEXPBB互換MOVVWFTTEMPPMOOVFEEXPBB,0MOVVWFEEXPAAMOOVFTTEMPP,0MOVVWFEEXPBBRRETUURNSUBAADJMOOVFEXXPA,0;EXPPA異或或EXPPB,結(jié)結(jié)果送CC_DIIVXXORWWFEXPPB,00MOOVWFFCC_DIIVMMOVFFEEXPAA,0;EXPPB-EEXPAASUUBWFFEEXPBB,0BTFFSSC_DIVV,7;EXPPA和EEXPBB同號?REETURRN;是,進進位位的的值真確確反映兩兩者的大大小,返返回BBTFSSSSTAATUSS,C;否,進進位位的的值取

19、反反GOOTOCHHANGGECBCFFSTAATUSS,CRETTURNNCHAANGEECBBSFSSTATTUS,CRRETUURNF_noormMOOVFAACCBBHI;ACCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETURRN;是,不不需規(guī)格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB為負(fù)?GGOTOOCC_noorm22C_norrm1BTFFSCAACCBBHI,6;為正。規(guī)格化化完畢?REETURRN;ACCCBHII.6=1,規(guī)規(guī)格化結(jié)結(jié)束CC

20、ALLLSHFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB減11GOOTOCC_noorm11;重新判判斷規(guī)格格化完畢畢否?CC_noorm22BTTFSSSAACCBBHI,6;ACCCB為負(fù)負(fù)。規(guī)格格化完畢畢否?RETTURNN;ACCCBHII.6=0,規(guī)規(guī)格化結(jié)結(jié)束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符號號DEECFEXXPB;EXPPB減11GOOTOC_norrm2;重新判判斷規(guī)格格化完畢畢否?SSHFTTSLBBCFSTAATUSS,CC;ACCCB左移移子程序序RRLFACCCCLOOR

21、LFFACCCCHHIRRLFACCCBLOORLLFAACCBBHIRETTURNN(5)浮浮點數(shù)乘乘法程序序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCALOOEQUU220;存放乘乘數(shù)尾數(shù)數(shù)ACCCAHHIEQQU21EXPPAEQUU222;存放乘乘數(shù)階碼碼ACCCBLLOEQQU23;存放被被乘數(shù)尾尾數(shù)和乘乘積高116位ACCCBHIIEQUU224EEXPBBEQUU225;存放被被乘數(shù)階階碼AACCCCLOEEQU266;存放乘乘積低116位ACCCCHIIEQUU227ACCCDLLOEQQU28;臨時寄寄存器ACCCDHIIEQUU22

22、9;臨時寄寄存器TEMMPEQQU2A;臨時寄寄存器TEMMP1EEQU300;臨時寄寄存器TIMMESEEQU311;臨時寄寄存器SIGGNEQQU2B;存放乘乘積符號號COOUNTTEQUU22F;臨時寄寄存器ACCCEHIIEEQU30;臨時寄寄存器ACCCELOOEEQU31;臨時寄寄存器ORGG0X000000STAARTGOTTOMAIINOORG00X01100F_mppyCCALLLS_SSIGNN;求取乘乘積的符符號,并并對負(fù)數(shù)數(shù)取補CAALLSSETUUP;調(diào)用子子程序?qū)CCCB的值值送ACCCDCLRRFACCCCHHI;清ACCCCCLRRFACCCCLLOMLLO

23、OPPBCCFSSTATTUS,C;清進位位位RRRFACCCDHII;ACCCD右移移RRRFAACCDDLOBTFFSCSSTATTUS,C;判斷是是否需要要相加CALLLD_addd;加乘數(shù)數(shù)至ACCCBBCFFSTTATUUS,CC;清進位位位RRRFACCCBHII;右移部部分乘積積RRRFAACCBBLORRFFACCCCHHIRRRFACCCCLOODEECFSSZTEEMP;乘法完完成否?GOOTOMMLOOOP;否,繼繼續(xù)循環(huán)環(huán)MOOVFEEXPAA,0;是,乘乘數(shù)與被被乘數(shù)階階碼相加加,得積積的階碼碼ADDDWFFEEXPBBMOOVFAACCBBHI;ACCCBHII=0

24、?BTTFSSSSTAATUSS,ZGOTTOFIINUPP;否,轉(zhuǎn)轉(zhuǎn)FINNUPMOVVFACCCBLLO;ACCCB00?BBTFSSSSTTATUUS,ZGGOTOOSHFFT088;否,只只有ACCCBHHI=00,轉(zhuǎn)SSHFTT08MOVVFACCCCHHI,00;ACCCB=00,將乘乘積左移移15位位MOOVWFFACCCBHIIMOOVFAACCCCLO,0MMOVWWFACCCBLLOBBCFSTAATUSS,CRRFFACCCBHHIRRRFACCCBLOOMOOVLWW.155;乘積階階碼減115(十十進制數(shù)數(shù))SSUBWWFEXXPBGOTTOFIINUPPSHFFT0

25、88MOOVFAACCBBLO,0;只有AACCBBHI0,乘乘積左移移7位MOVVWFAACCBBHIMOVVFACCCCHHI,00MOOVWFFACCCBLOOBCCFSSTATTUS,CRRRFACCCBHIIRRRFAACCBBLOMOVVLW.7;乘積階階碼減77SUUBWFFEXPPBFIINUPPCAALLFF_noorm;對乘積積進行規(guī)規(guī)格化BTFFSSSSIGNN,7;確定乘乘積的符符號GGOTOOOVEER;為正,乘法結(jié)結(jié)束CCOMFFACCCCLOO;為負(fù),乘積取取補IINCFFACCCCLOOBTTFSCCSTAATUSS,ZDECCFACCCCHHICCOMFFAC

26、CCCHIIBTTFSCCSTAATUSS,ZNNEG_BDDECFFACCCBLOOCOOMFAACCBBLOBTFFSCSSTATTUS,ZDDECFFACCCBHIICOOMFAACCBBHIOOVERRREETURRN;乘法結(jié)結(jié)束,子子程序返返回S_SIIGNMOVVFACCCAHHI,00;ACCCAHII異或AACCBBHI,結(jié)果送送SIGGNXXORWWFACCCBHHI,00MOOVWFFSSIGNNBTTFSSSACCCBHII,7;ACCCB為負(fù)負(fù)?GGOTOOCHEEK_AA;否,檢檢查ACCCACOMMFACCCBLLO;是,AACCBB取補INCCFACCCBLLOB

27、BTFSSCSTTATUUS,ZZDEECFAACCBBHICOMMFACCCBHHICHHEK_ABTFFSCAACCAAHI,7;ACCCA為負(fù)負(fù)?CCALLLNNEG_A;ACCCA取補補REETURRN;返回F_noormMMOVFFACCCBHII;ACCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETURRN;是,不不需規(guī)格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB為負(fù)?GGOTOOCC_noorm22C_nnormm1BBTFSSCACCCBHHI,6

28、6;為正。規(guī)格化化完畢?REETURRN;ACCCBHII.6=1,規(guī)規(guī)格化結(jié)結(jié)束CCALLLSHFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB減11GOOTOCC_noorm11;重新判判斷規(guī)格格化完畢畢否?CC_noorm22BTTFSSSAACCBBHI,6;ACCCB為負(fù)負(fù)。規(guī)格格化完畢畢否?RETTURNN;ACCCBHII.6=0,規(guī)規(guī)格化結(jié)結(jié)束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符號號DEECFEXXPB;EXPPB減11GOOTOC_norrm2;重新判判斷規(guī)格格化完畢畢否?SSHFTT

29、SLBCCFSSTATTUS,C;ACCCB左移移子程序序RRLFACCCCLOORLFFACCCCHHIRRLFACCCBLOORLLFAACCBBHIRETTURNN(6)浮浮點數(shù)除除法程序序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCALOOEQUU220;存放除除數(shù)的尾尾數(shù)AACCAAHIEEQU211EXXPAEQQU22;存放除除數(shù)的階階碼AACCBBLOEEQU233;存放被被除數(shù)的的尾數(shù)和和商的尾尾數(shù)AACCBBHIEEQU244EXXPBEEQU255;存放被被除數(shù)和和商的階階碼AACCCCLOEEQU266;存放余余數(shù)AACCCCHI

30、EEQU277ACCCDLLOEQQU28;臨時寄寄存器ACCCDHIIEQUU229;臨時寄寄存器TEMMPEQQU2A;臨時寄寄存器TEMMP1EEQU300;臨時寄寄存器TIMMESEEQU311;臨時寄寄存器SIGGNEQQU2B;存放商商的符號號COOUNTTEQUU22F;臨時寄寄存器ACCCEHIIEEQU30;臨時寄寄存器ACCCELOOEEQU31;臨時寄寄存器ORGG0X000000STAARTGOTTOMAIINOORG00X01100F_diivCCALLLS_SSIGNN;確定商商的符號號,并將將負(fù)數(shù)取取補CCLRFFAACCCCHI;初始化化ACCCC寄存存器CCL

31、RFFACCCCLOOCAALLFF_noorm;規(guī)格化化ACCCBCCLRFFACCCCLOOCLLRFAACCCCHICLRRFTIIMESSMOOVFAACCAAHI;除數(shù)為為零?BTFFSSSSTATTUS,ZGGOTOOFD00 ;否,求求商MMOVFFACCCALOOBTTFSCCSTAATUSS,ZRETTLW001;是,返返回FDD0CCALLLNEGG_A;除數(shù)取取補FDD1MMOVFFACCCBHII,0;ACCCBHII送ACCCDLLOMMOVWWFACCCDLLOCCALLLD_aadd11;被除數(shù)數(shù)尾數(shù)大大于除數(shù)數(shù)尾數(shù)?BTTFSSSSTAATUSS,CGOTTOF

32、DD2RRRF1BCFFSTTATUUS,CC;是,被被除數(shù)右右移規(guī)格格化,直直到小于于除數(shù)為為止RRRFACCCBHIIRRRFAACCBBLOINCCFTIIMESSRRRFAACCCCHIBCFFSTTATUUS,CCGOOTOFFD1FFD2CALLLDDDIV;否,調(diào)調(diào)用雙字字節(jié)除法法子程序序,求商商的尾數(shù)數(shù)MOOVFTTIMEES,00;根據(jù)右右移規(guī)格格化次數(shù)數(shù)調(diào)整AACCBB階碼ADDDWFEEXPBBMOOVFEEXPAA,0;求商的的階碼SUBBWFEEXPBBCAALLFF_noorm;商規(guī)格格化BBTFSSCSIIGN,7;商為負(fù)負(fù)?CCALLLNEGG_B;是,取取補C

33、CALLLNEGG_A;除數(shù)還還原RRETUURN;浮點數(shù)數(shù)除法完完成,返返回DDIVVMOOVLWW0X00F;初始化化ACCCDHIIMOOVWFFACCCDHIIDV11BCCFSSTATTUS,CRRLFACCCCLOO;左移商商RLLFAACCCCHIRLFFACCCBLLO;左移余余數(shù)RRLFACCCBHIIMOOVFSSTATTUS,0;暫存SSTATTUS寄寄存器MOVVWFAACCDDLOMOVVFACCCBHHI,00;ACCCBHII送TEEMP11MOOVWFFTEMMP1MOVVFACCCALLO,00;ACCCB-AACCAAADDDWFFACCCBLOO,0MOV

34、VWFTTEMPPBTTFSCCSTAATUSS,CIINCFFTEMMP1MOVVFACCCAHHI,00ADDDWFTTEMPP1,00BTTFSCCACCCDLOO,0;左移余余數(shù)時移移出來的的數(shù)為11?GGOTOODV22TESSTCBTFFSSSSTATTUS,C;是,再再判斷AACCBB尾數(shù)是是否大于于ACCCAGGOTOODV33DV22MOOVWFFACCCBHII;是,余余數(shù)送AACCBBMOOVFTTEMPP,0MOVVWFAACCBBLOINCCFACCCCLLO;商加11DV33DEECFSSZACCCDHII;商求取取完畢?GOOTODDV1MOVVFACCCCHHI

35、,00;是,將將商送AACCBBMOOVWFFACCCBHIIMOOVFAACCCCLO,0MMOVWWFACCCBLLORRETLLW000D_addd1MOVVFACCCALLO,00;加數(shù)、被加數(shù)數(shù)低半字字節(jié)相加加ADDDWFFACCCBLOO,0BTFFSCSSTATTUS,C;有進位位?IINCFFACCCDLOO;ACCCD低半半字節(jié)加加1MMOVFFACCCAHII,0;ACCCAHII+ACCCDLLOAADDWWFACCCDLLORRETLLW0;子程序序返回SSETUUPMMOVLLW.115MMOVWWFTEEMPMOVVFACCCBHHI,00MOOVWFFACCCDH

36、IIMOOVFAACCBBLO,0MMOVWWFACCCDLLOCCLRFFACCCBHIICLLRFAACCBBLORETTLW00NEG_ACCOMFFACCCALOO;ACCCALOO取反加加1IINCFFACCCALOOBTTFSCCSTAATUSS,Z;低8位位有進位位嗎?DECCFACCCAHHI;有,AACCAAHI減減1,再再取反COMMFACCCAHHI;否,AACCAAHI直直接取反反REETLWW0NEG_BDDECFFACCCBLOO;ACCCBLOO取反加加1CCOMFFACCCBLOOBTTFSCCSTAATUSS,Z;低8位位有進位位嗎?DECCFACCCBHHI

37、;有,AACCBBHI減減1,再再取反COMMFACCCBHHI;否,AACCBBHI直直接取反反REETLWW0S_SIIGNMOVVFACCCAHII,0;ACCCAHII異或AACCBBHI,結(jié)果送送SIGGN單元元XOORWFFACCCBHII,0MOVVWFSSIGNNBTTFSSSACCCBHII,7;ACCCB為負(fù)負(fù)?GGOTOOCHEEK_AA;否,檢檢查ACCCACOMMFACCCBLLO;是,AACCBB取補INCCFACCCBLLOBBTFSSCSTTATUUS,ZZDEECFAACCBBHICOMMFACCCBHHICHHEK_ABTFFSCAACCAAHI,7;ACC

38、CA為負(fù)負(fù)?CCALLLNEGG_A;ACCCA為負(fù)負(fù),取補補REETLWW0;ACCCA和AACCBB均為負(fù)負(fù),返回回F_noormMMOVFFACCCBHII;ACCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETLWW0;是,不不需規(guī)格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB為負(fù)?GGOTOOCC_noorm22C_nnormm1BBTFSSCACCCBHHI,66;為正。規(guī)格化化完畢?REETLWW0;ACCCBHII.6=1,規(guī)規(guī)格化結(jié)結(jié)束CCALLLS

39、HFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB減11GOOTOCC_noorm11;重新判判斷規(guī)格格化完畢畢否?CC_noorm22BTTFSSSAACCBBHI,6;ACCCB為負(fù)負(fù)。規(guī)格格化完畢畢否?RETTLW0;ACCCBHII.6=0,規(guī)規(guī)格化結(jié)結(jié)束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符號號DEECFEXXPB;EXPPB減11GOOTOC_norrm2;重新判判斷規(guī)格格化完畢畢否?SSHFTTSLBCFFSTTATUUS,C;ACCCB左移移子程序序RLLFAACCCCLORRLFACCC

40、CHIIRLLFAACCBBLORLFFACCCBHHIRRETLLW0(7)定定點數(shù)轉(zhuǎn)轉(zhuǎn)化為浮浮點數(shù)程程序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCBLOOEQUU223;存放定定點整數(shù)數(shù)和轉(zhuǎn)換換后浮點點數(shù)的尾尾數(shù)AACCBBHIEEQU244EXXPBEEQU255;存放轉(zhuǎn)轉(zhuǎn)換后浮浮點數(shù)的的階碼ACCCCLOOEQUU226;臨時寄寄存器ACCCCHIIEQUU227;臨時寄寄存器ACCCDLOOEQUU228;臨時寄寄存器ACCCDHIIEQUU229;臨時寄寄存器SIGGNEQQU2B;存放被被轉(zhuǎn)換數(shù)數(shù)的符號號ORRG0XX00000STTAR

41、TTGOOTOMAAINORGG0X001000DtoFFCLLRFSSIGNN;根據(jù)被被轉(zhuǎn)換數(shù)數(shù)確定結(jié)結(jié)果的符符號,對對負(fù)數(shù)取取補BBTFSSSACCCBHHI,77GOOTOIINTFF1BBSFSIGGN,77CAALLNNEG_BINNTF11MOOVLWW.155;初始化化EXPPBMMOVWWFEXXPBCLRRFACCCCHHICCLRFFACCCCLOOCAALLFF_noorm;對ACCCB進進行規(guī)格格化BBTFSSSSIIGN,7;結(jié)果為為負(fù)?GOTTODttoF11CAALLNNEG_B;是,求求補DttoF11REETURRNF_noormMOOVFAACCBBHI;A

42、CCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETLWW0;是,不不需規(guī)格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB為負(fù)?GGOTOOCC_noorm22C_norrm1BTFFSCAACCBBHI,6;為正。規(guī)格化化完畢?REETLWW0;ACCCBHII.6=1,規(guī)規(guī)格化結(jié)結(jié)束CCALLLSHFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB減11GOOTOCC_noorm11;重新判判斷規(guī)格格化完畢畢否?CC_noorm22BTTFSSSAA

43、CCBBHI,6;ACCCB為負(fù)負(fù)。規(guī)格格化完畢畢否?RETTLW0;ACCCBHII.6=0,規(guī)規(guī)格化結(jié)結(jié)束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符號號DEECFEXXPB;EXPPB減11GOOTOC_norrm2;重新判判斷規(guī)格格化完畢畢否?SSHFTTSLBBCFSTAATUSS,CC;ACCCB左移移子程序序RRLFACCCCLOORLFFACCCCHHIRRLFACCCBLOORLLFAACCBBHIRETTLW00(8)33字節(jié)浮浮點數(shù)轉(zhuǎn)轉(zhuǎn)換為定定點整數(shù)數(shù)程序FtoDDCLLRFSSIGNN;清結(jié)果果符號寄寄存

44、器MOVVFACCCBHHI,00BTTFSSSACCCBHII,7;被轉(zhuǎn)換換數(shù)是否否為負(fù)?GOOTODD1BBSFSIGGN,77;是,SSIGNN.7置置1CCALLLNEGG_B;被轉(zhuǎn)換換數(shù)取補補D1BTFFSSEEXPBB,7;被轉(zhuǎn)換換數(shù)為正正,再判判階碼為為負(fù)否?GOOTODD2CCLRFFACCCBHII;為負(fù),被轉(zhuǎn)換換數(shù)小于于1,無無法用定定點數(shù)表表示CCLRFFACCCBLOOREETLWW0D22MOOVLWW.166;被轉(zhuǎn)換換數(shù)階碼碼減166(十進進制數(shù))SUUBWFFEXPPB,00BTTFSSSSTAATUSS,C;階碼小小于166?GGOTOOD3MOOVLWW0XF

45、FF;階碼大大于等于于16,置ACCCB為為最大,返回MOVVWFAACCBBHIMOVVWFAACCBBLORETTLW001D33CAALLFFTOWW3;調(diào)用子子程序?qū)⒏↑c數(shù)數(shù)轉(zhuǎn)換為為定點數(shù)數(shù)BTTFSCCSIGGN,77;定點數(shù)數(shù)為負(fù)?CAALLNNEG_B;是,取取補RRETLLW0;否,返返回FTTOW33MOOVLWW.155;EXPPB=115(十十進制數(shù)數(shù))?SUBBWFEEXPBB,0BTFFSCSSTATTUS,ZRRETLLW0;是,返返回BBCFSTAATUSS,C;否,AACCBB繼續(xù)右右移,EEXPBB加1RRFFACCCBHHIRRRFACCCBLOOINNC

46、FEEXPBBGOOTOFFTOWW3;重新判判斷EXXPB=15?(9)雙雙字節(jié)定定點數(shù)至至5位BBCD碼碼轉(zhuǎn)換程程序LISSTp=16ff8777INNCLUUDEp116f8877.inccACCCBLLOEQQU23;存放被被轉(zhuǎn)換的的雙字節(jié)節(jié)整數(shù)低低8位ACCCBHIIEQUU224;存放被被轉(zhuǎn)換的的雙字節(jié)節(jié)整數(shù)高高8位ACCCCLOOEQUU226;存放55位BCCD碼ACCCCHIIEQUU227AACCDDLOEEQU288ACCCDHHIEQQU29TEMMPEQQU2A;臨時寄寄存器SIGGNEQQU2B;被轉(zhuǎn)換換數(shù)符號號寄存器器ORRG0XX00000STTARTTGOOT

47、OMAAINORGG0X001000BtoBBCDCLRRFSIGGN;初始化化符號寄寄存器BTFFSSACCCBHHI,77;被轉(zhuǎn)換換數(shù)為負(fù)負(fù)?GGOTOOLLOOPP1;否,轉(zhuǎn)轉(zhuǎn)BtooBCDDBSSFSIIGN,7;是,存存符號CALLLNEGG_B;ACCCB取補補LOOOP1BCFFSSTATTUS,C;清進位位位MMOVLLW.116;移位計計數(shù)器賦賦初值MOVVWFCCOUNNTCCLRFFACCCCHII;初始化化出口寄寄存器CLRRFACCCCLLOCCLRFFACCCDHIILOOOP166RLLFAACCBBLO;ACCCB左移移一位至至出口寄寄存器RLFFACCCBHH

48、IRRLFACCCDHIIRLLFAACCCCLORLFFACCCCHHIDDECFFSZCCOUNNT;移位計計數(shù)器0?GOTTOADDJDEEC;否,轉(zhuǎn)轉(zhuǎn)ADJJDECCREETLWW0;是,返返回ADDJDEECMMOVLLWAACCDDHI;指針指指向ACCCDHHIMMOVWWFFSSRCCALLLADJJBCDD;調(diào)用BBCD碼碼校正子子程序MOVVLWAACCCCLO;指針指指向ACCCCLLOMMOVWWFFSSRCCALLLADJJBCDD;調(diào)用BBCD碼碼校正子子程序MOOVLWWACCCCHII;指針指指向ACCCCHHIMMOVWWFFSSRCCALLLADJJBCDD

49、;調(diào)用BBCD碼碼校正子子程序GOTTOLOOOP116;ACCCB重新新左移ADJBBCDMOOVLWW00XX03;LSDD37?ADDDWFIINDFF,0MOVVWFTTEMPPBTTFSCCTEMMP,33MOOVWFFINDDF;是,LLSDLSDD3MOVVLW00X300;否,MMSD377?AADDWWFINNDF,0MMOVWWFTEEMPBTFFSCTTEMPP,7MOVVWFIINDFF;是,MMSD=MSDD3RETTLW00;返回(10)浮點數(shù)數(shù)至5位位壓縮BBCD碼碼轉(zhuǎn)換程程序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCAL

50、OOEEQU200;臨時寄寄存器ACCCAHIIEQUU221EEXPAAEEQU222;臨時寄寄存器ACCCBLOOEQUU223;存放被被轉(zhuǎn)換浮浮點數(shù)尾尾數(shù)AACCBBHIEEQU244EXXPBEEQU255;存放被被轉(zhuǎn)換浮浮點數(shù)階階碼AACCCCLOEEQU266;臨時寄寄存器ACCCCHIIEQUU227;臨時寄寄存器ACCCDLOOEQUU228;臨時寄寄存器ACCCDHIIEQUU229;臨時寄寄存器TEMMPEQQU2A;臨時寄寄存器TEMMP1EEQU300;臨時寄寄存器TIMMESEEQU311;臨時寄寄存器SIGGNEQQU2B;臨時寄寄存器COUUNTEEQU2FF;臨

51、時寄寄存器C_MMULEEQU2CC;存放小小數(shù)點位位置CC_DIIVEQQU2D;存放小小數(shù)點位位置FFPOLLEQUU22E;存放被被轉(zhuǎn)換數(shù)數(shù)的符號號ORRG0XX00000STTARTTGOOTOMAAINORGG0X001000FtoBBCDCLRRFC_MULL;清小數(shù)數(shù)點位置置數(shù)寄存存器CCLRFFC_DDIVCLRRFACCCAHHI;求取結(jié)結(jié)果符號號,存于于FPOOL.77CAALLSS_SIIGNMOVVFSIIGN,0MOVVWFFPPOLMOVVLW550;ACCCA賦初初值,AACCAA=100(十進進制)MOVVWFAACCAAHICLRRFACCCALLOMMOVL

52、LW044MOOVWFFEXPPAMUUl5BTFFSSEXXPB,7;階碼EEXPBB0?GOOTOMUUl2;否,轉(zhuǎn)轉(zhuǎn)MU112MUUl1CALLLF_mpyy;是,AACCAA100INNCFCC_MUUL;小數(shù)點點左移,寄存器器加1GOTTOMUUl5;重新判判斷階碼碼是否小小于零MMUl22MOOVLWW.122;階碼EEXPBB166?SSUBWWFEXXPB,0BBTFSSSSTAATUSS,CGOTTONEEXT;否,表表示階碼碼12EXPPB116,求求取BCCD碼值值DIVV1CCALLLFDIIV;是,EEXPBB100INNCFCC_DIIV;小數(shù)點點右移寄寄存器加加1

53、GGOTOOMUll4;重新判判斷階碼碼值NEEXTCALLLFTTOW33;調(diào)子程程序,將將浮點數(shù)數(shù)轉(zhuǎn)換為為定點數(shù)數(shù)CAALLBBtoBBCD;調(diào)雙字字節(jié)數(shù)到到BCDD碼子程程序,求求BCDD碼MMOVFFACCCCHII;ACCCCHII=0?BTTFSSSSTAATUSS,ZRETTLW00;否,返返回MMOVLLW044;是,結(jié)結(jié)果左移移4次,保證AACCCCHI不不為0MOOVWFFTIMMESBCFFSTTATUUS,CCMUll6RRLFACCCDHIIRLLFACCCCLLORRLFACCCCHIIDEECFSSZTIIMESSGOOTOMMUl66MOOVFCC_DIIV;C

54、_DDIV=0?BTFFSCSSTATTUS,ZGGOTOOTEMMUL;是,轉(zhuǎn)轉(zhuǎn)判斷CC_MUULDDECFFC_DDIV;否,小小數(shù)點右右移,寄存器器減1RETTLW00TEMMULINCCFC_MULL;小數(shù)點點左移,寄存器器加1RETTLW00(11)進制碼碼和BCCD碼轉(zhuǎn)轉(zhuǎn)換程序序LISTT P=16FF8777INCLLUDEE “P16FF8777.INNC”;-#DEFFINEE BiiTOBBCDYR2 EEQU 0 x200R1 EEQU 0 x2llR0EQUU 0 xx22BinHH EQQU 00 x233BinLL EQQU 00 x244CNT EQUU 0 x2

55、55TMP EQUU 0 xx26BinBBH EEQU 0 x277BinBBL EEQU 0 x228;- ORRG 00 x000GOTOO MAAINORG 0 x100BiBCCD MMOVLLW0 x100; MOVVWF CNTT;移位位次數(shù) BCCF STAATUSS,C CLLRFRR0 CLLRF R1 CLLRF R2LOOPPRLFF BiinL RLLF BBinHH RLLF RR0 RLLF RR1 RLLF RR2 DEECFSSZCNTT GOOTOADJJDECC REETURRNADJDDEC MOVVLW R0;調(diào)整整R0 MOOVWFF FSRR CA

56、ALL ADJJBCDD MOOVLWW R1;調(diào)整整Rl MOOVWFF FSSR CAALL ADJJBCDD MOOVLWWR2;調(diào)整整R2 MOOVWFF FSSR CAALL ADJJBCDD GOOTO LOOOPADJBBCD MOVVLW 0 x33 ADDDWFF INNDF,W MOOVWFF TMP MOOVWFF INNDF;LSSD=LLSD+3 MOOVLWW 0 xx30 ADDDWFF INNDF,W MOOVWFF TMMP MOOVWFF INNDF;MSSD=MMSD+3 REETURRNBCDBBi CCLRFF BiinH MOOVFR2,W ANND

57、LWW0 x0F MOOVWFF BiinL;(BBinLL)=RR2 CAALL MPYY 100A;(Binn)=(Binn10 SWWAPFF RI,W CALLL MPYY10BB;(BBin)(Binn)+RR110MOVFF R1,W CAALL MPYY 100B;(BBin)(Binn)+RR1*110 SWWAPFF R0,W CAALL MPYY10BB;(BBin)(Binn)+RR0*110 MOOVF R0,W;(BBin)(BBin)+R00 ANNDLWW 0 x0F ADDDWFF BiinL BTTFSCC STTATUUS,C INNCF BinnH REE

58、TURRNMPY110B ANDDLW 0 x0F ADDDWFF BiinL BTTFSCC STTATUUS,CC INNCF BinnHMPY l0AA BCCF STAATUSS,C RLLF BinnL,W MOOVWFF BiinBLL RLLF BBinHH,W MOOVWFF BiinBHH;(BBin)2(BBinBB) BCCF SSTATTUS,C RLLF BBinLL RLLF BBinHH BCCF SSTATTUS,C BCCF SSTATTUS,C RLLF BBinLL RLLF BBinHH;(BBin)*8(BBin) MOOVF BinnBL,W ADD

59、DWFF BiinL BTTFSCC STTATUUS,C INNCF BinnH MOOVF BinnBH,W ADDDWFF BiinH REETURRNMAINN ORRG 0 x100;主主程序 IFF BiiTOBBCD=YY;二進進制轉(zhuǎn)換換為BCCD碼MOVLLW 0 x7FMOVWWF BBinHHMOVLLW 0 xFFFMOVWWF BBinLL CALLL BBiBCCD;結(jié)果果在R22,R11,R00中ENDIIFIF BBITOOBCDD=N;BCCD碼轉(zhuǎn)轉(zhuǎn)換為二二進制數(shù)數(shù) MMOVLLW 00 x6 MMOVWWF RR2 MMOVLLW0 xx55 MMOVWWF

60、RR1 MMOVLLW 00 x355 MMOVWWF R0 CCALLL BCCDBii;結(jié)果果在B inHH、BiinL中中ENDIIFGOTOOEND(12)定點數(shù)數(shù)開方程程序LISSTp=16ff8777INNCLUUDEp116f8877.inccACCCALLOEQUU00X200ACCCAHHIEQUUAACCAALO+1EEXPAAEEQUACCCALLO+22ACCCBLLOEQUUAACCAALO+3AACCBBHIEQQUACCCALOO+4EXPPBEQUUAACCAALO+5ACCCCLOOEEQUACCCALLO+66ACCCCHHIEQUUAACCAALO+7AA

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論