汇编语言1加到n
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称——累加
实验人:班级:
学号:课程:汇编语言
目的:掌握循环程序设计与过程的设计方法
内容:求出1到n的累加
设计思想:这个程序的设计从结构上来看主要分为三部分——1,键盘输入的数字字符串(十进制数值)如何变为具有数值意义的二进制数2,利用一个循环结构将1到n的和求出3,将一个就有数值意义的二进制数转化为ASCII码并以字符串(十进制)显示出来(与计算结果的二进制数相等)。Array
否
.MODEL SMALL
.STACK 1024
.DATA
f1 db 'INPUT N:','$'
f3 db 0dh,0ah,'error','$'
p dw 0
sum dw 0
.CODE
.STARTUP
mov dx,offset f1
mov ah,9h ;显示字符input n:
int 21h
input:mov ah,1
int 21h ;显示输入字符并将字符的ascii值放入al cmp al,0dh
jz next
cmp al,'0'
jb next1
cmp al,'9' ;判断字符的合法性
ja next1
sub al,'0' ;将ascii码转化为每一位的数值mov ah,0
push ax ;通过堆栈保护数据
mov ax,p ;
shl ax,1
push ax
mov cl,2
shl ax,cl ;ax的值乘以4
xor bx,bx
pop bx
add ax,bx
xor bx,bx
pop bx
add ax,bx
mov p,ax ;将n的二进制数值存入p中
jmp input
next:mov bx,0 ;bx清零
xor ax,ax ;ax清零
mov cx,p ;循环次数存入cx中
again:inc bx
add ax,bx
loop again ;将n的累加求出并放入ax中
mov sum,ax ;将n的累加存入变量sum
loop1:mov dx,0 ;
mov bx,10
div bx
add dx,'0' 将要显示的数转化为ascii码
push dx ;通过堆栈保护数据
inc cx ;记录要显示字符的个数
cmp ax,0h ;判断商是否为零
jnz loop1
mov dx,offset info2
mov ah,9
int 21h ;这三步换行显示字符
loop2:pop dx ;将要显示的字符的ascii码放入dx mov ah,2
int 21h ;dos的2号调用显示字符
loop loop2 ;通过循环显示字符串
jmp next2 ;
next1:mov dx,offset info3
mov ah,9
int 21h
next2:
.EXIT
END
在这个程序的编写过程中收获了很多,如:如何将数值ascii 码转化为二进制数,循环结构的应用,将二进制数如何以十进制数值ascii码显示。在此过程也了解到了堆栈的重要性,而且还有关于dos的调用。这个程序的编写使我受益匪浅。但是在调试的过程中也走了不少弯路,一开始就拿课件上的程序组合在一起,自以为还可以,在调试的过程中不时就出现乱码,还有那个换行显示,一开始显示的字符不在同一行。反正就是显示错位,一看这情况真的很烦,但是到最后成功的时候真的很开心,前面的付出都是值得的。一开始对汇编真的不太感兴趣,但是通过这个程序的编写后,发现自己真的爱上汇编了。