




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本程序作者 cabbage功能:计算1亿以内数的阶乘E-mail:;*求阶乘程序,十进制输入一个数,十进制输出其结果*STROUT MACRO ;宏,DOS功能调用,设置字符串输出入口参数 MOV AH,09H INT 21HENDMCHAR_IN MACRO ;宏,DOS功能调用,设置字符输入入口参数 MOV AH,01H INT 21HENDMDATAS SEGMENT PUBLIC DATA1 DB 10H DUP(0) LEN1 DW ? LEN2 DW ? CONST1 DW 30 CONST2 DW 40 INDEX DB 10H DUP(0) STR0 DB *FACTORIAL*$ STR1 DB 0AH,0DH,Please input the num:$ STR2 DB 0AH,0DH,Error!$ STR3 DB 0AH,0DH,The result is:$ STR4 DB 0AH,0DH,*$ STR5 DB 0AH,0DH,Thank you for using!$ DATA3 DB 0FF24H DUP(0)DATAS ENDSDATAS1 SEGMENT PUBLIC DB 0FFFFH DUP(0)DATAS1 ENDSDATAS2 SEGMENT PUBLICDATA2 DB 0FFFFH DUP(0)DATAS2 ENDSDATAS3 SEGMENT PUBLIC DB 0FFFFH DUP(0)DATAS3 ENDSSTACKS SEGMENT STACK DW 2000H DUP(?) TOP LABEL WORDSTACKS ENDSCODES1 SEGMENT ASSUME CS:CODES1,DS:DATAS,SS:STACKS,ES:DATAS2START: MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX MOV AX,DATAS2 MOV ES,AX MOV SP,OFFSET TOP MOV LEN1,OFFSET DATA2 MOV LEN2,OFFSET DATA3 MOV DX,OFFSET STR0 STROUT s1: CALL ZERO ;清零DATA1,DATA2,DATA3,INDEX,为保证运行结果不受前次影响 XOR AX,AX XOR BX,BX XOR CX,CX XOR DX,DX ;清零AX,BX,CX,DX等寄存器,为保证运行结果不受前次影响 MOV DX,OFFSET STR1 STROUT XOR SI,SIdo1: CHAR_IN CMP AL,0DH JZ d1 CMP AL,0 JB error CMP AL,9 JA error SUB AL,0 MOV DS:BYTE PTR SI,AL ;输入原始数据,按位输入,高位先输 INC SI JMP do1d1: CMP SI,0 JZ exit MOV CX,SI XOR DI,DIdo2: MOV AL,DS:BYTE PTR SI-1 MOV ES:BYTE PTR DATA2DI,AL ;先给DATA2中赋值,使其等于输入的数据 INC DI DEC SI LOOP do2 MOV CX,DI XOR SI,SI XOR DI,DIdo3: MOV AL,ES:BYTE PTR DATA2DI MOV DS:BYTE PTR SI,AL INC DI ;再将DATA1中的数据实现,高位存放在地址较大的存储单元 INC SI LOOP do3s2: XOR AX,AX CALL FAR PTR FAC ;调用阶乘计算函数 CMP SI,1 ;当还没有计算到1时,再次进入阶乘函数 JNZ s2 MOV AL,DS:BYTE PTR SI-1 CMP AL,1 JZ s3 JMP s2 s3: CALL FAR PTR RESULT ;输出结果 JMP s1 error: MOV DX,OFFSET STR2 STROUT JMP s1exit: MOV DX,OFFSET STR5 STROUT MOV AH,4CH INT 21H CODES1 ENDS;*CODES2 SEGMENTASSUME CS:CODES2,DS:DATAS,SS:STACKS,ES:DATAS2;递归子过程,计算阶乘,没当递归次数大于等于5000时,返回再次进入,降低栈对递归的限制FAC PROC FAR INC AX PUSH AXdo6: MOV AL,ES:BYTE PTR DATA2DI-1 DEC DI CMP AL,0 JZ do6 INC DI CMP DI,CONST2 JB s4 CALL FAR PTR DZERO s4: CMP SI,1 JNZ s5 MOV AL,DS:BYTE PTR SI-1 CMP AL,1 JZ s9 JMP s6s5: MOV CX,SI DEC CX XOR BP,BP MOV AL,DS:BYTE PTR BP SUB AL,1 PUSHF AAS MOV DS:BYTE PTR BP,ALdo4: INC BP MOV AL,DS:BYTE PTR BP POPF SBB AL,0 PUSHF AAS MOV DS:BYTE PTR BP,AL LOOP do4 POPF MOV AL,DS:BYTE PTR SI-1 CMP AL,0 JNZ s7 DEC SI JMP s7s6: MOV AL,DS:BYTE PTR SI-1 SUB AL,1 MOV DS:BYTE PTR SI-1,ALs7: CALL FAR PTR MULT POP AX CMP AX,1388H JZ s8 CALL FAR PTR FACs8: RETs9: POP AX RETFAC ENDPCODES2 ENDS;*;乘法运算函数,用于多位非压缩码BCD数(DATA1)与多位非压缩码BCD数(DATA2)的乘法运算;,并将结果存放在DATA2中。将多位数乘法运算转变成多位数加法来运行CODES3 SEGMENT ASSUME CS:CODES3,DS:DATAS,SS:STACKS,ES:DATAS2MULT PROC FAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH BP PUSH SI PUSH DI POP DX POP CX XOR DI,DI XOR BP,BP PUSH CXs10: POP CX PUSH CX PUSH BP XOR SI,SIs11: MOV BH,0 MOV AH,0 MOV BL,DS:BYTE PTR SI MOV AL,ES:BYTE PTR DATA2DI INC SI MUL BL AAM ;BCD调整指令 PUSH BP MOV BL,AH XOR AH,AH ADD AL,DS:BYTE PTR DATA3BP AAA ;BCD调整指令 ADD BL,AH ;可能产生进位 MOV DS:BYTE PTR DATA3BP,AL INC BP MOV AL,BL s12: XOR AH,AH ADD AL,DS:BYTE PTR DATA3BP AAA ;BCD调整指令 MOV DS:BYTE PTR DATA3BP,AL INC BP MOV AL,AH CMP AL,0 JNZ s12 POP BP INC BP CMP SI,CX JNZ s11 INC DI MOV CX,BP POP BP ADD BP,1 CMP DI,DX JNZ s10 INC CX XOR BP,BP XOR DI,DIdo5: MOV AL,DS:BYTE PTR DATA3BP MOV ES:BYTE PTR DATA2DI,AL MOV DS:BYTE PTR DATA3BP,0 INC DI INC BP LOOP do5 POP SI POP BP POP DX POP CX POP BX POP AX RET MULT ENDPCODES3 ENDS;*;结果输出函数,将以非压缩BCD码存放的结果转换成科学计数法,并以字符输出CODES4 SEGMENT ASSUME CS:CODES4,DS:DATAS,SS:STACKS,ES:DATAS2RESULT PROC FAR PUSH DX PUSH DI MOV CX,DI PUSH CX XOR SI,SI XOR BP,BP do7: MOV AL,ES:BYTE PTR DATA2DI-1 ADD AL,30H MOV DS:BYTE PTR DATA3SI,AL ;将DATA2中存放的数以逆序传到DATA3中,并转换成ASCII码 DEC DI INC SI LOOP do7 MOV DS:BYTE PTR DATA3SI,$ MOV DX,OFFSET STR3 STROUT CMP SI,20 JA s13 MOV DX,LEN2 STROUT JMP s14 s13: MOV DS:BYTE PTR DATA311,$ MOV DL,DS:BYTE PTR DATA3BX MOV AH,02H INT 21H MOV DL,. MOV AH,02H INT 21H MOV DX,LEN2 INC DX ;第一位已经输出了 STROUT MOV DL,e MOV AH,02H INT 21H MOV DL,+ MOV AH,02H INT 21H SUB SI,1 MOV CX,SI ;存放现有数据的长度 CALL FAR PTR ADDS MOV BX,OFFSET INDEX MOV CX,10H MOV SI,CXdo8: MOV AL,DS:BYTE PTR BXSI-1 DEC CX DEC SI CMP AL,0 JZ do8 INC CX INC SIdo9: MOV DL,DS:BYTE PTR BXSI-1 ADD DL,30H MOV AH,02H DEC SI INT 21H LOOP do9 s14: MOV DX,OFFSET STR4 STROUT POP CX POP DI POP DX RETRESULT ENDPCODES4 ENDS;*;清零DATA1,DATA2,DATA3,INDEX,为保证运行结果不受前次影响CODES5 SEGMENTASSUME CS:CODES5,DS:DATAS,SS:STACKS,ES:DATAS2ZERO PROC FAR PUSH DX MOV CX,10H XOR SI,SIdo10: MOV DS:BYTE PTR SI,0 MOV DS:BYTE PTR INDEXSI,0 INC SI LOOP do10 MOV CX,0FF00H XOR SI,SIdo11: MOV ES:BYTE PTR DATA2SI,0 MOV DS:BYTE PTR DATA3SI,0 INC SI LOOP do11 POP DX RETZERO ENDPCODES5 ENDS;*;在运行的过程中,当DATA2中的结果位数很大时,选择性保留固定长度的高位,将舍弃的位数加到指数INDEX上CODES6 SEGMENT ASSUME CS:CODES6,DS:DATAS,SS:STACKS,ES:DATAS2DZERO PROC FAR PUSH DX PUSH CX PUSH BX PUSH AX PUSH SI MOV CX,DI SUB CX,CONST1 MOV DI,CX PUSH DI PUSH CX CALL FAR PTR ADDS POP CX POP DI XOR SI,SIdo12: MOV ES:BYTE PTR DATA2SI,0 INC SI LOOP do12 MOV CX,CONST1 XOR SI,SIdo13: MOV AL,ES:BYTE PTR DATA2DI MOV ES:BYTE PTR DATA2SI,AL MOV ES:BYTE PTR DATA2DI,0 INC SI INC DI LOOP do13 MOV DI,CONST1 POP SI POP AX POP BX POP CX POP DX RETDZERO ENDPCODES6 ENDS;*;结果的幂的控制函数,CX为传递参数,存放的是在DZERO去零数CODES7 SEGMENTASSUME CS:CODES7,DS:DATAS,SS:STACKS,ES:DATAS2ADDS PROC FAR PUSH BX PUSH AX PUSH BP PUSH SI;CX已经在被调用前赋值 do14: XOR AH,AH XOR SI,SI MOV AL,DS:BYTE PTR INDEXSI ADD AL,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业单位员工劳动合同签订指南
- 买农民土地咋签合同5篇
- 钢卷公司试题及答案
- 电子商务概论基础知识考试题
- 地理期末板块运动考试题
- 2025二手别墅购买合同
- 2025合作协议预案
- 2025合同样本:小产权房买卖合同范本
- 家政服务满意度调查创新创业项目商业计划书
- 干什锦蔬菜创新创业项目商业计划书
- 汽车零部件制造行业发展报告
- 修井机培训课件
- 医学科普文章写作技巧
- 物业高端化规定
- 采暖补贴审计方案(3篇)
- 锂电池公司管理制度
- GB/T 17948.7-2025旋转电机绝缘结构功能性评定总则
- 农光互补光伏发电项目发展趋势与前景分析
- 光伏发电建设工程质量监督检查大纲(2023版)
- 老人外出免责协议书
- 数字信号处理理论与应用练习题集
评论
0/150
提交评论