《汇编语言》实验报告
——累加器制作 20##级计算机科学与工程学院 学号: 姓名
一、实验要求:
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
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
四、 实验测试截图
五、实验心得:
本次试验的目的在于通过编辑累加器程序来熟悉汇编语言中对循环结构的使用,其中包括循环输入字符并判断合法性、累加计算、循环输出计算结果。其中的关键点在于通过堆栈来保护和存放数据,并在多次存放后依次提出数据,要求我们能够灵活地利用堆栈与寄存器之间的转换进行较为复杂的逻辑运算。
经过逐步编写和多次修改完善,终于成功地完成了本次实验。在实验过程中,我的逻辑思维能力得到加强,对分步编写和局部细化了解得更加透彻,同时对循环结构、数据输入和输出过程更加熟练,课堂上学习的知识得到了练习,掌握地更加牢固,收益匪浅。
第二篇:汇编语言上机实验报告4
学号 080304235
沈阳建筑大学城市建设学院
汇编语言程序设计上机实验报告
2010~2011第 2 学期
专业班级: 计算机08-2班
姓 名: 董宇亮
上机时间:
指导教师: 杜利明
年 月 日
1.实验目的
1.掌握分支程序设计方法。
2.掌握利用转移指令jl、jmp实现多岔分支的方法。
2.实验要求
掌握汇编程序的条件结构程序设计方法
3.实验指令内容
统计学生成绩score。设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并分别存放到s5、s6、s7、s8、s9及s10单元中
4.实验步骤
1.编辑程序。
2.输入,汇编并连接此程序。
3.在DEBUG下运行此程序,记录运行结果。
5.程序(指令)清单
data segment
score dw 68,72,81,78,44,96,37,75,100,89
s5 dw 0
s6 dw 0
s7 dw 0
s8 dw 0
s9 dw 0
s10 dw 0
data ends
code segment
main proc far
assume ds:data,cs:code
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov si,offset score
mov cx, 10
next:
mov bx,[si]
mov ax,60
cmp bx,ax
jb ss5
mov ax,70
cmp bx,ax
jb ss6
mov ax,80
cmp bx,ax
jb ss7
mov ax,90
cmp bx,ax
jb ss8
mov ax,100
cmp bx,ax
jb ss9
inc s10
jmp loop1
ss5:inc s5
jmp loop1
ss6:inc s6
jmp loop1
ss7:inc s7
jmp loop1
ss8:inc s8
jmp loop1
ss9:inc s9
loop1:add si,2
loop next
exit:ret
main endp
code ends
end start
6. 程序运行结果
7.实验心得