汇编语言实验报告 累乘
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本次实验进一步提高了我对汇编语言的掌握程度,一些常见的程 序结构如输入和输出已经能够熟练地运用,在编辑程序时也更加注重 对逻辑结构的分析,对子程序和递归调用的理解更加透彻,另外在出 现错误进行调试时也学到了新的调试技巧,让我学到了很多新的知 识。
是
初始化 ax=1 便于计算
2.计算:
开始
N 移到 bx
结束
两次出栈并与 n*4 结果相加 得出新的 n
bx 是否为
是
0
ax 移至 result,bx 值减 1 并
移到 N
否
ax*bx 结果 放入 ax
n 值*2 放入堆
n*4
结束
3.输出:
开始
将结果除以 10 并将余
数放入堆栈
否
三、源代码:
data segment str1 db "Input n:","$" str2 db "n!=","$" n dw 0 result dw 0 data ends code segment assume ds:data,cs:code start: mov ax,data mov ds,ax
lea dx,str1;显示输入提示语 mov ah,9 int 21h
call input;调用输入子程序
lea dx,str2;显示结果提示语 mov ah,9 int 21h
mov ah,0
call fac;调用计算子程序
call outp ;调用输出子程序
mov ah,4ch int 21h
mov ax,n;此段将前一次输入的数据*10 shl ax,1 push ax mov cl,2 shl ax,cl xor bx,bx pop bx add ax,bx
xor bx,bx;得出输入结果并放进 n pop bx add ax,bx mov n,ax jmp cin end1: mov ax,1;将 ax 内容初始化为 1 ret input endp fac proc xor bx,bx mov bx,n
cx 值 +1 记 录位数
判断商是 否为 0
将堆栈中 cx 记录位 数的数字输出
是
结束
input proc cin:
mov ah,1;输入并判断是否为回车 int 21h cmp al,0dh jz end1
sub al,"0";转化为 16 进制数 mov ah,0 push ax;用堆栈保护数据
《汇编语言》实验报告
——累乘
2014 级计算机科学与工程学院 学号:
姓名:
一、实验要求:
1、输入一个数字字串,将字串转化为数值并存储到变量 N 中。
2、使用递归调用计算 N!
3、将计算结果转化为字串进行Biblioteka Baidu出。
二、流程图:
开始
输入 N
计算 N!
输出结果
结束
1.输入:
开始
判断输入是
否
否为回车
ax 放入 堆栈
cmp bx,0;判断计算是否停止 jz end2 mul bx;将 ax*bx 结果放入 ax mov result,ax
dec bx;bx 和 n 中的值-1 mov n,bx call fac;递归调用计算程序直至最后一个乘的数字为 1 end2: ret fac endp
outp proc ;定义子程序用于输出 mov cx,0
div1:mov dx,0;此段将结果的每一位由低到高放入堆栈 mov bx,10 div bx add dx,"0" push dx inc cx;记录放入堆栈的位数 cmp ax,0 jnz div1
output: mov dx,0;此段将堆栈中的数据逐个输出 pop dx mov ah,02h int 21h loop output ret
outp endp code ends
end start
四、运行结果截图:
五、实验心得:
本次实验的目的是通过对子程序的应用来实现对 N!的计算,其
特点在于利用子程序将主程序分为几个小部分,逐步解决问题;其中 应用的难点在于对子程序的递归调用,调用自身来进行反复计算时要 注意子程序开始执行以及递归调用时的条件,理清逻辑结构才能避免 出现混乱。
是
初始化 ax=1 便于计算
2.计算:
开始
N 移到 bx
结束
两次出栈并与 n*4 结果相加 得出新的 n
bx 是否为
是
0
ax 移至 result,bx 值减 1 并
移到 N
否
ax*bx 结果 放入 ax
n 值*2 放入堆
n*4
结束
3.输出:
开始
将结果除以 10 并将余
数放入堆栈
否
三、源代码:
data segment str1 db "Input n:","$" str2 db "n!=","$" n dw 0 result dw 0 data ends code segment assume ds:data,cs:code start: mov ax,data mov ds,ax
lea dx,str1;显示输入提示语 mov ah,9 int 21h
call input;调用输入子程序
lea dx,str2;显示结果提示语 mov ah,9 int 21h
mov ah,0
call fac;调用计算子程序
call outp ;调用输出子程序
mov ah,4ch int 21h
mov ax,n;此段将前一次输入的数据*10 shl ax,1 push ax mov cl,2 shl ax,cl xor bx,bx pop bx add ax,bx
xor bx,bx;得出输入结果并放进 n pop bx add ax,bx mov n,ax jmp cin end1: mov ax,1;将 ax 内容初始化为 1 ret input endp fac proc xor bx,bx mov bx,n
cx 值 +1 记 录位数
判断商是 否为 0
将堆栈中 cx 记录位 数的数字输出
是
结束
input proc cin:
mov ah,1;输入并判断是否为回车 int 21h cmp al,0dh jz end1
sub al,"0";转化为 16 进制数 mov ah,0 push ax;用堆栈保护数据
《汇编语言》实验报告
——累乘
2014 级计算机科学与工程学院 学号:
姓名:
一、实验要求:
1、输入一个数字字串,将字串转化为数值并存储到变量 N 中。
2、使用递归调用计算 N!
3、将计算结果转化为字串进行Biblioteka Baidu出。
二、流程图:
开始
输入 N
计算 N!
输出结果
结束
1.输入:
开始
判断输入是
否
否为回车
ax 放入 堆栈
cmp bx,0;判断计算是否停止 jz end2 mul bx;将 ax*bx 结果放入 ax mov result,ax
dec bx;bx 和 n 中的值-1 mov n,bx call fac;递归调用计算程序直至最后一个乘的数字为 1 end2: ret fac endp
outp proc ;定义子程序用于输出 mov cx,0
div1:mov dx,0;此段将结果的每一位由低到高放入堆栈 mov bx,10 div bx add dx,"0" push dx inc cx;记录放入堆栈的位数 cmp ax,0 jnz div1
output: mov dx,0;此段将堆栈中的数据逐个输出 pop dx mov ah,02h int 21h loop output ret
outp endp code ends
end start
四、运行结果截图:
五、实验心得:
本次实验的目的是通过对子程序的应用来实现对 N!的计算,其
特点在于利用子程序将主程序分为几个小部分,逐步解决问题;其中 应用的难点在于对子程序的递归调用,调用自身来进行反复计算时要 注意子程序开始执行以及递归调用时的条件,理清逻辑结构才能避免 出现混乱。