版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(1)1616位定点数加、减法程序LISTp=16f877INCLUDEp16f877.incACCALOEQU20;存放加数或减数低8位ACCAHIEQU21 ;存放加数或减数高8位ACCBLOEQU23 ;存放被加数或被减数低8位ACCBHIEQU24 ;存放被加数或被减数高8位ORG0X0000STARTGOTOMAIN;*双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB*D_subCALLNEG_A ;求ACCA的补码;双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCBD_adddMOOVFACCCALLO,00 ;AACCBB和ACCCA低低半字节节相加AD
2、DDWFACCCBLLOBBTFSSCSTAATUSS, C ;有进进位否?INNCFACCCBHHI;有,ACCCB高字字节加11,再加AACCAAHIMOVVFACCCAHII,0;ACCCA、AACCBB高半字字节相加加ADDDWFFAACCBBHIRETTURNN;子程序序返回;ACCCA取补补子程序序NEG_ACCOMFFAACCAALO;ACCCALOO取反加加1IINCFFAACCAALOBTFFSCSTTATUUS,ZZ;低8位位有进位位吗?DECCFACCCAHII;有,AACCAAHI减减1,再再取反COMMFACCCAHII;否则AACCAAHI直直接取反反REETURR
3、N ;子程程序返回回(2)116116位定定点数乘乘法程序序LISTTp=16ff8777INNCLUUDEp166f8777.iincACCCALOOEEQU200;存放乘乘数低88位AACCAAHIEQQU21;存放乘乘数高88位AACCBBLOEQQU23;存放被被乘数低低8位和和乘积第第1623位位ACCCBHHIEQUU224;存放被被乘数高高8位和和乘积第第2431位位ACCCCLLOEQUU226;存放乘乘积低88位AACCCCHIEQQU27;存放乘乘积高88位AACCDDLOEQQU28;临时寄寄存器ACCCDHIIEEQU299;临时寄寄存器TEMMPEQUU22A;临时寄
4、寄存器SIGGNEQUU22B;存放乘乘积的符符号OORG0X000000STAARTGOTTOMAIINORGG0XX01000D_mpyyCAALLS_SIGGN;求取乘乘积的符符号,并并对负数数取补CAALLSEETUPP;调用子子程序,将ACCCB的的值送AACCDDINNCFTEMMPCCLRFFAACCCCHI;清ACCCCCLRRFACCCCLOOMLOOOPBCFFSSTATTUS,C;清进位位位RRRFACCCDHHI;ACCCD右移移RRRFACCCDLOOBTTFSCCSSTATTUS,C;判断是是否需要要相加CALLLD_aadd;加乘数数至ACCCB,见加法法程序BC
5、FFSSTATTUS,C;清进位位位RRRFACCCBHHI;右移部部分乘积积RRRFACCCBLOORRRFACCCCHIIRRRFACCCCLOODEECFSSZTEMMP;乘法完完成否?GOOTOMLLOOPP;否,继继续求乘乘积BBTFSSSSIGGN,77;是,确确定乘积积的符号号GOOTOOVVER;为正,乘法结结束CCOMFFAACCCCLO;为负,乘积取取补IINCFFACCCCLOOBTTFSCCSSTATTUS,ZDDECFFACCCCHIICOOMFAACCCCHIBTFFSCSSTATTUS,ZNEEG_BBDEECFAACCBBLOCCOMFFACCCBLOOBTTF
6、SCCSTAATUSS,ZDECCFACCCBHHICCOMFFACCCBHIIOVEERRRETUURN;子程序序返回SETUUPMMOVLLW15;初始化化TEMMP寄存存器MOOVWFFTTEMPPMOOVFACCCBHHI,00;ACCCB送AACCDDMOOVWFFACCCDHHIMMOVFFAACCBBLO,0MMOVWWFACCCDLOOCLLRFACCCBHHI;清ACCCBCLRRFACCCBLOOREETURRN;子程序序返回S_SIIGNMOVVFACCCAHII,0;ACCCAHII异或AACCBBHI,结果送送SIGGN单元元XOORWFFAACCBBHI,0MMOV
7、WWFSIGGNBBTFSSSACCCBHII,7;ACCCB为负负吗?GOTTOCHEEK_AA;否,检检查ACCCACALLLNNEG_B;是,求求取ACCCB绝绝对值CCHEKK_ABTFFSCACCCAHHI,77;ACCCA为负负吗?CALLLNEGG_A;ACCCA为负负,求取取ACCCA绝对对值,RETTURNN;ACCCA和AACCBB均为正正,返回回(3)116116位定定点数除除法程序LISTTp=16ff8777INCCLUDDEpp16f8777.inncACCCALLOEEQU200;存放除除数低88位ACCCAHHIEQUU221;存放除除数高88位ACCCBLLO
8、EQUU222;存放被被除数和和商的低低8位AACCBBHIEQQU23;存放被被除数和和商的高高8位AACCCCLOEQQU24;存放余余数低88位ACCCCHHIEQUU225;存放余余数高88位ACCCDLLOEQUU226;临时寄寄存器AACCDDHIEQQU27;临时寄寄存器TTEMPPEEQU288;临时寄寄存器SSIGNNEEQU299;存放商商的符号号ORGG0XX00000STARRTGGOTOOMAAINORG0X001000D_ddivCALLLS_SSIGNN;确定商商的符号号,并将将负数取取补CAALLSETTUP;初始化化TEMMP,将将被除数数移至AACCDDIN
9、NCFTEMMPCCLRFFACCCCHHI;清余数数寄存器器CLLRFACCCCLOODLOOOPBCFFSTTATUUS,CC;清进位位位RRLFACCCDLOO;被除数数、余数数左移11位RRLFACCCDHIIRLLFAACCCCLORLFFACCCCHHIMMOVFFACCCAHHI,00;ACCCCHII-ACCCAHHISSUBWWFAACCCCHI,0BBTFSSSSSTATTUS,Z;ACCCCHII=ACCCAHHI?GOTTONNOCHHKMMOVFFACCCALLO,00;是,AACCCCLO-ACCCALOOSUUBWFFACCCCLLO,00NOCCHKBTFFSS
10、STAATUSS,C;ACCCCAACCAA?GGOTOONOOGOMOVVFAACCAALO,0;是,余余数减除除数SSUBWWFAACCCCLOBTFFSSSTAATUSS,CDECCFAACCCCHIMOVVFAACCAAHI,0SSUBWWFAACCCCHIBSFFSTTATUUS,CC;置进位位位NOOGORLFFACCCBLLO;商左移移1位RLFFACCCBHHIDDECFFSZTEMMP;循环完完毕?GOTTODDLOOOPBBTFSSSSIGGN,77;是,确确定商的的符号GOTTODIVVOVEER;为正,除法结结束,跳跳转到结结束行COMMFACCCCLOO;为负,商和余
11、余数分别别取补INCCFACCCCLOOBTTFSCCSTTATUUS,ZZDEECFACCCCHHICCOMFFAACCCCHICALLLNNEG_B;见乘法法程序中中间NEEG_BBDIVVOVEERRRETUURN;子程序序返回S_SIIGNMOVVFACCCAHII,0;ACCCAHII异或AACCBBHI,结果送送SIGGN单元元XOORWFFAACCBBHI,0MMOVWWFSIGGNBBTFSSSACCCBHII,7;ACCCB为负负?GGOTOOCCHEKK_A;否,检检查ACCCACOMMFACCCBLOO;是,AACCBB取补INCCFACCCBLOOBTTFSCCSSTA
12、TTUS,ZDDECFFAACCBBHICOMMFACCCBHIICHEEK_AABTTFSCCAACCAAHI,7;ACCCA为负负?CCALLLNNEG_A;ACCCA为负负,取补补(NEEG_AA子程序序请参见见;1616位位定点数数乘法子子程序NNEG_A)RETTURNN;ACCCA和AACCBB均为负负,返回回(4)浮浮点数加加减法程程序LISTTp=116f8877INCCLUDDEp116f8877.inccACCCALLOEQQU20;存放加加数或减减数的尾尾数AACCAAHIEEQU21EXPPAEQUU222;存放加加数或减减数阶码码ACCCBLLOEQUU223;存放被
13、被加数或或被减数数尾数以以及和或或差AACCBBHIEEQU244EXXPBEEQU25;存放被被加数或或被减数数阶码ACCCCLOOEEQU266;临时寄寄存器ACCCCHIIEQUU227;临时寄寄存器ACCCDLOOEEQU288;临时寄寄存器ACCCDHIIEQUU229;临时寄寄存器TEMMPEQQU2A;临时寄寄存器TEMMP1EEQU300;临时寄寄存器TIMMESEEQU311;临时寄寄存器ORGG0XX0000STAARTGOTTOMAIINOORG00X01100F_suubCCALLLNEGG_A;求ACCCA的的补码,将减法法转换为为补码加加法F_adddCAALLSU
14、UBADDJ;调子程程序判断断EXPPB和EEXPAA的大小小BTTFSCCSTAATUSS,Z;参与运运算的两两个数阶阶码相等等?GGOTOOPADDD;是,求求尾数的的和BBTFSSCSTTATUUS,CC;EXPPBEEXPAA?CCALLLF_sswapp;是,AACCBB与ACCCA互互换MMOVFFEXPPA,00;否,求求取两者者的差值值SUUBWFFEXPPBSCCLOOOPCCALLLSHFFTSRR;ACCCB右移移规格化化INNCFSSZEXXPB;EXPPBEEXPAA?GOOTOSSCLOOOP;否,继继续右移移MOOVFEEXPAA,0;是,存存和(差差)的阶阶码M
15、MOVWWFEXPPBPAADDMOVVFACCCAHHI,00;ACCCAHII或ACCCBHHIIIORWWFACCCBHHI,00MOOVWFFSIGGN;存于SSIGNN寄存器器MOOVFACCCBHHI,00;暂存AACCBBHIMOOVWFFEEXPAACAALLDD_addd;尾数相相加BBTFSSSSIIGN,7;ACCCA和AACCBB有负数数?BTTFSCCACCCBHII,7;否,把把和的最最高位和和次高位位同时进进位?GOTTOADDD2;否,转转ADDD2BBTFSSSACCCAHII,7;ACCCA为负负吗?GOTTOADDD3;ACCCA和AACCBB不同时时为负
16、,转ADDD3BTFFSSEXXPA,7;是,AACCBB为负吗吗?GGOTOOAADD33BSFFSTAATUSS,C;ACCCA和AACCBB同为负负,带负负号右移移RRRFACCCBHHIRRRFAACCBBLOINCCFEXXPBAADD33CLLRFAACCCCHI;和(差差)规格格化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,结结果送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;是,不不需规格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB为负?GGOTOOCC_noorm22C_norrm1BTFFSCAACCBBHI,6;为正。规格化化完毕?REETURRN;ACCCBHII.6=1,规规格化结结束CC
20、ALLLSHFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB减11GOOTOCC_noorm11;重新判判断规格格化完毕毕否?CC_noorm22BTTFSSSAACCBBHI,6;ACCCB为负负。规格格化完毕毕否?RETTURNN;ACCCBHII.6=0,规规格化结结束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符号号DEECFEXXPB;EXPPB减11GOOTOC_norrm2;重新判判断规格格化完毕毕否?SSHFTTSLBBCFSTAATUSS,CC;ACCCB左移移子程序序RRLFACCCCLOOR
21、LFFACCCCHHIRRLFACCCBLOORLLFAACCBBHIRETTURNN(5)浮浮点数乘乘法程序序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCALOOEQUU220;存放乘乘数尾数数ACCCAHHIEQQU21EXPPAEQUU222;存放乘乘数阶码码ACCCBLLOEQQU23;存放被被乘数尾尾数和乘乘积高116位ACCCBHIIEQUU224EEXPBBEQUU225;存放被被乘数阶阶码AACCCCLOEEQU266;存放乘乘积低116位ACCCCHIIEQUU227ACCCDLLOEQQU28;临时寄寄存器ACCCDHIIEQUU22
22、9;临时寄寄存器TEMMPEQQU2A;临时寄寄存器TEMMP1EEQU300;临时寄寄存器TIMMESEEQU311;临时寄寄存器SIGGNEQQU2B;存放乘乘积符号号COOUNTTEQUU22F;临时寄寄存器ACCCEHIIEEQU30;临时寄寄存器ACCCELOOEEQU31;临时寄寄存器ORGG0X000000STAARTGOTTOMAIINOORG00X01100F_mppyCCALLLS_SSIGNN;求取乘乘积的符符号,并并对负数数取补CAALLSSETUUP;调用子子程序将将ACCCB的值值送ACCCDCLRRFACCCCHHI;清ACCCCCLRRFACCCCLLOMLLO
23、OPPBCCFSSTATTUS,C;清进位位位RRRFACCCDHII;ACCCD右移移RRRFAACCDDLOBTFFSCSSTATTUS,C;判断是是否需要要相加CALLLD_addd;加乘数数至ACCCBBCFFSTTATUUS,CC;清进位位位RRRFACCCBHII;右移部部分乘积积RRRFAACCBBLORRFFACCCCHHIRRRFACCCCLOODEECFSSZTEEMP;乘法完完成否?GOOTOMMLOOOP;否,继继续循环环MOOVFEEXPAA,0;是,乘乘数与被被乘数阶阶码相加加,得积积的阶码码ADDDWFFEEXPBBMOOVFAACCBBHI;ACCCBHII=0
24、?BTTFSSSSTAATUSS,ZGOTTOFIINUPP;否,转转FINNUPMOVVFACCCBLLO;ACCCB00?BBTFSSSSTTATUUS,ZGGOTOOSHFFT088;否,只只有ACCCBHHI=00,转SSHFTT08MOVVFACCCCHHI,00;ACCCB=00,将乘乘积左移移15位位MOOVWFFACCCBHIIMOOVFAACCCCLO,0MMOVWWFACCCBLLOBBCFSTAATUSS,CRRFFACCCBHHIRRRFACCCBLOOMOOVLWW.155;乘积阶阶码减115(十十进制数数)SSUBWWFEXXPBGOTTOFIINUPPSHFFT0
25、88MOOVFAACCBBLO,0;只有AACCBBHI0,乘乘积左移移7位MOVVWFAACCBBHIMOVVFACCCCHHI,00MOOVWFFACCCBLOOBCCFSSTATTUS,CRRRFACCCBHIIRRRFAACCBBLOMOVVLW.7;乘积阶阶码减77SUUBWFFEXPPBFIINUPPCAALLFF_noorm;对乘积积进行规规格化BTFFSSSSIGNN,7;确定乘乘积的符符号GGOTOOOVEER;为正,乘法结结束CCOMFFACCCCLOO;为负,乘积取取补IINCFFACCCCLOOBTTFSCCSTAATUSS,ZDECCFACCCCHHICCOMFFAC
26、CCCHIIBTTFSCCSTAATUSS,ZNNEG_BDDECFFACCCBLOOCOOMFAACCBBLOBTFFSCSSTATTUS,ZDDECFFACCCBHIICOOMFAACCBBHIOOVERRREETURRN;乘法结结束,子子程序返返回S_SIIGNMOVVFACCCAHHI,00;ACCCAHII异或AACCBBHI,结果送送SIGGNXXORWWFACCCBHHI,00MOOVWFFSSIGNNBTTFSSSACCCBHII,7;ACCCB为负负?GGOTOOCHEEK_AA;否,检检查ACCCACOMMFACCCBLLO;是,AACCBB取补INCCFACCCBLLOB
27、BTFSSCSTTATUUS,ZZDEECFAACCBBHICOMMFACCCBHHICHHEK_ABTFFSCAACCAAHI,7;ACCCA为负负?CCALLLNNEG_A;ACCCA取补补REETURRN;返回F_noormMMOVFFACCCBHII;ACCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETURRN;是,不不需规格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB为负?GGOTOOCC_noorm22C_nnormm1BBTFSSCACCCBHHI,6
28、6;为正。规格化化完毕?REETURRN;ACCCBHII.6=1,规规格化结结束CCALLLSHFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB减11GOOTOCC_noorm11;重新判判断规格格化完毕毕否?CC_noorm22BTTFSSSAACCBBHI,6;ACCCB为负负。规格格化完毕毕否?RETTURNN;ACCCBHII.6=0,规规格化结结束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符号号DEECFEXXPB;EXPPB减11GOOTOC_norrm2;重新判判断规格格化完毕毕否?SSHFTT
29、SLBCCFSSTATTUS,C;ACCCB左移移子程序序RRLFACCCCLOORLFFACCCCHHIRRLFACCCBLOORLLFAACCBBHIRETTURNN(6)浮浮点数除除法程序序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCALOOEQUU220;存放除除数的尾尾数AACCAAHIEEQU211EXXPAEQQU22;存放除除数的阶阶码AACCBBLOEEQU233;存放被被除数的的尾数和和商的尾尾数AACCBBHIEEQU244EXXPBEEQU255;存放被被除数和和商的阶阶码AACCCCLOEEQU266;存放余余数AACCCCHI
30、EEQU277ACCCDLLOEQQU28;临时寄寄存器ACCCDHIIEQUU229;临时寄寄存器TEMMPEQQU2A;临时寄寄存器TEMMP1EEQU300;临时寄寄存器TIMMESEEQU311;临时寄寄存器SIGGNEQQU2B;存放商商的符号号COOUNTTEQUU22F;临时寄寄存器ACCCEHIIEEQU30;临时寄寄存器ACCCELOOEEQU31;临时寄寄存器ORGG0X000000STAARTGOTTOMAIINOORG00X01100F_diivCCALLLS_SSIGNN;确定商商的符号号,并将将负数取取补CCLRFFAACCCCHI;初始化化ACCCC寄存存器CCL
31、RFFACCCCLOOCAALLFF_noorm;规格化化ACCCBCCLRFFACCCCLOOCLLRFAACCCCHICLRRFTIIMESSMOOVFAACCAAHI;除数为为零?BTFFSSSSTATTUS,ZGGOTOOFD00 ;否,求求商MMOVFFACCCALOOBTTFSCCSTAATUSS,ZRETTLW001;是,返返回FDD0CCALLLNEGG_A;除数取取补FDD1MMOVFFACCCBHII,0;ACCCBHII送ACCCDLLOMMOVWWFACCCDLLOCCALLLD_aadd11;被除数数尾数大大于除数数尾数?BTTFSSSSTAATUSS,CGOTTOF
32、DD2RRRF1BCFFSTTATUUS,CC;是,被被除数右右移规格格化,直直到小于于除数为为止RRRFACCCBHIIRRRFAACCBBLOINCCFTIIMESSRRRFAACCCCHIBCFFSTTATUUS,CCGOOTOFFD1FFD2CALLLDDDIV;否,调调用双字字节除法法子程序序,求商商的尾数数MOOVFTTIMEES,00;根据右右移规格格化次数数调整AACCBB阶码ADDDWFEEXPBBMOOVFEEXPAA,0;求商的的阶码SUBBWFEEXPBBCAALLFF_noorm;商规格格化BBTFSSCSIIGN,7;商为负负?CCALLLNEGG_B;是,取取补C
33、CALLLNEGG_A;除数还还原RRETUURN;浮点数数除法完完成,返返回DDIVVMOOVLWW0X00F;初始化化ACCCDHIIMOOVWFFACCCDHIIDV11BCCFSSTATTUS,CRRLFACCCCLOO;左移商商RLLFAACCCCHIRLFFACCCBLLO;左移余余数RRLFACCCBHIIMOOVFSSTATTUS,0;暂存SSTATTUS寄寄存器MOVVWFAACCDDLOMOVVFACCCBHHI,00;ACCCBHII送TEEMP11MOOVWFFTEMMP1MOVVFACCCALLO,00;ACCCB-AACCAAADDDWFFACCCBLOO,0MOV
34、VWFTTEMPPBTTFSCCSTAATUSS,CIINCFFTEMMP1MOVVFACCCAHHI,00ADDDWFTTEMPP1,00BTTFSCCACCCDLOO,0;左移余余数时移移出来的的数为11?GGOTOODV22TESSTCBTFFSSSSTATTUS,C;是,再再判断AACCBB尾数是是否大于于ACCCAGGOTOODV33DV22MOOVWFFACCCBHII;是,余余数送AACCBBMOOVFTTEMPP,0MOVVWFAACCBBLOINCCFACCCCLLO;商加11DV33DEECFSSZACCCDHII;商求取取完毕?GOOTODDV1MOVVFACCCCHHI
35、,00;是,将将商送AACCBBMOOVWFFACCCBHIIMOOVFAACCCCLO,0MMOVWWFACCCBLLORRETLLW000D_addd1MOVVFACCCALLO,00;加数、被加数数低半字字节相加加ADDDWFFACCCBLOO,0BTFFSCSSTATTUS,C;有进位位?IINCFFACCCDLOO;ACCCD低半半字节加加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,结果送送SIGGN单元元XOORWFFACCCBHII,0MOVVWFSSIGNNBTTFSSSACCCBHII,7;ACCCB为负负?GGOTOOCHEEK_AA;否,检检查ACCCACOMMFACCCBLLO;是,AACCBB取补INCCFACCCBLLOBBTFSSCSTTATUUS,ZZDEECFAACCBBHICOMMFACCCBHHICHHEK_ABTFFSCAACCAAHI,7;ACC
38、CA为负负?CCALLLNEGG_A;ACCCA为负负,取补补REETLWW0;ACCCA和AACCBB均为负负,返回回F_noormMMOVFFACCCBHII;ACCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETLWW0;是,不不需规格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB为负?GGOTOOCC_noorm22C_nnormm1BBTFSSCACCCBHHI,66;为正。规格化化完毕?REETLWW0;ACCCBHII.6=1,规规格化结结束CCALLLS
39、HFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB减11GOOTOCC_noorm11;重新判判断规格格化完毕毕否?CC_noorm22BTTFSSSAACCBBHI,6;ACCCB为负负。规格格化完毕毕否?RETTLW0;ACCCBHII.6=0,规规格化结结束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符号号DEECFEXXPB;EXPPB减11GOOTOC_norrm2;重新判判断规格格化完毕毕否?SSHFTTSLBCFFSTTATUUS,C;ACCCB左移移子程序序RLLFAACCCCLORRLFACCC
40、CHIIRLLFAACCBBLORLFFACCCBHHIRRETLLW0(7)定定点数转转化为浮浮点数程程序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCBLOOEQUU223;存放定定点整数数和转换换后浮点点数的尾尾数AACCBBHIEEQU244EXXPBEEQU255;存放转转换后浮浮点数的的阶码ACCCCLOOEQUU226;临时寄寄存器ACCCCHIIEQUU227;临时寄寄存器ACCCDLOOEQUU228;临时寄寄存器ACCCDHIIEQUU229;临时寄寄存器SIGGNEQQU2B;存放被被转换数数的符号号ORRG0XX00000STTAR
41、TTGOOTOMAAINORGG0X001000DtoFFCLLRFSSIGNN;根据被被转换数数确定结结果的符符号,对对负数取取补BBTFSSSACCCBHHI,77GOOTOIINTFF1BBSFSIGGN,77CAALLNNEG_BINNTF11MOOVLWW.155;初始化化EXPPBMMOVWWFEXXPBCLRRFACCCCHHICCLRFFACCCCLOOCAALLFF_noorm;对ACCCB进进行规格格化BBTFSSSSIIGN,7;结果为为负?GOTTODttoF11CAALLNNEG_B;是,求求补DttoF11REETURRNF_noormMOOVFAACCBBHI;A
42、CCCB00?BBTFSSSSTTATUUS,ZZGOOTOCC_noormMOVVFACCCBLLOBBTFSSCSTTATUUS,ZZREETLWW0;是,不不需规格格化,返返回C_norrmBBTFSSCACCCBHII,7;否。AACCBB为负?GGOTOOCC_noorm22C_norrm1BTFFSCAACCBBHI,6;为正。规格化化完毕?REETLWW0;ACCCBHII.6=1,规规格化结结束CCALLLSHFFTSLL;否。AACCBB左移DECCFEXXPB;EXPPB减11GOOTOCC_noorm11;重新判判断规格格化完毕毕否?CC_noorm22BTTFSSSAA
43、CCBBHI,6;ACCCB为负负。规格格化完毕毕否?RETTLW0;ACCCBHII.6=0,规规格化结结束BBCFSSTATTUS,CCALLLSHFFTSLL;否,AACCBB左移BSFFACCCBHII,7;加符号号DEECFEXXPB;EXPPB减11GOOTOC_norrm2;重新判判断规格格化完毕毕否?SSHFTTSLBBCFSTAATUSS,CC;ACCCB左移移子程序序RRLFACCCCLOORLFFACCCCHHIRRLFACCCBLOORLLFAACCBBHIRETTLW00(8)33字节浮浮点数转转换为定定点整数数程序FtoDDCLLRFSSIGNN;清结果果符号寄寄存
44、器MOVVFACCCBHHI,00BTTFSSSACCCBHII,7;被转换换数是否否为负?GOOTODD1BBSFSIGGN,77;是,SSIGNN.7置置1CCALLLNEGG_B;被转换换数取补补D1BTFFSSEEXPBB,7;被转换换数为正正,再判判阶码为为负否?GOOTODD2CCLRFFACCCBHII;为负,被转换换数小于于1,无无法用定定点数表表示CCLRFFACCCBLOOREETLWW0D22MOOVLWW.166;被转换换数阶码码减166(十进进制数)SUUBWFFEXPPB,00BTTFSSSSTAATUSS,C;阶码小小于166?GGOTOOD3MOOVLWW0XF
45、FF;阶码大大于等于于16,置ACCCB为为最大,返回MOVVWFAACCBBHIMOVVWFAACCBBLORETTLW001D33CAALLFFTOWW3;调用子子程序将将浮点数数转换为为定点数数BTTFSCCSIGGN,77;定点数数为负?CAALLNNEG_B;是,取取补RRETLLW0;否,返返回FTTOW33MOOVLWW.155;EXPPB=115(十十进制数数)?SUBBWFEEXPBB,0BTFFSCSSTATTUS,ZRRETLLW0;是,返返回BBCFSTAATUSS,C;否,AACCBB继续右右移,EEXPBB加1RRFFACCCBHHIRRRFACCCBLOOINNC
46、FEEXPBBGOOTOFFTOWW3;重新判判断EXXPB=15?(9)双双字节定定点数至至5位BBCD码码转换程程序LISSTp=16ff8777INNCLUUDEp116f8877.inccACCCBLLOEQQU23;存放被被转换的的双字节节整数低低8位ACCCBHIIEQUU224;存放被被转换的的双字节节整数高高8位ACCCCLOOEQUU226;存放55位BCCD码ACCCCHIIEQUU227AACCDDLOEEQU288ACCCDHHIEQQU29TEMMPEQQU2A;临时寄寄存器SIGGNEQQU2B;被转换换数符号号寄存器器ORRG0XX00000STTARTTGOOT
47、OMAAINORGG0X001000BtoBBCDCLRRFSIGGN;初始化化符号寄寄存器BTFFSSACCCBHHI,77;被转换换数为负负?GGOTOOLLOOPP1;否,转转BtooBCDDBSSFSIIGN,7;是,存存符号CALLLNEGG_B;ACCCB取补补LOOOP1BCFFSSTATTUS,C;清进位位位MMOVLLW.116;移位计计数器赋赋初值MOVVWFCCOUNNTCCLRFFACCCCHII;初始化化出口寄寄存器CLRRFACCCCLLOCCLRFFACCCDHIILOOOP166RLLFAACCBBLO;ACCCB左移移一位至至出口寄寄存器RLFFACCCBHH
48、IRRLFACCCDHIIRLLFAACCCCLORLFFACCCCHHIDDECFFSZCCOUNNT;移位计计数器0?GOTTOADDJDEEC;否,转转ADJJDECCREETLWW0;是,返返回ADDJDEECMMOVLLWAACCDDHI;指针指指向ACCCDHHIMMOVWWFFSSRCCALLLADJJBCDD;调用BBCD码码校正子子程序MOVVLWAACCCCLO;指针指指向ACCCCLLOMMOVWWFFSSRCCALLLADJJBCDD;调用BBCD码码校正子子程序MOOVLWWACCCCHII;指针指指向ACCCCHHIMMOVWWFFSSRCCALLLADJJBCDD
49、;调用BBCD码码校正子子程序GOTTOLOOOP116;ACCCB重新新左移ADJBBCDMOOVLWW00XX03;LSDD37?ADDDWFIINDFF,0MOVVWFTTEMPPBTTFSCCTEMMP,33MOOVWFFINDDF;是,LLSDLSDD3MOVVLW00X300;否,MMSD377?AADDWWFINNDF,0MMOVWWFTEEMPBTFFSCTTEMPP,7MOVVWFIINDFF;是,MMSD=MSDD3RETTLW00;返回(10)浮点数数至5位位压缩BBCD码码转换程程序LISTTp=116f8877INCCLUDDEp166f8777.iincACCCAL
50、OOEEQU200;临时寄寄存器ACCCAHIIEQUU221EEXPAAEEQU222;临时寄寄存器ACCCBLOOEQUU223;存放被被转换浮浮点数尾尾数AACCBBHIEEQU244EXXPBEEQU255;存放被被转换浮浮点数阶阶码AACCCCLOEEQU266;临时寄寄存器ACCCCHIIEQUU227;临时寄寄存器ACCCDLOOEQUU228;临时寄寄存器ACCCDHIIEQUU229;临时寄寄存器TEMMPEQQU2A;临时寄寄存器TEMMP1EEQU300;临时寄寄存器TIMMESEEQU311;临时寄寄存器SIGGNEQQU2B;临时寄寄存器COUUNTEEQU2FF;临
51、时寄寄存器C_MMULEEQU2CC;存放小小数点位位置CC_DIIVEQQU2D;存放小小数点位位置FFPOLLEQUU22E;存放被被转换数数的符号号ORRG0XX00000STTARTTGOOTOMAAINORGG0X001000FtoBBCDCLRRFC_MULL;清小数数点位置置数寄存存器CCLRFFC_DDIVCLRRFACCCAHHI;求取结结果符号号,存于于FPOOL.77CAALLSS_SIIGNMOVVFSIIGN,0MOVVWFFPPOLMOVVLW550;ACCCA赋初初值,AACCAA=100(十进进制)MOVVWFAACCAAHICLRRFACCCALLOMMOVL
52、LW044MOOVWFFEXPPAMUUl5BTFFSSEXXPB,7;阶码EEXPBB0?GOOTOMUUl2;否,转转MU112MUUl1CALLLF_mpyy;是,AACCAA100INNCFCC_MUUL;小数点点左移,寄存器器加1GOTTOMUUl5;重新判判断阶码码是否小小于零MMUl22MOOVLWW.122;阶码EEXPBB166?SSUBWWFEXXPB,0BBTFSSSSTAATUSS,CGOTTONEEXT;否,表表示阶码码12EXPPB116,求求取BCCD码值值DIVV1CCALLLFDIIV;是,EEXPBB100INNCFCC_DIIV;小数点点右移寄寄存器加加1
53、GGOTOOMUll4;重新判判断阶码码值NEEXTCALLLFTTOW33;调子程程序,将将浮点数数转换为为定点数数CAALLBBtoBBCD;调双字字节数到到BCDD码子程程序,求求BCDD码MMOVFFACCCCHII;ACCCCHII=0?BTTFSSSSTAATUSS,ZRETTLW00;否,返返回MMOVLLW044;是,结结果左移移4次,保证AACCCCHI不不为0MOOVWFFTIMMESBCFFSTTATUUS,CCMUll6RRLFACCCDHIIRLLFACCCCLLORRLFACCCCHIIDEECFSSZTIIMESSGOOTOMMUl66MOOVFCC_DIIV;C
54、_DDIV=0?BTFFSCSSTATTUS,ZGGOTOOTEMMUL;是,转转判断CC_MUULDDECFFC_DDIV;否,小小数点右右移,寄存器器减1RETTLW00TEMMULINCCFC_MULL;小数点点左移,寄存器器加1RETTLW00(11)进制码码和BCCD码转转换程序序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;移位位次数 BCCF STAATUSS,C CLLRFRR0 CLLRF R1 CLLRF R2LOOPPRLFF BiinL RLLF BBinHH RLLF RR0 RLLF RR1 RLLF RR2 DEECFSSZCNTT GOOTOADJJDECC REETURRNADJDDEC MOVVLW R0;调整整R0 MOOVWFF FSRR CA
56、ALL ADJJBCDD MOOVLWW R1;调整整Rl MOOVWFF FSSR CAALL ADJJBCDD MOOVLWWR2;调整整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;二进进制转换换为BCCD码MOVLLW 0 x7FMOVWWF BBinHHMOVLLW 0 xFFFMOVWWF BBinLL CALLL BBiBCCD;结果果在R22,R11,R00中ENDIIFIF BBITOOBCDD=N;BCCD码转转换为二二进制数数 MMOVLLW 00 x6 MMOVWWF RR2 MMOVLLW0 xx55 MMOVWWF
60、RR1 MMOVLLW 00 x355 MMOVWWF R0 CCALLL BCCDBii;结果果在B inHH、BiinL中中ENDIIFGOTOOEND(12)定点数数开方程程序LISSTp=16ff8777INNCLUUDEp116f8877.inccACCCALLOEQUU00X200ACCCAHHIEQUUAACCAALO+1EEXPAAEEQUACCCALLO+22ACCCBLLOEQUUAACCAALO+3AACCBBHIEQQUACCCALOO+4EXPPBEQUUAACCAALO+5ACCCCLOOEEQUACCCALLO+66ACCCCHHIEQUUAACCAALO+7AA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机修应急预案(7篇)-机械维修应急预案
- 起重机械培训试题及答案
- 2026北京文旅局面试题及答案
- 2026北京中科软面试题及答案
- 2026备战教师面试题及答案
- 2026毕业生英语面试题及答案
- 2026变局危机面试题目及答案
- 2026标注岗位面试题及答案解析
- 2026滨江学前面试题目及答案
- 2026播音面试题材分类及答案
- 2026年湖北省烟草专卖局招聘笔试真题
- 厨卫间防水施工方案
- 人教版六年级语文上册电子书
- 郑州市金水区2025-2026学年第二学期三年级语文期末考试卷(部编版含答案)
- 物流公司业务部管理制度
- (正式版)DB33∕T 1224-2020 《城市轨道交通结构监测技术规程》
- 北森测评题库及答案2026
- 安防综合平台运维服务方案
- 2025年危化品安全员资格证考试题库及答案
- 雨课堂在线学堂《信息素养-学术研究的必修课》作业单元考核答案
- DB11∕T 1743-2020 海绵城市建设设计标准
评论
0/150
提交评论