说明此程序清单的格式与注解以书中为准.docx

上传人:b****8 文档编号:23618222 上传时间:2023-05-19 格式:DOCX 页数:201 大小:68.72KB
下载 相关 举报
说明此程序清单的格式与注解以书中为准.docx_第1页
第1页 / 共201页
说明此程序清单的格式与注解以书中为准.docx_第2页
第2页 / 共201页
说明此程序清单的格式与注解以书中为准.docx_第3页
第3页 / 共201页
说明此程序清单的格式与注解以书中为准.docx_第4页
第4页 / 共201页
说明此程序清单的格式与注解以书中为准.docx_第5页
第5页 / 共201页
点击查看更多>>
下载资源
资源描述

说明此程序清单的格式与注解以书中为准.docx

《说明此程序清单的格式与注解以书中为准.docx》由会员分享,可在线阅读,更多相关《说明此程序清单的格式与注解以书中为准.docx(201页珍藏版)》请在冰豆网上搜索。

说明此程序清单的格式与注解以书中为准.docx

说明此程序清单的格式与注解以书中为准

说明:

此程序清单的格式与注解以书中为准。

程序清单:

清单1

ORG2000H

ADD0:

CLRC;双精度加法子程序

ADC0:

XCHA,R7;双精度带进位位加法子程序

ADDCA,R3

XCHA,R7

XCHA,R6

ADDCA,R2

XCHA,R6

RET

ADD1:

CLRC;双精度加法子程序

ADC1:

XCHA,R7;双精度带进位位加法子程序

ADDCA,R5

XCHA,R7

XCHA,R6

ADDCA,R4

XCHA,R6

RET

ADD2:

CLRC;双精度加法子程序

ADD2:

XCHA,R7;双精度带进位位加法子程序

RLCA

XCHA,R7

XCHA,R6

RLCA

XCHA,R6

RET

SUBO:

CLRC;双精度减法子程序

SBCO:

XCHA,R7;双精度带进位位减法子程序

SUBBA,R3

XCHA,R7

XCHA,R6

SUBBA,R2

XCHA,R6

RET

SUB1:

CLRC;双精度减法子程序

SBC1:

XCHA,R7;双精度带进位位减法子程序

SUBBA,R5

XCHA,R7

XCHA,R6

SUBBA,R2

XCHA,R6

RET

EX:

XCHA,R0;两浮点数交换子程序

XCHA,R4

XCHA,R0

EXT:

XCHA,R1;两浮点数的尾数交换子程序

XCHA,R5

XCHA,R1

EXX:

XCHA,R2;双字节交换

XCHA,R6

XCHA,R2

XCHA,R3

XCHA,R7

XCHA,R3

RET

SAVO:

MOVR4,08H;第1操作数(浮点数)装入0CH~0FH中

SAVT:

MOVR5,09H

MOVR6,0AH

MOVR7,0BH

RET

DP:

MOVA,R5;取存积(商)数符,计算积(商)的阶码子程序

XRLA,R1

RLCA

MOV7EH,C;存积(商)数符

MOVA,R0

ADDA,R4;阶码相加(除数阶码已变为补码)

JNCDP1

ADDA,#80H;有进位,和再加上80H,如有进位,为溢出

MOVR4,A

RET

DP1:

SUBBA,#80H;无进位,和减去80H,如有借位或差等于0,也为溢出

MOVR4,A

RET

SHIF:

CLRC;尾数算术左移1位子程序

H0:

XCHA,R7;尾数带进位左移1位

RLCA

XCHA,R7

XCHA,R6

RLCA

XCHA,R6

XCHA,R5

RLCA

XCHA,R5

RET

LR0:

XCHA,R3;尾数带进位位左移1位子程序

RLCA

XCHA,R3

XCHA,R2

RLCA

XCHA,R2

XCHA,R1

RLCA

XCHA,R1

RET

SRA0:

CLRC;尾数逻辑右移1位子程序

SRA:

