班级: 计算机14-1 姓名: 许恺 学号: 2014011329日期: 2016.4.29
一、编写程序
1.从键盘输入一个不超过8的个位数,计算该数的阶乘,并以十进制制式输出。
要求:
(1)输入数据在主程序中实现;
(2)计算阶乘的功能用子程序实现,子程序的名字为:fac;
(3)以十进制形式输出结果的功能用子程序实现,子程序的名字为:output;
(4)各子程序通过寄存器传递参数;
(5)输出格式要美观,要有适当的提示。
(1)程序清单:
data segment
s1 db 'please input an integer between 0 to 8:$'
s2 db 'its factorial=$'
data ends
stack segment stack
dw 30 dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
main proc far
start:
mov ax,data
mov ds,ax
lea dx,s1
mov ah,09h
int 21h
mov ah,01h
int 21h
mov dh,al
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
mov al,dh
sub al,30h
mov ah,0
call fac
mov bx,ax
lea dx,s2
mov ah,09h
int 21h
mov ax,bx
mov dx,0
call output
mov ah,4ch
int 21h
fac proc near
mov cl,al
dec cl
l1: mul cx
loop l1
ret
fac endp
output proc near
mov cx,0000h
l3: mov bx,000ah
cmp ax,0
jbe l2
div bx
push dx
mov dx,0000h
inc cl
jmp l3
l2: pop dx
add dx,0030h
mov ah,02h
int 21h
loop l2
ret
output endp
main endp
code ends
end start
(2)运行结果(截图):
二、编程体会
其实感觉堆栈段不用编写,因为之前不写也行,开始已经写好了,后来知道要有提示语句,又加输出字符串时就出错了,在压栈的时候出现了死循环,是用dx输出字符串的时候出了问题,最后是重新把dx赋0才解决,这次更加理解了堆栈的使用,以后会用的更加的顺手和频繁。