[masm]实验六:计算N!的实验

原创 2006年06月15日 23:55:00

;实验六:计算N!的实验
;目  的:通过编制一个阶乘计算程序,了解高级语言中
;        数学函数是怎样在汇编语言一级实现的。
;内  容:编写计算N!的程序,数值N由键盘键入,N!的范围
;        为:0 ~ 65535,即刚好被一个16为寄存器容纳。

data segment
        mess0   db 0dh, 0ah,'====expriment of compute N!====','$'
        mess1   db 0dh, 0ah, 'please input the number N (N:0~9, ex:8): $'
        mess2   db 0dh, 0ah, 'the result of N! is: $'
        errMess db 0dh, 0ah,'----error input!----$'
data ends

code segment
main proc far
        assume ds:data, cs:code
start:
 push    ds
        mov     ax, data ;设置数据段
        mov     ds, ax
        xor     ax, ax
        push    ax
        ;init
        mov dx, 0
        mov bx, 0 ;用于接收结果
               
 ;show message
        mov     ah, 09h
        lea     dx, mess0
        int     21h
        lea     dx, mess1
        int     21h
       
 ;键盘输入n的值
 mov ah, 01h
 int 21h
 
 ;合法性检查
        cmp     al, '0'
        jl      error
        cmp     al, '9'
        jg error
        sub     al, '0'
        call fact ;调用函数计算N!
        mov bx, dx
        mov ah, 09h
        lea dx, mess2
        int 21h
        call show ;吊用函数显示N!
        mov ah, 02
        mov dl, 'H'
        int 21h
        jmp exit
error:  
 mov ah, 09h
 lea dx, errMess
 int 21h       
exit: ret
main endp
;计算N!的子程序
fact proc
 cmp al, 0
 jnz multN
 mov dl, 1
 ret
multN: push ax ;利用栈保存上层的N值
 dec al
 call fact ;递归,计算(N-1)!
 pop ax ;将上层N值取出
 mul dl ;dl中存放的是相乘的结果
 mov dx, ax
 ret
fact endp
;以16进制形式显示结果
show proc
 mov ch, 04h
 mov cl, 04h
 mov ah, 02h
showN: rol bx, cl
 mov dl, bl
 and dl, 0fh
 add dl, '0'
 cmp dl, '9'
 jl print ;是数字则直接显示
 add dl, 7h ;是大于9的数时转化为字母 
print: int 21h
 dec ch
 jnz showN 
 ret
show endp
code ends
        end start

相关文章推荐

计算(ax+by)n的xnym的实验系数

  • 2013年06月02日 20:07
  • 73KB
  • 下载

C#--第2周实验--任务四--编写一个控制台应用--分别使用for,while,do-while循环语句计算 n!

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:编写...

Masm for windows集成实验环境

  • 2012年12月21日 16:26
  • 4.19MB
  • 下载

利用SVD矩阵分解进行k次交叉实验和Top—N推荐

如果上一节没看的,请先看上一节Surprise项目的使用。本文利用开源GitHub项目Surprise。   上一节说到具体的安装和一些方法的属性,本节将以SVD为例具体的代码demo的实现。   先...

Masm for Windows 汇编集成实验环境

  • 2009年12月05日 15:34
  • 11.66MB
  • 下载

Masm for Windows 集成实验环境

  • 2008年10月21日 13:49
  • 11.26MB
  • 下载

Top-N Recommendation——基于用户的推荐实验

无论是在实体商店还是在网络上,都会有Top-N推荐的情况。基于客户或者基于商品做出推荐。本实验基于Movielens、Ratings的电影数据集,对用户做出Top-N 推荐。主要目的是基于User-B...

Masm for Windows 集成实验环境

  • 2012年04月09日 22:34
  • 15.25MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[masm]实验六:计算N!的实验
举报原因:
原因补充:

(最多只允许输入30个字)