XCHA,R5;尾数带进位位右移1位

SRA1:

RRCA;AR6R7带进位位右移1位,结果在R5R6R7中

XCHA,R5

XCHA,R6

RRCA

XCHA,R6

XCHA,R7

RRCA

XCHA,R7

RET

RRO:

XCHA,R1;尾数带进位位右移1位子程序

RRCA

XCHA,R1

XCHA,R2

RRCA

XCHA,R2

XCHA,R3

RRCA

XCHA,R3

RET

INC3:

INCR7;尾数增1子程序

CJNER7,#0,RET0

INCR6

CJNER6,#0,RET0

INCR5

RET0:

RET清单2

FPCP:

MOVA,R1;被减数x1与减数x2比较大小子程序

XRLA,R5

JNBACC.7,CP1;两数同号,转CP1

CP0:

MOVA,R1

CLRC

SUBBA,R5;异号,比较尾数高位字节即可

RET

CP1:

MOVA,R1

JNBACC.7,CP2;正数与正数相比较,转CP2

ACALLCP2

JZCP4;除非两数相等,不然转CP4

CPLC;负数与负数比较对CY的影响与正数相比恰恰相反

RET

CP2:

MOVA,R4;先比较两数的阶

CLRC

SUBBA,R0

JNZCP4;不等,即可定下大小关系

CP3:

MOVA,R5

SUBBA,R1;阶相等时,由尾数相比较定大小

JNZCP4

MOVA,R6;依高位字节到低位字节的顺序比较

SUBBA,R2

JNZCP4

MOVA,R7;只有阶码和尾数对应相等时,两数才相等

SUBBA,R3;比较结果ACC=0,两数相等,不然CY=1时x1>x2,

CP4:

RET;CY=0时,x1>x2程序清单:

清单3

FPSU:

XRL0DH,#80H;浮点减法子程序,减数数符求反后为加数

FPAD:

MOVA,R0;浮点加法子程序

JZDON;被加数等于0,加数为和

FPLAD:

MOVA,R4

JZSAV0;加数等于0,被加数为和

NX2:

MOVA,R1

RLCA

MOV7AH,C;存被加数数符

MOVA,R5

RLCA

MOV7BH,C;存加数数符

ORL09H,#80H

ORL0DH,#80H;恢复尾数最高位

CLRC

MOVA,R4

SUBBA,R0;加数阶减去被加数的阶

JNCNX3

CPLA

INCA

MOVR4,A;阶差为负,取绝对值

ADDA,#0E7H

JCEXAD;|阶差|≥24,取被加数为和

ACALLSRA0;右移加数尾数,对阶

DJNZR4,$-2

MOVA,R0

MOVR4,A;被加数的阶(大阶)为和的阶

JNCGOON

ACALLINC3;尾数欲截去部分四舍五入

SJMPGOON

NX3:

MOVR0,A

JZGOON;阶差为0,不对阶

ADDA,#0E7H

JCCOM;阶差≥24,取加数为和

LOOP:

CLRC

ACALLRR0

DJNZR0,LOOP;右移被加数尾数,对阶

JNCGOON

INCR3

CJNER3,#0,GOON

INCR2

CJNER2,#0,GOON

INCR1;对尾数截去部分四舍五入

GOON:

MOVA,2FH

ADDA,#4;判断两数符是否相同

JNBACC.3,SAMS;同号,转SAMS

ACALLSUB0;异号,尾数相减,以加数作为被减数

MOVA,R5

SUBBA,R1

MOVR5,A

JNCNOM

CPL7BH;不够减,加数数符求反

CLRC

CLRA

SUBBA,R7

MOVR7,A

CLRA

SUBBA,R6

MOVR6,A

CLRA

SUBBA,R5

MOVR5,A;差求补

NOM:

MOVA,R5

ORLA,R6

ORLA,R7

JZDON0;差为0,取阶码为0

NX5:

MOVA,R5

JBACC.7,COM

ACALLSHIF

