用汇编写的计算阶乘N!的程序
用汇编写的计算阶乘N!的程序
输出:像253!=253*252×251....*2*1=结果(n=253)的形式
http://topic.csdn.net/u/20100706/09/1d9f99b8-6c1f-491f-bf25-d7f5c0b04f07.html?86340
;用汇编写的计算阶乘N!的程序,据网上程序修改
;网上源程序编译后为60KB,修改后代码编译的EXE大小为1K Bytes.
CODES SEGMENT
ASSUME CS:CODES,DS:CODES
main proc
START:
push cs
pop ds
;-----------------------------------------------
mov dx,offset string
mov ah,9
int 21h
call Shuru ;
cmp bp,10000
jbe cs_ok
mov dx,offset Error
mov ah,9
int 21h
jmp START
cs_ok: call show
mov n,bp
mov ax,0e0dh
int 10h
mov al,0ah
int 10h
call fractor ;
mov cx,di
routput: ;循环输出
push cx ;
mov di,cx ;
call output
pop cx
dec cx
cmp cx,0
jge routput
;
mov dx,offset YN
mov ah,9
int 21h
mov ah,0
int 16h ;
cmp ah,31h ;key: N(n)
jnz START
exit:
mov ax,4c00h ;
INT 21H ;
;
main endp ;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;1、键盘输入数据,以回车结束输入。(0~65535)
;2、数值结果放入BP
;3、可以直接调用,然后在BP里面娶出要的结果。
;!!! 超出65535的,如99999,取超出65536部分34463到BP!!!
Shuru proc
push dx
push cx
push bx
push ax
xor bp,bp
mov bx,10
mov cx,5
input:
mov ah,0 ;键盘输入数据
int 16h
cmp al,0dh ;以回车结束输入
jz ok
cmp al,'0' ;只允许输入0~9
jb input
cmp al,'9'
ja input
mov ah,0eh ;显示有效输入
int 10h
and ax,000fH
xchg ax,bp
mul bx ;扩大10倍
add bp,ax ;加一位
loop input
ok:nop ;数值结果放入BP
;恢复用到的寄存器
pop ax
pop bx
pop cx
pop dx
ret
Shuru endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
shuchu:
push dx
push cx
mov ax,cx
xor cx,cx
mov bx,10
nx1: xor dx,dx
div bx
or dx,0e30h
push dx
inc cx
cmp ax,0
jnz nx1
nx2: pop ax
int 10h
loop nx2
pop cx
pop dx
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
show:
mov ax,0e21h ;'!'
int 10h
mov al,"="
int 10h
mov cx,bp
jcxz sss
rss:
call shuchu
cmp cx,1
jz sss
mov ax,0e2ah ;"*"
int 10h
loop rss
sss:
mov ax,0e3dh ;"="
int 10h
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
fractor proc near ;
mov cx,n ;n,要求阶乘的数
mov i, 1
mov m, 0 ;m,步长
;
mov di,0
MOV SI,DI
SHL SI,1
;
mov word ptr [si+200h],1
ctrli: mov c, 0 ;c,进位
mov di,0
ctrldi: cmp di,m ;;m,步长
ja cmpc ;
done:
MOV SI,DI
SHL SI,1
;
mov ax,[si+200h] ;
mov bx,i ;
mul bx ;
add ax,c ; ;c,进位 ;
adc dx,0 ; ;
mov bx,10000 ;
div bx ;
mov c,ax ;c,进位
MOV SI,DI
SHL SI,1
mov [si+200h],dx ;
inc di ;
jmp ctrldi ;
cmpc: cmp c,0 ;c,进位
jbe next ;
inc m ;;m,步长
mov ax,c ;
mov [si+2+200h],ax ;
next: inc i
cmp cx,0
jng if0 ;
loop ctrli
if0: mov di,m ;;m,步长
ret ;
;
fractor endp ;
;------------------------------------------
output proc near ;
C2:
MOV SI,DI
SHL SI,1
mov bx,[si+200h] ;
bid proc ;
mov cx,10000 ;
mov ax,bx ;
mov dx,0 ;
div cx ;
mov bx,dx
;
mov cx,1000 ;
call ddiv ;
mov cx,100 ;
call ddiv ;
mov cx,10 ;
call ddiv ;
mov cx,1
call ddiv ;
ret
;
bid endp ;
;--------------------------------------
ddiv proc ;
mov ax,bx ;
mov dx,0 ;
div cx ;
mov bx,dx ;
mov dl,al ;
add dl,30h ;
mov ah,02h ;
int 21h ;
ret
;
ddiv endp ;
;
ret ;
output endp ;
;----------------------------------------
string db 0dh,0ah,'Input a number(0-10000):',0dh,0ah,'$'
Error db 0dh,0ah,"Out of Range! $"
YN db 0dh,0ah,'Continue (Yes/No) ? $'
c10 dw 10 ;输入时进制转换的数
n dw ? ;要求阶乘的数
m dw ? ;步长
c dw ? ;进位
i dw ? ;
CODES ENDS ;
END START ;
用汇编写的计算阶乘N!的程序相关推荐
- matlab编写正整数阶乘函数,用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值....
点击查看用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值.具体信息 答:编写一个matlab文件,求1到n的阶乘之和.其代码编写的目的,就是学会自定义 ...
- C语言--不使用库函数,利用指针编写一个计算字符串长度的程序
题目:编写一个函数计算一个字符串的长度,输入输出在主函数中完成 以下两个例程仅供参考: #include <stdio.h> int Strlen(char *str)//不使用库函数,利 ...
- python怎么算阶乘_python专家写阶乘 ()用python计算阶乘
请编写一个程序实现分享n的阶乘(即n.),并打印输出结果.要分享包括两个函def little_than_50(x): if x 语言很多时候是假的,一起经历过的事情才是真的. 这个用python写的 ...
- 如何用Python编写一个求 1到n阶乘之和的程序
各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...
- Java黑皮书课后题第10章:***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序。设计一个名为Tax类,该类包含下面的实例数据域
***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序.设计一个名为Tax类,该类包含下面的实例数据域 题目 程序解释 代码 Test8.java Test8_Tax.jav ...
- Java黑皮书课后题第6章:*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序。使用下面的方法体编写一个计算税款的方法。使用这个方法编写程序,打印可征税人从50000到60000间隔
*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序.使用下面的方法体编写一个计算税款的方法.使用这个方法编写程序 题目 题目描述 破题 程序清单3-5(非本题):代码不全 补充代码:编 ...
- 垃圾,还用汇编写单片机程序?
01 前言 大家好,我是张巧龙,上次写了 一篇关于C语言的文章:居然还有大学在大一上C语言课? 有同学留言: 突然想起来,单片机和汇编确实也挺有意思. 写单片机程序到底用汇编还是C,也是一直存在的争 ...
- 24点游戏java_使用java编写计算24点游戏程序
初学java,编写了一个计算24点的程序,时间有限,有些粗糙,不过可以使用. //-------------Cal24.java--------------- //计算24点程序 //作者:徒步天下( ...
- python输入正方形边长值、计算其面积_尝试修改列6.2编写命令行参数解析的程序,解析命令行参数所输入边长的值,计算并输出正方形的周长和面积。_学小易找答案...
[简答题] [单选题]ZigBee 中每个协调点最多可连接______个节点,一个ZigBee网络最多可容纳______个节点.( ) [资料题]DWord-Ans.pdf 索引和目录.pdf 完成效 ...
最新文章
- java中1代表什么_请问java中81是什么意思?
- python画仿真图-Python数据分析:绘图可视化之matplotlib入门
- python行业中性_市场风险中性假设的r0只是等效r的其中之一
- 反思供应链项目:实践出真知 多反思提升效率的方法
- ios did receive memory warning
- 内推!字节、阿里、网易火热招聘中,内推优筛简历,快人一步拿offer,真香!(送内推码)...
- linux 端口号查看
- 第二章 寄存器基础概念
- 2018数学建模国赛总结(A题/编程选手视角)
- java中特殊流程控制语句,深入分析JAVA流程控制语句
- mysql-日常命令使用汇总
- (14)Python_SimpleImputer缺失值处理
- python图形用户界面pyside_PySide图形界面开发(一)
- php 背景图片缩放,PHP按原比率缩小图片并保留透明背景
- iNFTnews|Opensea上爆火的Art Gobblers为何引起巨大争议?
- 北风修仙笔记—2020年6月
- 扎进“手机”红海,蔚来改造“生态圈”
- pytorch第06天 图片分类器
- H5视频自动播放和循环播放
- 包装类,正则表示式,Arrays类
热门文章
- “福娃”:可口可乐的新挑战
- python 最小外接矩形笔记
- 支付宝公布2019集五福攻略,准备好薅羊毛的正确姿势...
- 记录若干`tf.py_function`的使用的方式,便于查阅
- 仿36氪(iOS版附源代码)
- 计算机能力[置顶] 论计算机专业毕业生的人文素养
- 乡村振兴战略下传统村落文化旅游设计 | 年度图书,踔厉奋发,勇毅前行
- 你欠快播的会员,可能要充到区块链上了
- 如何预防arp欺骗以及c#如何自动绑定网关的mac地址?
- web前端 --- HTML标签详解