《汇编语言》实验报告
——累加器制作
2014级计算机科学与工程学院 学号: 姓名
一、实验要求:
1.显示 INPUT N:,提示用户输入数字字串 2.检测输入字串的合法性,非法给出提示 3.将输入数字字串转化为数值,存入变量n 4.累加1~n,存入变量sum 5.以十进制显示sum
二、流程图:
将CX 加到A X中 开始 输入 转化为数值,将堆栈中的高位数字乘10然后与低位数字相加,放入堆栈 是 判断是否为回车 否 判断是否为数字 将堆栈中的数字依次输出显示,直至cx=0 否 是 显示“error” 判断cx=0 否 是 得出sum的值 将结果除以10并将余数存入堆栈,累计位数cx,直至商为0 结束 三、源代码:
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
mov bx,0 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
mov ah,2 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
四、 实验测试截图
五、实验心得:
本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。其中的关键点在于通过堆栈来保护和存放数据,并在多
次存放后依次提出数据,要求我们能够灵活地利用堆栈与寄存器之间的转换进行较为复杂的逻辑运算。
经过逐步编写和多次修改完善,终于成功地完成了本次实验。在实验过程中,我的逻辑思维能力得到加强,对分步编写和局部细化了解得更加透彻,同时对循环结构、数据输入和输出过程更加熟练,课堂上学习的知识得到了练习,掌握地更加牢固,收益匪浅。
因篇幅问题不能全部显示,请点此查看更多更全内容