DJNZR4,NX5;左规检查

OV1:

LJMP0FFFFH;阶码变为0,为溢出(可用LJMP指令引导处理溢出,下同)

SAMS:

ACALLADD0;同号,执行加法

MOVA,R5

ADDCA,R1

MOVR5,A

JNCCOM

ACALLSRA;有进位,右规1次

INCR4

MOVA,R4

JZOV1

COM:

JBC7BH,DON

COMA:

ANL0DH,#7FH;配置数符

DON:

RET

EXAD:

ACALLSAV0;取被加数为和

JNB7AH,COMA;置数符

RET

DON0:

MOVR4,A;取浮点数0的阶码

RET程序清单:

清单4

FPMU:

MOVA,R0;浮点乘法子程序

JZM0

MOVA,R4

JNZM1

M0:

AJMPG0;乘数中有为0者,积为0

M1:

ACALLDP;积符,积阶处理

JZOV2

JCOV2;积阶处理结果,为0或CY=1为溢出

ORL09H,#80H

ORL0DH,#80H;恢复尾数最高位

MOV1DH,R5

MOV1EH,R6

MOV1FH,R7;乘数之尾数送入第3组寄存器

MOVR0,#25;右移相加25次

CLRA

MOVR6,A

MOVR7,A;ACC,R6,R7为部分积累加器

CLRC

LOOP1:

JNCM2

ACALLADD0

ADDCA,R1;乘数移出位等于1,被乘数往部分积里加1次

M2:

ACALLSRA1

XCHA,R5

CPLRS1

ACALLSRA

CPLRS1;部分积带进位位整体右移1位

DJNZR0,LOOP1

MOVR5,A

JBACC.7,M3;查积最高位

MOVA,1DH

RLCA

ACALLH0;积最高位为0,积整体算术左移1位

JNBACC.7,M5

ACALLINC3;尾数截去部分四舍五入

CJNER5,#0,M5

MOVR5,#80H;调整

SJMPCOM2

M5:

DJNZR4,COM2;阶减1为0,为溢出

OV2:

LJMP0FFFFH

M3:

MOVA,1DH

JNBACC.7,COM2

ACALLINC3;尾数截去部分四舍五入

COM2:

JBC7EH,DON2;配置数符

ANL0DH,#7FH

DON2:

RET程序清单:

清单5

FPDI:

MOVA,R4;浮点除法子程序

JZOV3;除数为0,溢出

CPLA

INCA

MOVR4,A;除数阶码求补,为DP子程序准备

MOVA,R0

JNZD1

AJMPG0;被除数为0,商为0

D1:

ACALLDP;商符号,商阶处理

JZOV3

JCOV3;商阶等于0或CY=1为溢出

ORL09H,#80H

ORL0DH,#80H;恢复尾数最高位

FPD3:

ACALLEXT;尾数交换

MOVR0,#19H;左移试商25次,最后1次四舍五入

ACALLSUB0

XCHA,R5

SUBBA,R1;试商

JCD2

INCR4;够减,商阶增1

CJNER4,#0,D3

OV3:

LJMP0FFFFH;商阶变为0,则为溢出

D2:

ACALLADD0

ADDCA,R1;不够减,恢复被除数

LOOP2:

ACALLADD2

RLCA;被除数算术左移1位

JCD4;有进位(必定够减),转

ACALLSUB0

SUBBA,R1

JNCD3;无进位,试商够减,转

ACALLADD0

ADDCA,R1;试商不够减,恢复被除数

SJMPD3

D4:

ACALLSUB0

SUBBA,R1

CLRC

D3:

DJNZR0,D5;试商25次?

MOVR5,1DH

MOVR6,1EH

MOVR7,1FH;回送商

JCCOM3

ACALLINC3;第25次够减,商加1

COM3:

JBC7EH,DON3

ANL0DH,#7FH;配置数符

DON3:

RET

D5:

CPLC;进位位求反为本位商

CPLRS1

ACALLH0;在第3组寄存器中记商

