用汇编写的计算阶乘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!的程序相关推荐

  1. matlab编写正整数阶乘函数,用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值....

    点击查看用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值.具体信息 答:编写一个matlab文件,求1到n的阶乘之和.其代码编写的目的,就是学会自定义 ...

  2. C语言--不使用库函数,利用指针编写一个计算字符串长度的程序

    题目:编写一个函数计算一个字符串的长度,输入输出在主函数中完成 以下两个例程仅供参考: #include <stdio.h> int Strlen(char *str)//不使用库函数,利 ...

  3. python怎么算阶乘_python专家写阶乘 ()用python计算阶乘

    请编写一个程序实现分享n的阶乘(即n.),并打印输出结果.要分享包括两个函def little_than_50(x): if x 语言很多时候是假的,一起经历过的事情才是真的. 这个用python写的 ...

  4. 如何用Python编写一个求 1到n阶乘之和的程序

    各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...

  5. Java黑皮书课后题第10章:***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序。设计一个名为Tax类,该类包含下面的实例数据域

    ***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序.设计一个名为Tax类,该类包含下面的实例数据域 题目 程序解释 代码 Test8.java Test8_Tax.jav ...

  6. Java黑皮书课后题第6章:*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序。使用下面的方法体编写一个计算税款的方法。使用这个方法编写程序,打印可征税人从50000到60000间隔

    *6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序.使用下面的方法体编写一个计算税款的方法.使用这个方法编写程序 题目 题目描述 破题 程序清单3-5(非本题):代码不全 补充代码:编 ...

  7. 垃圾,还用汇编写单片机程序?

    01  前言 大家好,我是张巧龙,上次写了 一篇关于C语言的文章:居然还有大学在大一上C语言课? 有同学留言: 突然想起来,单片机和汇编确实也挺有意思. 写单片机程序到底用汇编还是C,也是一直存在的争 ...

  8. 24点游戏java_使用java编写计算24点游戏程序

    初学java,编写了一个计算24点的程序,时间有限,有些粗糙,不过可以使用. //-------------Cal24.java--------------- //计算24点程序 //作者:徒步天下( ...

  9. python输入正方形边长值、计算其面积_尝试修改列6.2编写命令行参数解析的程序,解析命令行参数所输入边长的值,计算并输出正方形的周长和面积。_学小易找答案...

    [简答题] [单选题]ZigBee 中每个协调点最多可连接______个节点,一个ZigBee网络最多可容纳______个节点.( ) [资料题]DWord-Ans.pdf 索引和目录.pdf 完成效 ...

最新文章

  1. java中1代表什么_请问java中81是什么意思?
  2. python画仿真图-Python数据分析:绘图可视化之matplotlib入门
  3. python行业中性_市场风险中性假设的r0只是等效r的其中之一
  4. 反思供应链项目:实践出真知 多反思提升效率的方法
  5. ios did receive memory warning
  6. 内推!字节、阿里、网易火热招聘中,内推优筛简历,快人一步拿offer,真香!(送内推码)...
  7. linux 端口号查看
  8. 第二章 寄存器基础概念
  9. 2018数学建模国赛总结(A题/编程选手视角)
  10. java中特殊流程控制语句,深入分析JAVA流程控制语句
  11. mysql-日常命令使用汇总
  12. (14)Python_SimpleImputer缺失值处理
  13. python图形用户界面pyside_PySide图形界面开发(一)
  14. php 背景图片缩放,PHP按原比率缩小图片并保留透明背景
  15. iNFTnews|Opensea上爆火的Art Gobblers为何引起巨大争议?
  16. 北风修仙笔记—2020年6月
  17. 扎进“手机”红海,蔚来改造“生态圈”
  18. pytorch第06天 图片分类器
  19. H5视频自动播放和循环播放
  20. 包装类,正则表示式,Arrays类

热门文章

  1. “福娃”:可口可乐的新挑战
  2. python 最小外接矩形笔记
  3. 支付宝公布2019集五福攻略,准备好薅羊毛的正确姿势...
  4. 记录若干`tf.py_function`的使用的方式,便于查阅
  5. 仿36氪(iOS版附源代码)
  6. 计算机能力[置顶] 论计算机专业毕业生的人文素养
  7. 乡村振兴战略下传统村落文化旅游设计 | 年度图书,踔厉奋发,勇毅前行
  8. 你欠快播的会员,可能要充到区块链上了
  9. 如何预防arp欺骗以及c#如何自动绑定网关的mac地址?
  10. web前端 --- HTML标签详解