汇编语言作业(七)

班级:  计算机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才解决,这次更加理解了堆栈的使用,以后会用的更加的顺手和频繁。

posted @ 2017-02-24 17:44  拓海藤原  阅读(253)  评论(0编辑  收藏  举报