CPLRS1

SJMPLOOP2程序清单:

清单6

FPSQ:

MOVA,R5;浮点数开平方子程序,先置实根标志

RLCA

MOV7EH,C;负数,改为虚根标志

FPS0:

MOVA,R4

JZDON4;0的平方根为0

ORL0DH,#80H;尾数恢复为原码

CLRC

RRCA;阶码逻辑右移1位(折半)

JNCS2

INCA;阶码为奇数,折半后增1

ACALLINC3

ACALLSRA;尾数增1后折半

CJNER5,#0,S2

MOVR5,#80H;调整

S2:

ADDA,#40H;阶码恢复为移码

MOVR4,A

MOV1DH,R5

MOV1EH,R6

MOV1FH,R7;尾数移入第3组寄存器

CLRA

MOVR1,A

MOVR2,A

MOVR3,A;根尾数存储区清除

MOVR6,A

MOVR7,A;被开方数尾数扩展区(ACC,R6,R7)清除

MOVR0,#19H;试根25次,最后1次四舍五入

S3:

CLRC

XCHA,1DH

SUBBA,#40H

XCHA,1DH

ACALLSBC0

SUBBA,R1;试根

JNCS4

XCHA,1DH

ADDA,#40H

XCHA,1DH

ACALLADC0

ADDCA,R1;不够减,恢复尾数

S4:

DJNZR0,S5

ACALLSAVT;回送平方根尾数

JCCOM4

ACALLINC3;四舍五入

COM4:

ANL0DH,#7FH;置数符

DON4:

RET

S5:

CPLC;进位位求反为本位根

ACALLLR0;记根

CPLRS1

ACALLSHIF

CPLRS1

ACALLADC2

RLCA

CPLRS1

ACALLSHIF

CPLRS1

ACALLADC2

RLCA;被开平方数的尾数算术左移2位

SJMPS3

程序清单:

清单7

FSQR:

MOVA,R5;浮点数牛顿迭代开平方子程序,先置实根标志

RLCA

MOV7EH,C;实根/虚根标志

MOVA,R4

JZSQRT;0的平方根为0

ANL0DH,#7FH;尾数恢复为正数

MOVA,R4

MOVR0,A

CLRC

RRCA

ADDCA,#40H

MOV1CH,A;存根的阶码

MOVA,R0

ANLA,#1

SETBACC.7

MOVR4,A;变x为x1(0.5≤x1<2)

LCALLLD1;存x1

LCALLSRA0

CJNER4,#80H,FSQR1

ORL0DH,#40H;得到首次根r0=(1+x1)/2

FSQR1:

MOVB,#3

FSQLP:

LCALLLD2

LCALLGET1

LCALLFPDI

LCALLGET2

LCALLFPAD

DECR4;计算ri+1=(xi+x1/ri)/2

DJNZB,FSQLP

MOVR4,1CH;取回根的阶码

SQRT:

RET基本运算子程序演示程序清单清单8

DMST1:

MOVSP,#70H;基本运算子程序的演示程序

SETBRS0

MOVR1,20H

MOVR2,21H

MOVR3,22H

MOVR4,23H

MOVR5,24H

MOVR6,25H

MOVR7,26H;取第1操作数

LCALLDTOB;转成二进制浮点数

LCALLLD2;存入

MOVR1,27H

MOVR2,28H

MOVR3,29H

MOVR4,2AH

MOVR5,2BH

MOVR6,2CH

MOVR7,2DH;取第2操作数

LCALLDTOB;转成二进制浮点数

LCALLGET2;取第1操作数

LCALLFPAD;调加、减、乘、除、对数函数、指数函数子程序之一

LCALLBTOD;转换成十进制浮点数

SJMP$程序清单:

清单9

LD0:

MOV08H,R4;装入浮点数

MOV09H,R5

MOV0AH,R6

MOV0BH,R7

RET

LD1:

MOV30H,R4;存浮点数

MOV31H,R5

