[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

java实验六 接口与实现

实验一: 实验目的: 掌握怎么实现借口 interface ComputerAverage{ public double average(double x[]); } class Gymna...
  • Summer__show_
  • Summer__show_
  • 2017年01月02日 20:32
  • 458

汇编语言 第三版 王爽 实验6 更改大写字母

大小写字母转换实验
  • think_ycx
  • think_ycx
  • 2015年10月11日 18:10
  • 1384

数据结构实验之图论六:村村通公路 sdut oj (3362)

prim算法
  • rain_snowing
  • rain_snowing
  • 2016年08月18日 09:28
  • 924

数据结构实验之排序六:希尔排序

数据结构实验之排序六:希尔排序 Time Limit: 1000MS Memory limit: 65536K 题目描述 我们已经学习了各种排序方法,知道在不...
  • acher66
  • acher66
  • 2016年08月22日 20:46
  • 1181

[Java] 实验6参考代码

求1+1/2+1/3+……+1/n 1. 整数 / 整数 = 整数 2. 如何进行从1到n的循环: for (int i = 1; i ...
  • u014674776
  • u014674776
  • 2016年04月05日 10:21
  • 817

操作系统ucore lab6实验报告

操作系统lab6实验报告
  • qq_19876131
  • qq_19876131
  • 2016年06月18日 20:12
  • 4424

实验六 进程间通信(下)

一、实验名称:实验六 进程间通信(下) 二、实验日期:2014/4/3 三、实验目的: l  通过实验理解共享内存通信 l  通过实验理解Linux信号量 l  了解Linux信...
  • u014684971
  • u014684971
  • 2014年04月20日 03:13
  • 662

数据结构实验之排序六:希尔排序

数据结构实验之排序六:希尔排序 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 我们已经学习了各种排序方法,知道在不同的...
  • yyxiangyu
  • yyxiangyu
  • 2017年02月22日 19:36
  • 103

操作系统实验六 设备管理

实验六 设备管理一、实验目的1、 理解设备管理的概念和任务。2、 掌握独占设备的分配、回收等主要算法的原理并编程实现。二、实验内容与基本要求1、 在Windows系统中,编写程序实现对独占设备的...
  • u011303443
  • u011303443
  • 2015年12月15日 12:57
  • 1693

汇编语言——第1次上机实验

准备: 硬件:pc机,32位win操作系统,能够运行dos,某些64位win10系统可能会不支持 软件:masm程序 实验内容: 1.win+r运行dos,cd到指定的masm目录(为了调...
  • bobodem
  • bobodem
  • 2016年03月22日 09:36
  • 1167
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[masm]实验六:计算N!的实验
举报原因:
原因补充:

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