汇编语言实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机学院

实验报告

(2016 ~2017学年度第二学期)

课程名称汇编语言程序设计实验名称计算阶乘

学号20154480506 姓名

张扬

专业

班级5班

软件工程

地点第一实验楼教师

凌云

一.实验题目

用汇编语言编写程序计算阶乘N!数值有键盘输入,结果在屏幕上面输出。二.流程图

三.实验代码

代码要配合程序界面进行说明

源代码:

DATAS SEGMENT

STRING DB "Please input a number(0-10000):" ,0dh,0ah ;提示用户输入数字字串

WRONGSTRING DB "Wrong input!!! Please input a number ! ",0ah,0dh,'$'

;用户输入错误提示

INPUTBUFFER DB 6,?,6 DUP(?)

;开辟出(留出)6个初值未知的字节单元空间

C10 DW 10 ;输入时进制转换的数

N DW ? ;要求阶乘的数

M DW ? ;步长

T DW ? ;进位

I DW ?

OUTPUTBUFFER DW 30000 DUP(?)

;开辟出(留出)30000个初值未知的字单元空间

DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX

MAIN PROC ;主程序

;----------------------------------------------

CALL INPUT ;调用输入子程序

CALL FAC ;调用递归实现阶乘

MOV CX,DI

ROUTPUT: ;输出结果

PUSH CX

MOV DI,CX

CALL OUTPUT ;显示输入的数字

POP CX

DEC CX

CMP CX,0

JGE ROUTPUT

DISPLAYLENGTH: ;显示长度

MOV Dl,0DH

MOV AH,2

INT 21H

MOV Dl,0AH

MOV AH,2

INT 21h

EXIT: ;退出

MOV AH,07H

INT 21H

MOV AX,4C00H

INT 21H

MAIN ENDP

;---------------------------------------------- INPUT PROC NEAR ;输入子程序

LEA BX,STRING ;指向输入字符的地址 MOV CX, 33 ;循环的次数

DISSTRING:

MOV Dl,[BX]

MOV AH,2 ;显示一个字符在屏幕上 INT 21H

INC bx

LOOP DISSTRING ;循环输出显示

JMP INPUTINIT

WRONGINPUT: ;用户输入错误提示

LEA DX,WRONGSTRING

MOV AH,9

INT 21H

INPUTINIT: ;输入初始化

LEA DX,INPUTBUFFER ;装载输入缓冲区首地址

MOV AH,0AH ;输入功能代码

INT 21H ;从键盘输入一个数,以回车键结束 MOV AX,0 ;累加器清0

MOV Cl,INPUTBUFFER+1 ;循环次数

MOV CH,0

LEA BX,INPUTBUFFER+2 ;装载字符存放区首地址INPUTONE: ;输入过程

MUL C10 ;乘以要转换成的进制数

MOV Dl,[BX]

CMP Dl,'0' ;判断输入是否小于0

JB WRONGINPUT

CMP Dl,'9'

JA WRONGINPUT ;判断某位上的数字是否大于9

AND Dl,0FH

ADD Al,Dl

ADC AH,0 ;带进位的加法

INC BX ;加1

LOOP INPUTONE ;循环输入

MOV N,AX ;显示低位

MOV Dl,0DH

MOV AH,2

INT 21H

MOV Dl,0AH ;显示高位

MOV AH,2

INT 21H

RET

INPUT ENDP

;----------------------------------------------

FAC PROC NEAR

MOV CX,N ;取阶乘的次数n

MOV I,1D

MOV M,0D

PUSH DX

MOV DI,0D

MOV AX,DI

MOV BX,2D

mul BX ;计算n!=n*(n-1)!

MOV SI,AX ;将n!的值保存在si中

pop DX

MOV OUTPUTBUFFER[SI],1D CTRLI:

MOV T,0

MOV DI,0D

CTRLDI:

CMP DI,M JBE DONE jmp CMPC DONE:

PUSH DX MOV AX,DI MOV BX,2D

mul BX MOV SI,AX

POP DX

MOV AX,OUTPUTBUFFER[SI] MOV BX,I MUL BX ADD AX,T

ADC DX,0

MOV BX,10000 DIV BX MOV T,AX

PUSH DX MOV AX,DI MOV BX,2D MUL BX MOV SI,AX

POP DX

MOV OUTPUTBUFFER[SI],DX INC DI

JMP CTRLDI CMPC:

CMP T,0 JA THREE1 JMP NEXT THREE1:

相关文档
最新文档