《汇编语言》实验报告
——累加器制作2014级计算机科学与工程学院学号:姓名
一、实验要求:
1.显示 INPUT N:,提示用户输入数字字串
2.检测输入字串的合法性,非法给出提示
3.将输入数字字串转化为数值,存入变量n
4.累加1~n,存入变量sum
5.以十进制显示sum
二、流程图:
三、源代码:
DATAS SEGMENT
str1 db "Input N:","$"
str2 db "sum=","$"
str3 db 0ah,"error","$"
n dw 0
sum dw 0
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START:
MOV AX,DATAS
MOV DS,AX
LEA dx,str1;输出提示符
mov ah,9
int 21h
input:
mov ah,01;输入数字
int 21h
cmp al,0dh;判断是否为回车
jz step1
cmp al,"0";判断字符合法性
jb error
cmp al,"9"
ja error
sub al,"0";转化为ASCII码
mov ah,0;此段将高位乘10
push ax
mov ax,n
shl ax,1
push ax
mov cl,2
shl ax,cl
pop bx
add ax,bx
mov bx,0;高位与低位相加
pop bx
add ax,bx
mov n,ax
xor cx,cx;设定累加次数
mov cx,n
jmp input
step1:
mov ax,cx
sub cx,1
step2:
add ax,cx;求累加和
loop step2
mov sum,ax
lea dx,str2
mov ah,9
int 21h
mov cx,0
mov ax,sum
step3:
mov dx,0
mov bx,10;将结果除以10并把余数压进栈div bx
push dx
inc cx
cmp ax,0h
jnz step3
step4:
xor ax,ax
pop ax ;栈内依次输出
mov dx,ax
add dx,30h
int 21h
loop step4
jmp last
error:
lea dx,str3;输出错误提示语
mov ah,9
int 21h
last:
MOV AH,4CH
INT 21H
CODES ENDS
END START
四、实验测试截图
五、实验心得:
本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。
其中的关键点在于通过堆栈来保护和存放数据,并在多
次存放后依次提出数据,要求我们能够灵活地利用堆栈与寄存器之间的转换进行较为复杂的逻辑运算。
经过逐步编写和多次修改完善,终于成功地完成了本次实验。
在实验过程中,我的逻辑思维能力得到加强,对分步编写和局部细化了解得更加透彻,同时对循环结构、数据输入和输出过程更加熟练,课堂上学习的知识得到了练习,掌握地更加牢固,收益匪浅。