递归程序设计求N阶乘文档格式.docx

上传人:b****4 文档编号:18086500 上传时间:2022-12-13 格式:DOCX 页数:8 大小:21.76KB
下载 相关 举报
递归程序设计求N阶乘文档格式.docx_第1页
第1页 / 共8页
递归程序设计求N阶乘文档格式.docx_第2页
第2页 / 共8页
递归程序设计求N阶乘文档格式.docx_第3页
第3页 / 共8页
递归程序设计求N阶乘文档格式.docx_第4页
第4页 / 共8页
递归程序设计求N阶乘文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

递归程序设计求N阶乘文档格式.docx

《递归程序设计求N阶乘文档格式.docx》由会员分享,可在线阅读,更多相关《递归程序设计求N阶乘文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

递归程序设计求N阶乘文档格式.docx

DATASSEGMENT

OPEDW0,0,0,0

RESULTDB16DUP(0),'

H'

0DH,0AH,0AH,'

$'

NUMDB3,0,3DUP(0)

MESS1DB'

PleaseinputN(keyEntertoquit):

'

0DH,0AH,'

ERR_MESSDB'

Errornumber,tryagain!

FUNCDB0,0,'

!

'

='

DATASENDS

STACKSSEGMENTSTACK

DW1000DUP(?

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

DS_STRMACROBUF;

显示字符串的宏

PUSHDX

PUSHAX

LEADX,BUF

MOVAH,09H

INT21H

POPAX

POPDX

ENDM

;

——————————————————————————————————————

SR_STRMACROBUF;

输入字符串的宏

MOVAH,0AH

——————————————————————————————————————

START:

MOVAX,DATAS

MOVDS,AX

MOVES,AX

LOP1:

MOVCX,16;

对RESULT清零

LEADI,RESULT

MOVAL,0

REPSTOSB

MOVCX,4;

对OPE清零

LEADI,OPE

MOVAX,0

REPSTOSW

DS_STRMESS1;

显示提示信息

SR_STRNUM;

输入N

MOVDL,0AH;

输出换行

MOVAH,2H

CMP[NUM+1],0;

直接回车则退出

JZOVER

CMP[NUM+1],1

JNZLABEL_2

CMP[NUM+2],'

1'

输入一名数,是1~9,则继续,不然输犯错误信息,并跳转到开始

JBERR_NUM

9'

JAERR_NUM

MOVBL,[NUM+2];

把输入的ASCII码转换成数字存入BX中

SUBBL,30H

MOVBH,0

JMPGO_ON

LABEL_2:

CMP[NUM+2],'

输入二位数,是10~99,则继续,不然输犯错误信息,

JBERR_NUM

JAERR_NUM

CMP[NUM+3],'

0'

MOVAL,[NUM+2];

SUBAL,30H

MOVBL,10

MULBL

MOVBL,[NUM+3]

SUBBL,30H

MOVBH,0

ADDBX,AX

GO_ON:

MOV[OPE],BX;

循环初始化

MOVCX,BX

DECCX

JCXZCX_ZERO

DO1:

DECBX

CALLMUL_big

LOOPDO1

JMPGO_ON1

CX_ZERO:

MOV[OPE],1

GO_ON1:

MOVAX,[OPE];

将结果转换成ASCII码

LEADI,RESULT

ADDDI,15

CALLBIN_TO_NUM

MOVAX,[OPE+2]

MOVAX,[OPE+4]

MOVAX,[OPE+6]

CMP[NUM+1],1;

输出'

n!

JENUM_EQU_1

MOVAL,[NUM+2]

MOV[FUNC],AL

MOVAL,[NUM+3]

MOV[FUNC+1],AL

LEADX,FUNC

JMPOUTPUT_STR

NUM_EQU_1:

INCDX

OUTPUT_STR:

MOVAH,9H

INT21H

LEASI,RESULT;

从第一个非零的地方输出结果,然后回到开始

DECSI

LOOP1:

INCSI

CMPBYTEPTR[SI],30H

LOOPZLOOP1

MOVDX,SI

JMPLOP1

ERR_NUM:

DS_STRERR_MESS;

输犯错误信息,然后回到开始

OVER:

MOVAH,4CH

MUL_bigPROCNEAR;

相乘,完成OP1和BX的乘,结果保留在OPE起始的四个字里

PUSHSI

PUSHDI

PUSHCX

MOVCX,BX

DECCX

JCXZNEXT

MOVAX,[OPE]

MOVSI,[OPE+2]

MOVDI,[OPE+4]

MOVDX,[OPE+6]

DO:

ADD[OPE],AX

ADC[OPE+2],SI

ADC[OPE+4],DI

ADC[OPE+6],DX

LOOPDO

NEXT:

POPCX

POPDI

POPSI

POPAX

RET

MUL_bigENDP

BIN_TO_NUMPROCNEAR;

将AX中的十六进制数转换成相应ASCII码,结果保留在[DI]~[DI+3]中

PUSHCX

PUSHBX

MOVCX,4

AGAIN:

AGAIN1:

RCRAX,1

RCRBL,1

LOOPAGAIN1

SHRBL,1

CMPBL,9

JBELABEL_BE

ADDBL,7

LABEL_BE:

ADDBL,30H

MOV[DI],BL

DECDI

POPCX

LOOPAGAIN

POPBX

BIN_TO_NUMENDP

CODESENDS

ENDSTART

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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