




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系網(wǎng)站刪除積分分離PID控制算法程序2007-01-05 15:23;*P10,積分分離PID控制算法程序*;T、TD、TI、KP依次從30H,33H,36H,39H開始。;A,B,C,A,的值依次存在BLOCK1,BLOCK2,BLOCK3BLOCK4的地址里;這里B與C值相同;這里R(k)給的是定值ORG0000HEEQU20H;一閾值GKEQU23H;G(k)GK1EQU26H;G(k-1)FKEQU29H;F(k)FK1EQU2CH;F(k-1)BLOCK1EQU50H;ABLOCK2EQU53H;BBLOCK3EQU56H;CBLOCK4EQU5AH;AUKEQU5DH;存放結(jié)果BUFFEQU43H;暫存區(qū)BUFF1EQU46HBUFF2EQU49HBUFFR0EQU4CHRECEQU63H;采樣次數(shù)RKEQU66H;R(k)CKEQU69H;采樣數(shù)據(jù)始址EKEQU6CH;存放偏差值E(k)的始址EK1EQU70H;存放E(k-1)的始址TEST:MOVRK,#01H;常數(shù)Rk1.25的BCD碼浮點數(shù)MOVRK+1,#12HMOVRK+2,#50H;MOVE,#7EH;設(shè)定一閾值0.001的BCD碼浮點數(shù);MOVE+1,#10H;MOVE+2,#00HMOVE,#00H;閾值為0.3MOVE+1,#30HMOVE+2,#00HMOV3CH,#01H;常數(shù)1的BCD碼浮點數(shù)MOV3DH,#10HMOV3EH,#00HMOV40H,#01H;常數(shù)2的BCD碼浮點數(shù)MOV41H,#20HMOV42H,#00HMOV30H,#01H;T2.34的BCD碼浮點數(shù)MOV31H,#23HMOV32H,#40HMOV33H,#01H;Td3.54的BCD碼浮點數(shù)MOV34H,#35HMOV35H,#40HMOV36H,#01H;Ti1.12的BCD碼浮點數(shù)MOV37H,#11HMOV38H,#20HMOV39H,#01H;Kp1.25的BCD碼浮點數(shù)MOV3AH,#12HMOV3BH,#50HMOVR0,#E;將其轉(zhuǎn)換成二進制浮點操作數(shù)LCALLBTOFMOVR0,#RKLCALLBTOFMOVR0,#3CHLCALLBTOFMOVR0,#40HLCALLBTOFMOVR0,#39HLCALLBTOFMOVR0,#36HLCALLBTOF;將其轉(zhuǎn)換成二進制浮點操作數(shù)MOVR0,#33H;指向碼浮點操作數(shù)TdLCALLBTOF;將其轉(zhuǎn)換成二進制浮點操作數(shù)MOVR0,#30H;指向碼浮點操作數(shù)TLCALLBTOF;將其轉(zhuǎn)換成二進制浮點操作數(shù)MOVR1,#BUFFR0;保存30H中的值即T值LCALLFMOVR0MOVR1,#36H;計算A值(1+T/Ti+Td/T).KpLCALLFDIVMOVR1,#3CH;常數(shù)1LCALLFADDMOVR0,#33H;保存33H中的值MOVR1,#BUFFLCALLFMOVR0MOVR1,#BUFFR0LCALLFDIVMOVR1,#30H;30H里存的是T/Ti+1LCALLFADDMOVR1,#39HLCALLFMULMOVR1,#BLOCK1;將結(jié)果保存在BLOCK1中LCALLFMOVR0MOVR1,#BUFFR0;30H恢復(fù)原值MOVR0,#30HLCALLFMOVMOVR1,#BUFF;33H恢復(fù)原值MOVR0,#33HLCALLFMOVMOVR0,#40H;計算B的值Kp.(1+2.Td/T)MOVR1,#33HLCALLFMULMOVR1,#30HLCALLFDIVMOVR1,#3CHLCALLFADDMOVR1,#39HLCALLFMULMOVR1,#BLOCK2;保存B值到BLOCK2中LCALLFMOVR0MOVR0,#39H;計算C的值Kp.Td/TMOVR1,#33HLCALLFMULMOVR1,#30HLCALLFDIVMOVR1,#BLOCK3;保存C值到BLOCK3中LCALLFMOVR0MOVR0,#33H;計算A,保存33H中的值MOVR1,#BUFFR0LCALLFMOVR0MOVR1,#30HLCALLFDIVMOVR1,#3CHLCALLFADDMOVR1,#39HLCALLFMULMOVR1,#BLOCK4;保存A值到BLOCK4中LCALLFMOVR0MOVR1,#BUFFR0;恢復(fù)33H中的值LCALLFMOVMOVR0,#EK1;將EK1,F(xiàn)K1,GK1設(shè)初值0LCALLFCLRMOVR0,#FK1LCALLFCLRMOVR0,#GK1LCALLFCLRMOVREC,#04H;設(shè)置采樣次數(shù)LOOP:MOVCK,#01H;采樣數(shù)據(jù)暫時給了一個定值MOVCK+1,#10HMOVCK+2,#00HMOVR0,#CKLCALLBTOFMOVR0,#RK;保存R(k)中的值MOVR1,#BUFFR0LCALLFMOVR0MOVR1,#CKLCALLFSUB;計算R(k)-C(k)的值送給E(k)MOVR1,#EKLCALLFMOVR0MOVR1,#BUFFR0LCALLFMOV;恢復(fù)R(K)的值,釋放、BUFFR0MOVR0,#BUFFR0;EK存到BUFFR0MOVR1,#EKLCALLFMOVLCALLFABS;求EK的絕對值MOVR1,#E;判斷EK的絕對值與E的大小LCALLFCMPJCPID;EKG(k-1)MOVR1,#GKLCALLFMOVMOVR0,#FK1;F(k)-F(K-1)MOVR1,#FKLCALLFMOVMOVR0,#EK1;E(K)-E(K-1)MOVR1,#EKLCALLFMOVMOVR0,#UK;UK轉(zhuǎn)換成BCD碼浮點數(shù)輸出LCALLFTOBLCALLDELAY;等待采樣時刻DJNZREC,NEXT1SJMP$NEXT1:LJMPLOOPDELAY:MOVR7,#02HDELAY1:MOVR6,#0FFHDELAY2:DJNZR6,DELAY2DJNZR7,DELAY1RET;()標(biāo)號:功能:浮點數(shù)格式化;入口條件:待格式化浮點操作數(shù)在R0中。;出口信息:已格式化浮點操作數(shù)仍在R0中。;影響資源:PSW、A、R2、R3、R4、位1FH堆棧需求:字節(jié)FSDT:LCALLMVR0;將待格式化操作數(shù)傳送到第一工作區(qū)中LCALLRLN;通過左規(guī)完成格式化LJMPMOV0;將已格式化浮點操作數(shù)傳回到R0中;()標(biāo)號:功能:浮點數(shù)加法;入口條件:被加數(shù)在R0中,加數(shù)在R1中。;出口信息:OV=0時,和仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH堆棧需求:字節(jié)FADD:CLRF0;設(shè)立加法標(biāo)志SJMPAS;計算代數(shù)和;()標(biāo)號:功能:浮點數(shù)減法;入口條件:被減數(shù)在R0中,減數(shù)在R1中。;出口信息:OV=0時,差仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH堆棧需求:字節(jié)FSUB:SETBF0;設(shè)立減法標(biāo)志AS:LCALLMVR1;計算代數(shù)和。先將R1傳送到第二工作區(qū)MOVC,F0;用加減標(biāo)志來校正第二操作數(shù)的有效符號CLRA;*?應(yīng)加的一條語句RRCAXRLA,R1MOVC,ACC.7ASN:MOV1EH,C;將第二操作數(shù)的有效符號存入位1EH中XRLA,R0;與第一操作數(shù)的符號比較RLCAMOVF0,C;保存比較結(jié)果LCALLMVR0;將R0傳送到第一工作區(qū)中LCALLAS1;在工作寄存器中完成代數(shù)運算MOV0:INCR0;將結(jié)果傳回到R0中的子程序入口INCR0MOVA,R4;傳回尾數(shù)的低字節(jié)MOVR0,ADECR0MOVA,R3;傳回尾數(shù)的高字節(jié)MOVR0,ADECR0MOVA,R2;取結(jié)果的階碼MOVC,1FH;取結(jié)果的數(shù)符MOVACC.7,C;拼入階碼中MOVR0,ACLRACC.7;不考慮數(shù)符CLROV;清除溢出標(biāo)志CJNEA,#3FH,MV01;階碼是否上溢?*應(yīng)為#40HSETBOV;設(shè)立溢出標(biāo)志MV01:MOVA,R0;取出帶數(shù)符的階碼RETMVR0:MOVA,R0;將R0傳送到第一工作區(qū)中的子程序MOVC,ACC.7;將數(shù)符保存在位1FH中MOV1FH,CMOVC,ACC.6;將階碼擴充為補碼MOVACC.7,CMOVR2,A;存放在R2中INCR0MOVA,R0;將尾數(shù)高字節(jié)存放在R3中MOVR3,A;INCR0MOVA,R0;將尾數(shù)低字節(jié)存放在R4中MOVR4,ADECR0;恢復(fù)數(shù)據(jù)指針DECR0RETMVR1:MOVA,R1;將R1傳送到第二工作區(qū)中的子程序MOVC,ACC.7;將數(shù)符保存在位1EH中MOV1EH,CMOVC,ACC.6;將階碼擴充為補碼MOVACC.7,CMOVR5,A;存放在R5中INCR1MOVA,R1;將尾數(shù)高字節(jié)存放在R6中MOVR6,AINCR1MOVA,R1;將尾數(shù)低字節(jié)存放在R7中MOVR7,ADECR1;恢復(fù)數(shù)據(jù)指針DECR1RETAS1:MOVA,R6;讀取第二操作數(shù)尾數(shù)高字節(jié)ORLA,R7JZAS2;第二操作數(shù)為零,不必運算MOVA,R3;讀取第一操作數(shù)尾數(shù)高字節(jié)ORLA,R4JNZEQMOVA,R6;第一操作數(shù)為零,結(jié)果以第二操作數(shù)為準(zhǔn)MOVR3,AMOVA,R7MOVR4,AMOVA,R5MOVR2,AMOVC,1EHMOV1FH,CAS2:RETEQ:MOVA,R2;對階,比較兩個操作數(shù)的階碼XRLA,R5JZAS4;階碼相同,對階結(jié)束JBACC.7,EQ3;階符互異MOVA,R2;階符相同,比較大小CLRCSUBBA,R5JCEQ4EQ2:CLRC;第二操作數(shù)右規(guī)一次MOVA,R6;尾數(shù)縮小一半RRCAMOVR6,AMOVA,R7RRCAMOVR7,AINCR5;階碼加一ORLA,R6;尾數(shù)為零否?JNZEQ;尾數(shù)不為零,繼續(xù)對階MOVA,R2;尾數(shù)為零,提前結(jié)束對階MOVR5,ASJMPAS4EQ3:MOVA,R2;判斷第一操作數(shù)階符JNBACC.7,EQ2;如為正,右規(guī)第二操作數(shù)EQ4:CLRCLCALLRR1;第一操作數(shù)右規(guī)一次ORLA,R3;尾數(shù)為零否?JNZEQ;不為零,繼續(xù)對階MOVA,R5;尾數(shù)為零,提前結(jié)束對階MOVR2,AAS4:JBF0,AS5;尾數(shù)加減判斷MOVA,R4;尾數(shù)相加ADDA,R7MOVR4,AMOVA,R3ADDCA,R6MOVR3,AJNCAS2LJMPRR1;有進位,右規(guī)一次AS5:CLRC;比較絕對值大小MOVA,R4SUBBA,R7MOVB,AMOVA,R3SUBBA,R6JCAS6MOVR4,B;第一尾數(shù)減第二尾數(shù)MOVR3,ALJMPRLN;結(jié)果規(guī)格化AS6:CPL1FH;結(jié)果的符號與第一操作數(shù)相反CLRC;結(jié)果的絕對值為第二尾數(shù)減第一尾數(shù)MOVA,R7SUBBA,R4MOVR4,AMOVA,R6SUBBA,R3MOVR3,ARLN:MOVA,R3;浮點數(shù)規(guī)格化ORLA,R4;尾數(shù)為零否?JNZRLN1MOVR2,#0C1H;階碼取最小值*?應(yīng)為#C0HRETRLN1:MOVA,R3JBACC.7,RLN2;尾數(shù)最高位為一否?CLRC;不為一,左規(guī)一次LCALLRL1SJMPRLN;繼續(xù)判斷RLN2:CLROV;規(guī)格化結(jié)束RETRL1:MOVA,R4;第一操作數(shù)左規(guī)一次RLCA;尾數(shù)擴大一倍MOVR4,AMOVA,R3RLCAMOVR3,ADECR2;階碼減一CJNER2,#0C0H,RL1E;階碼下溢否?*應(yīng)改為CJNER2,#0BFH,RL1E;CLRAMOVR3,A;階碼下溢,操作數(shù)以零計MOVR4,AMOVR2,#0C1H;*應(yīng)改為MOVR2,#0C0HRL1E:CLROVRETRR1:MOVA,R3;第一操作數(shù)右規(guī)一次RRCA;尾數(shù)縮小一半MOVR3,AMOVA,R4RRCAMOVR4,AINCR2;階碼加一CLROV;清溢出標(biāo)志CJNER2,#40H,RR1E;階碼上溢否?MOVR2,#3FH;階碼溢出SETBOVRR1E:RET;()標(biāo)號:功能:浮點數(shù)乘法;入口條件:被乘數(shù)在R0中,乘數(shù)在R1中。;出口信息:OV=0時,積仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH堆棧需求:字節(jié)FMUL:LCALLMVR0;將R0傳送到第一工作區(qū)中MOVA,R0XRLA,R1;比較兩個操作數(shù)的符號RLCAMOV1FH,C;保存積的符號LCALLMUL0;計算積的絕對值LJMPMOV0;將結(jié)果傳回到R0中MUL0:LCALLMVR1;將R1傳送到第二工作區(qū)中MUL1:MOVA,R3;第一尾數(shù)為零否?ORLA,R4JZMUL6MOVA,R6;第二尾數(shù)為零否?ORLA,R7JZMUL5MOVA,R7;計算R3R4R6R7R3R4MOVB,R4MULABMOVA,BXCHA,R7MOVB,R3MULABADDA,R7MOVR7,ACLRAADDCA,BXCHA,R4MOVB,R6MULABADDA,R7MOVR7,AMOVA,BADDCA,R4MOVR4,ACLRARLCAXCHA,R3MOVB,R6MULABADDA,R4MOVR4,AMOVA,BADDCA,R3MOVR3,AJBACC.7,MUL2;積為規(guī)格化數(shù)否?R7四舍五入MOVA,R7;左規(guī)一次RLCAMOVR7,ALCALLRL1MUL2:MOVA,R7JNBACC.7,MUL3INCR4MOVA,R4JNZMUL3INCR3MOVA,R3JNZMUL3MOVR3,#80HINCR2MUL3:MOVA,R2;求積的階碼ADDA,R5MD:MOVR2,A;階碼溢出判斷JBACC.7,MUL4JNBACC.6,MUL6MOVR2,#3FH;階碼上溢,設(shè)立標(biāo)志SETBOVRETMUL4:JBACC.6,MUL6MUL5:CLRA;結(jié)果清零(因子為零或階碼下溢)MOVR3,AMOVR4,AMOVR2,#41HMUL6:CLROVRET;()標(biāo)號:功能:浮點數(shù)除法;入口條件:被除數(shù)在R0中,除數(shù)在R1中。;出口信息:OV=0時,商仍在R0中,OV=1時,溢出。;影響資源:PSW、A、B、R2R7、位1EH、1FH堆棧需求:字節(jié)FDIV:INCR0MOVA,R0INCR0ORLA,R0DECR0DECR0JNZDIV1MOVR0,#41H;被除數(shù)為零,不必運算CLROVRETDIV1:INCR1MOVA,R1INCR1ORLA,R1DECR1DECR1JNZDIV2SETBOV;除數(shù)為零,溢出RETDIV2:LCALLMVR0;將R0傳送到第一工作區(qū)中MOVA,R0XRLA,R1;比較兩個操作數(shù)的符號RLCAMOV1FH,C;保存結(jié)果的符號LCALLMVR1;將R1傳送到第二工作區(qū)中LCALLDIV3;調(diào)用工作區(qū)浮點除法LJMPMOV0;回傳結(jié)果DIV3:CLRC;比較尾數(shù)的大小MOVA,R4SUBBA,R7MOVA,R3SUBBA,R6JCDIV4LCALLRR1;被除數(shù)右規(guī)一次SJMPDIV3DIV4:CLRA;借用R0R1R2作工作寄存器XCHA,R0;清零并保護之PUSHACCCLRAXCHA,R1PUSHACCMOVA,R2PUSHACCMOVB,#10H;除法運算,R3R4R6R7R0R1DIV5:CLRCMOVA,R1RLCAMOVR1,AMOVA,R0RLCAMOVR0,AMOVA,R4RLCAMOVR4,AXCHA,R3RLCAXCHA,R3MOVF0,CCLRCSUBBA,R7MOVR2,AMOVA,R3SUBBA,R6ANLC,/F0JCDIV6MOVR3,AMOVA,R2MOVR4,AINCR1DIV6:DJNZB,DIV5MOVA,R6;四舍五入CLRCRRCASUBBA,R3CLRAADDCA,R1;將結(jié)果存回R3R4MOVR4,ACLRAADDCA,R0MOVR3,APOPACC;恢復(fù)R0R1R2MOVR2,APOPACCMOVR1,APOPACCMOVR0,AMOVA,R2;計算商的階碼CLRCSUBBA,R5LCALLMD;階碼檢驗LJMPRLN;規(guī)格化;()標(biāo)號:功能:浮點數(shù)清零;入口條件:操作數(shù)在R0中。;出口信息:操作數(shù)被清零。;影響資源:A堆棧需求:字節(jié)FCLR:INCR0INCR0CLRAMOVR0,ADECR0MOVR0,ADECR0MOVR0,#41HRET;()標(biāo)號:功能:浮點數(shù)判零;入口條件:操作數(shù)在R0中。;出口信息:若累加器A為零,則操作數(shù)R0為零,否則不為零。;影響資源:A堆棧需求:字節(jié)FZER:INCR0INCR0MOVA,R0DECR0ORLA,R0DECR0JNZZEROMOVR0,#41HZERO:RET;()標(biāo)號:功能:浮點數(shù)傳送;入口條件:源操作數(shù)在R1中,目標(biāo)地址為R0。;出口信息:R0=R1,R1不變。;影響資源:A堆棧需求:字節(jié)FMOV:INCR0INCR0INCR1INCR1MOVA,R1MOVR0,ADECR0DECR1MOVA,R1MOVR0,ADECR0DECR1MOVA,R1MOVR0,ARET;(.1)標(biāo)號:R0功能:浮點數(shù)傳送;入口條件:源操作數(shù)在R0中,目標(biāo)地址為R1。;出口信息:R1=R0,R0不變。;影響資源:A堆棧需求:字節(jié)FMOVR0:INCR1INCR1INCR0INCR0MOVA,R0MOVR1,ADECR1DECR0MOVA,R0MOVR1,ADECR1DECR0MOVA,R0MOVR1,ARET;()標(biāo)號:功能:雙字節(jié)十六進制定點數(shù)轉(zhuǎn)換成格式化浮點數(shù);入口條件:雙字節(jié)定點數(shù)的絕對值在R0中,數(shù)符在位1FH中,整數(shù)部分的位數(shù)在A中。;出口信息:轉(zhuǎn)換成格式化浮點數(shù)在R0中(三字節(jié))。;影響資源:PSW、A、R2、R3、R4、位1FH堆棧需求:字節(jié)DTOF:MOVR2,A;按整數(shù)的位數(shù)初始化階碼MOVA,R0;將定點數(shù)作尾數(shù)MOVR3,AINCR0MOVA,R0MOVR4,ADECR0LCALLRLN;進行規(guī)格化LJMPMOV0;傳送結(jié)果到R0中;()標(biāo)號:功能:格式化浮點數(shù)轉(zhuǎn)換成雙字節(jié)定點數(shù);入口條件:格式化浮點操作數(shù)在R0中。;出口信息:OV=1時溢出,OV=0時轉(zhuǎn)換成功:定點數(shù)的絕對值在R0中(雙字節(jié)),數(shù)符;在位1FH中,F(xiàn)0=1時為整數(shù),CY=1時為一字節(jié)整數(shù)一字節(jié)小數(shù),否則為純小數(shù)。;影響資源:PSW、A、B、R2、R3、R4、位1FH堆棧需求:字節(jié)FTOD:LCALLMVR0;將R0傳送到第一工作區(qū)MOVA,R2JZFTD4;階碼為零,純小數(shù)JBACC.7,FTD4;階碼為負(fù),純小數(shù)SETBCSUBBA,#10HJCFTD1SETBOV;階碼大于,溢出RETFTD1:SETBCMOVA,R2SUBBA,#8;階碼大于否?JCFTD3FTD2:MOVB,#10H;階碼大于,按雙字節(jié)整數(shù)轉(zhuǎn)換LCALLFTD8SETBF0;設(shè)立雙字節(jié)整數(shù)標(biāo)志CLRCCLROVRETFTD3:MOVB,#8;按一字節(jié)整數(shù)一字節(jié)小數(shù)轉(zhuǎn)換LCALLFTD8SETBC;設(shè)立一字節(jié)整數(shù)一字節(jié)小數(shù)標(biāo)志CLRF0CLROVRETFTD4:MOVB,#0;按純小數(shù)轉(zhuǎn)換LCALLFTD8CLROV;設(shè)立純小數(shù)標(biāo)志CLRF0CLRCRETFTD8:MOVA,R2;按規(guī)定的整數(shù)位數(shù)進行右規(guī)*階碼是擴展后的值CJNEA,B,FTD9MOVA,R3;將雙字節(jié)結(jié)果傳送到R0中MOVR0,AINCR0MOVA,R4MOVR0,ADECR0RETFTD9:CLRCLCALLRR1;右規(guī)一次SJMPFTD8;()標(biāo)號:功能:浮點碼轉(zhuǎn)換成格式化浮點數(shù);入口條件:浮點碼操作數(shù)在R0中。;出口信息:轉(zhuǎn)換成的格式化浮點數(shù)仍在R0中。;影響資源:PSW、A、B、R2R7、位1DH1FH堆棧需求:字節(jié)BTOF:INCR0;判斷是否為零。INCR0MOVA,R0MOVR7,ADECR0MOVA,R0MOVR6,ADECR0ORLA,R7JNZBTF0MOVR0,#41H;為零,轉(zhuǎn)換結(jié)束。RETBTF0:MOVA,R0MOVC,ACC.7MOV1DH,C;保存數(shù)符。CLR1FH;以絕對值進行轉(zhuǎn)換。MOVC,ACC.6;擴充階碼為八位。MOVACC.7,CMOVR0,AJNCBTF1ADDA,#19;是否小于?JCBTF2MOVR0,#41H;小于時以計。INCR0MOVR0,#0INCR0MOVR0,#0DECR0DECR0RETBTF1:SUBBA,#19JCBTF2MOVA,#3FH;大于時封頂。MOVC,1DHMOVACC.7,CMOVR0,AINCR0MOVR0,#0FFHINCR0MOVR0,#0FFHDECR0DECR0RETBTF2:CLRA;準(zhǔn)備將碼尾數(shù)轉(zhuǎn)換成十六進制浮點數(shù)。MOVR4,AMOVR3,AMOVR2,#10H;至少兩個字節(jié)。BTF3:MOVA,R7ADDA,R7DAAMOVR7,AMOVA,R6ADDCA,R6DAAMOVR6,AMOVA,R4RLCAMOVR4,AMOVA,R3RLCAMOVR3,ADECR2JNBACC.7,BTF3;直到尾數(shù)規(guī)格化。MOVA,R6;四舍五入。ADDA,#0B0H;*加#80H,也可以CLRAADDCA,R4MOVR4,ACLRAADDCA,R3MOVR3,AJNCBTF4MOVR3,#80H;*有進位右規(guī)一次INCR2BTF4:MOVDPTR,#BTFL;準(zhǔn)備查表得到十進制階碼對應(yīng)的浮點數(shù)。MOVA,R0ADDA,#19;計算表格偏移量。MOVB,#3MULABADDA,DPLMOVDPL,AJNCBTF5INCDPHBTF5:CLRA;查表。MOVCA,A+DPTRMOVC,ACC.6MOVACC.7,CMOVR5,AMOVA,#1MOVCA,A+DPTRMOVR6,AMOVA,#2MOVCA,A+DPTRMOVR7,ALCALLMUL1;將階碼對應(yīng)的浮點數(shù)和尾數(shù)對應(yīng)的浮點數(shù)相乘。MOVC,1DH;取出數(shù)符。MOV1FH,CLJMPMOV0;傳送轉(zhuǎn)換結(jié)果。;()標(biāo)號:功能:格式化浮點數(shù)轉(zhuǎn)換成浮點碼;入口條件:格式化浮點操作數(shù)在R0中。;出口信息:轉(zhuǎn)換成的浮點碼仍在R0中。;影響資源:PSW、A、B、R2R7、位1DH1FH堆棧需求:字節(jié)FTOB:INCR0MOVA,R0INCR0ORLA,R0DECR0DECR0JNZFTB0MOVR0,#41HRETFTB0:MOVA,R0MOVC,ACC.7MOV1DH,CCLRACC.7MOVR0,ALCALLMVR0MOVDPTR,#BFL0;絕對值大于或等于時的查表起點。MOVB,#0;十的次冪。MOVA,R2JNBACC.7,FTB1MOVDPTR,#BTFL;絕對值小于時的查表起點。MOVB,#0EDH;十的次冪。ADDA,#16JNCFTB1MOVDPTR,#BFLN;絕對值大于或等于時的查表起點。MOVB,#0FAH;十的次冪。FTB1:CLRA;查表,找到一個比待轉(zhuǎn)換浮點數(shù)大的整數(shù)冪。MOVCA,A+DPTRMOVC,ACC.6MOVACC.7,CMOVR5,AMOVA,#1MOVCA,A+DPTRMOVR6,AMOVA,#2MOVCA,A+DPTRMOVR7,AMOVA,R5;和待轉(zhuǎn)換浮點數(shù)比較。CLRCSUBBA,R2JBACC.7,FTB2;差為負(fù)數(shù)。JNZFTB3MOVA,R6CLRCSUBBA,R3JCFTB2JNZFTB3MOVA,R7CLRCSUBBA,R4JCFTB2JNZFTB3MOVR5,B;正好是表格中的數(shù)。INCR5;冪加一。MOVR6,#10H;尾數(shù)為。MOVR7,#0SJMPFTB6;傳送轉(zhuǎn)換結(jié)果。FTB2:INCDPTR;準(zhǔn)備表格下一項。INCDPTRINCDPTRINCB;冪加一。SJMPFTB1;FTB3:PUSHB;保存冪值。LCALLDIV3;相除,得到一個二進制浮點數(shù)的純小數(shù)。FTB4:MOVA,R2;取階碼。JZFTB5;為零嗎?CLRC;LCALLRR1;右規(guī)。SJMPFTB4FTB5:POPACC;取出冪值。MOVR5,A;作為十進制浮點數(shù)的階碼。LCALLHB2;轉(zhuǎn)換尾數(shù)的十分位和百分位。MOVR6,ALCALLHB2;轉(zhuǎn)換尾數(shù)的千分位和萬分位。MOVR7,AMOVA,R3;四舍五入。RLCACLRAADDCA,R7DAAMOVR7,ACLRAADDCA,R6DAAMOVR6,AJNCFTB6MOVR6,#10HINCR5FTB6:INCR0;存放轉(zhuǎn)換結(jié)果。INCR0MOVA,R7MOVR0,ADECR0MOVA,R6MOVR0,ADECR0MOVA,R5MOVC,1DH;取出數(shù)符。MOVACC.7,CMOVR0,ARETHB2:MOVA,R4;尾數(shù)擴大倍。MOVB,#100MULABMOVR4,AMOVA,BXCHA,R3MOVB,#100MULABADDA,R3MOVR3,AJNCHB21INCBHB21:MOVA,B;將整數(shù)部分轉(zhuǎn)換成碼。MOVB,#10DIVABSWAPAORLA,BRETBTFL:DB41H,0ECH,1EH;1.0000E-19DB45H,93H,93H;1.0000E-18DB48H,0B8H,78H;1.0000E-17DB4BH,0E6H,96H;1.0000E-16DB4FH,90H,1DH;1.0000E-15DB52H,0B4H,25H;1.0000E-14DB55H,0E1H,2EH;1.0000E-13DB59H,8CH,0BDH;1.0000E-12DB5CH,0AFH,0ECH;1.0000E-11DB5FH,0DBH,0E7H;1.0000E-10DB63H,89H,70H;1.0000E-9DB66H,0ABH,0CCH;1.0000E-8DB69H,0D6H,0C0H;1.0000E-7BFLN
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年現(xiàn)代物流管理考試卷及答案
- 2025年土壤學(xué)基本概念考試試題及答案
- 一級造價師考試試題及答案
- 提點合同協(xié)議書怎么寫
- 中國武漢國際商貿(mào)物流港項目規(guī)劃設(shè)計策劃
- (高清版)DB1311∕T 058-2006 馬連小棗栽培技術(shù)規(guī)程
- 湖北省十堰市六縣市一中教聯(lián)體2024-2025學(xué)年高一下學(xué)期4月期中數(shù)學(xué)試題(解析版)
- 護理教學(xué)實施路徑與方法
- 2025年甲基四氫苯酐項目發(fā)展計劃
- 航天飛機關(guān)鍵部件鈦合金板材供應(yīng)合同
- 廣東深圳光明新區(qū)渣土受納場12·20-特別重大滑坡事故調(diào)查報告
- 2022年05月四川省度綿陽市公開遴選公務(wù)員考試參考題庫答案詳解
- T-ZAQ 10116-2023 新時代基層理論宣講0576 工作法操作規(guī)范
- (完整word版)新《中華頌》朗誦稿
- 香云紗的材料與工藝
- 帶電工作絕緣手套CE認(rèn)證EN 60903
- 硫磺安全技術(shù)說明書MSDS
- 我和植物共成長向日葵種植日記課件
- 海南大學(xué)國際教育學(xué)院招考聘用勞務(wù)派遣人員2人模擬檢測試卷【共1000題含答案解析】
- 中國省份城市中英文對照表
- GB/Z 18727-2002企業(yè)應(yīng)用產(chǎn)品數(shù)據(jù)管理(PDM)實施規(guī)范
評論
0/150
提交評論