MOV32H,R6

MOV33H,R7

RET

LD2:

MOV34H,R4;存浮点数

MOV35H,R5

MOV36H,R6

MOV37H,R7

RET

LD3:

MOV38H,R4;存浮点数

MOV39H,R5

MOV3AH,R6

MOV3BH,R7

RET

LD4:

MOV18H,R4;存浮点数

MOV19H,R5

MOV1AH,R6

MOV1BH,R7

RET

GET1:

MOVR0,30H;取浮点数

MOVR1,31H

MOVR2,32H

MOVR3,33H

RET

GET2:

MOVR0,34H;取浮点数

MOVR1,35H

MOVR2,36H

MOVR3,37H

RET

GET3:

MOVR0,38H;取浮点数

MOVR1,39H

MOVR2,3AH

MOVR3,3BH

RET

GET4:

MOVR0,18H;取浮点数

MOVR1,19H

MOVR2,1AH

MOVR3,1BH

RET

INVPI:

MOVR0,#86H;取180/π

MOVR1,#65H

MOVR2,#2EH

MOVR3,#0E0H

RET

G90:

MOVR0,#87H;取浮点数90

MOVR1,#34H

CLRA

MOVR2,A

MOVR3,A

RET

GTOR:

ACALLPI18;角度化为弧度子程序

AJMPFPMU

RTOG:

ACALLINVPI;弧度化为角度子程序

AJMPFPMU

GHPI:

MOVR0,#81H;取浮点数π/2

MOVR1,#49H

MOVR2,#0FH

MOVR3,#0DBH

RET

G01:

MOVR0,#7DH;取浮点数0.1

MOVR1,#4CH

MOVR2,#0CCH

MOVR3,#0CDH

RET

G1:

MOVR0,#81H;取浮点数1

CLRA

MOVR1,A

MOVR2,A

MOVR3,A

RET

PI18:

MOVR0,#7BH;取浮点数π/180

MOVR1,#0EH

MOVR2,#0FAH

MOVR3,#35H

RET

GINT:

CJNER4,#81H,$+3;将浮点数取整子程序

JNCGINT1

ACALLG0;阶码<81H,结果为0

AJMPLD0

GINT1:

MOVA,R5

RLCA

MOV78H,C;记数符

CJNER4,#98H,$+3

JNCGOV;阶码>97H,溢出

ACALLBRK;分离出整数部分

JNB78H,GEND;正数结束

CLRA;负数求其补

CLRC

SUBBA,R3

MOVR3,A

CLRA

SUBBA,R2

MOVR2,A

CLRA

SUBBA,R1

MOVR1,A

GEND:

RET

GOV:

LJMP0FFFFH

BRK:

ORL0DH,#80H;分解浮点数(正数)为整数,小数两部分

CLRA

MOVR1,A

MOVR2,A

MOVR3,A

LOOP4:

ACALLSHIF

ACALLLR0

DECR4

CJNER4,#80H,LOOP4;左移尾数(阶码-80H)位,移出部分为整数,在R1~R3中

RET

LDD:

CLR7BH;正整数(最多16位)规格化子程序

MOVR7,#0

MOVR4,#90H

AJMPNOM

G10:

MOVR0,#84H;取浮点数10

MOVR1,#20H

CLRA

MOVR2,A

MOVR3,A

RET

GLN2:

MOVR0,#80H;取浮点数ln2(=0.69314718)

MOVR1,#31H

MOVR2,#72H

MOVR3,#18H

RET

GLN10:

MOVR0,#82H;取浮点数ln10(=2.3025851)

MOVR1,#13H

MOVR2,#5DH

MOVR3,#8EH

RET

INVX:

CJNER4,#0,INV;计算1/x,x=0为溢出

LJMP0FFFFH

INV:

ACALLG1

AJMPFPDI程序清单:

清单10

FPLN1:

SETB7CH;计算奇次多项式值(lnx、sinx、arcsinx等)子程序

ACALLLD4;存x

