赞
踩
汇编语言实验三:
目的及要求:
从键盘输入1到8之间的一个数,求阶乘;
把结果在屏幕上以十进制数形式显示出来;
把整个过程和执行结果截图,写成实验报告
实验步骤:
定义堆栈段,数据段和代码段,数据段用于存放字符串以及回车换行指令;
主程序用于显示字符串以及call子程序,最后返回操作系统;
Input子程序用于接受键盘输入,判断输入的正确性,并将输入结果保存至bx寄存器;
Rank子程序用于计算阶乘,要初始化ax,并且计算结果保存到ax寄存器;
5、Output子程序用于输出,将10作为除数并放在cl中,ch则用于计数并用于判断输出是否完成。
主程序流程图:
input子程序:
rank子程序:
output子程序:
程序代码:
stacks segment stack dw 128 dup(?) stacks ends datae segment string1 db 'input number is :','$' string2 db ' is the result:','$' crlf db 0ah,0dh,'$' string3 db 'no result','$' datae ends code segment assume cs:code,ds:datae,ss:stacks start: mov ax,datae mov ds,ax lea dx,string1 mov ah,9 int 21h call input ;用于接收输入的N的数值 mov cx,dx call rank ;阶乘运算 call output ;输出结果 lea dx,string2 mov ah,9 int 21h mov ah,4ch int 21h input proc near push ax ;保护现场 push bx push cx mov dx,0 ;作为返回值,保存结果 mov bl,10 ;用于乘法计算 inputnum: mov ah,1 ;接受键盘输入数值,保存在al中 int 21h cmp al,'0' jb error1 cmp al,'0' je error2 cmp al,'8' ;判断数字是否大于8 ja error1 mov cl,al ;暂时存数 sub cl,48 mov ch,0 mov ax,dx mul bl mov dx,ax ;存储结果 add dx,cx jmp inputnum error1: pop cx pop bx pop ax ret error2: lea dx,crlf ;回车换行 mov ah,9 int 21h mov ah,2h mov dl,'1' ;输入的值为0,把1直接显示出来 int 21h lea dx,string2 mov ah,9 int 21h mov ah,4ch int 21h input endp rank proc near push bx mov ax,1 ;初始化ax mov bx,1 ;初始化bx,用于计数外加乘法运算 fact: mul bl cmp bx,cx je exit1 ;运算结束 inc bx jmp fact exit1: pop bx ;恢复现场,数据出栈,恢复数值 ret rank endp output proc push cx push dx mov ch,0 mov cl,10 ;作为除数 output1: cmp ax,0 je rotate div cl ;取出数据,放置在ah中 push ax mov ah,0 ;将al与ax等值 inc ch jmp output1 rotate: cmp ch,0 ;输出完成的判断 je exit2 pop dx ;接收数据,进行输出 mov dl,dh add dl,48 mov ah,2 int 21h dec ch jmp rotate exit2: pop dx ;恢复现场 pop cx ret output endp code ends end start
实验结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。