ACALLLD0

ACALLFPMU;计算x·x

SJMPFLN0

FPLN2:

CLR7CH;计算ex展开式值/cosx

FLN0:

ACALLLD1;x(或x·x)→t,存t

POPDPH

POPDPL

CLRA

MOVCA,@A+DPTR

MOVR0,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR1,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR2,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR3,A;取an

INCDPTR

PLN:

ACALLM1;计算(…((an·t+an-1)·t+an-2)·t+…+ai)·t

CLRA

MOVCA,@A+DPTR

MOVR0,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR1,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR2,A

INCDPTR

CLRA

MOVCA,@A+DPTR

MOVR3,A;取ai-1

INCDPTR

ACALLFPLAD;计算(…((an·t+an-1)·t+an-2)·t+…+ai)·t+ai-1

CLRA

MOVCA,@A+DPTR

ACALLGET1

DECA

JNZPLN;1为计算结束符

PEND:

JNB7CH,REND

ACALLGET4

ACALLM1;计算奇次多项式值,再乘以x

REND:

MOVA,#1

JMP@A+DPTR;转至结束符的下一地址LNX,LGAX及LGX子程序清单如下:

清单11

LNX:

MOVA,R4;计算对数函数子程序

JZOV4

MOVA,R5

JNBACC.7,LN1

OV4:

LJMP0FFFFH;x≤0,溢出

LN1:

CLR79H;阶m的符号

MOV1CH,R4;设x=2m·t,则lnx=m·ln2+lnt,先存p=m

MOVR1,#35h

MOVR2,#4

MOVR3,#0f3h;t与2〖〗2相比较

LCALLCP3

JNCLN5;t≥2〖〗2转

DEC1CH;p=m-1,lnx=(m-1)·ln2+ln(2t)

CLR7EH;(2t-1)为正

MOVA,R5

ORLA,R6

ORLA,R7

MOVR4,A

JZLN5A;2t-1=0勿计算ln(2t)

LCALLLD0

CLRC

LCALLLR0;(2t-1)

LCALLSRA0

ORL0DH,#80H;2t+1

MOVR4,#7EH;1/(2t+1)的阶

SJMPLNTLP

LN5:

SETB7EH;(t-1)为负

CLRC

CLRA

SUBBA,R7

MOVR3,A

CLRA

SUBBA,R6

MOVR2,A

CLRA

SUBBA,R5

ADDA,#80H

MOVR1,A;计算(t-1)

LCALLSRA0

ORL0DH,#0C0H;计算(t+1)

MOVR4,#7FH;1/(t+1)的阶

LNTLP:

CLRC

LCALLLR0;(2t-1)或(t-1)规格化

DECR4;调整(2t-1)/(2t+1)或(t-1)/(t+1)的阶

MOVA,R1

JNBACC.7,LNTLP

LCALLFPD3;计算(2t-1)/(2t+1)或(t-1)/(t+1)

LCALLFPLN1;计算lnt或ln(2t)

DB7EH,12H,49H,25H;0.14285714

DB7EH,4CH,0CCH,0CDH;0.2

DB7FH,2AH,0AAH,0AAH;0.33333333

DB81H,0,0,0;1

DB1;结束符

INCR4;得到lnt

LN5A:

MOVA,1CH

ADDA,#80H

JZLN53

JCLN51

CPLA

INCA

CPL79H;p为负,取绝对值,记数符

LN51:

LCALLLD1

MOVR6,A

MOVR5,#0

LCALLLDD;|p|规格化

LCALLGLN2;取ln2

LCALLFPMU;计算|p|·ln2

LCALLGET1;取lnt

JNB79H,LN52

XRL0DH,#80H;p<0计算lnt-|p|·ln2

LN52:

LCALLFPAD;p≥0计算lnt+|p|·ln2

LN53:

RET

LGX:

ACALLLNX;先计算lnx

ACALLGLN10;取ln10

ACALLEX

AJMPFPDI;转计算log

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1