微机原理实验-汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用数学学院信息与计算科学专业班__组学号姓名协作者______________ 教师评定_________________
实验题目汇编语言程序设计
一、实验目的与要求
实验目的:
掌握汇编语言程序设计的基本方法
实验要求:
设有九个学生某门课的成绩存放在数据区中。试编制一个程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。
二、实验方案
要统计各个分数段的人数,首先要在数据段中预先存放学生的成绩,然后判断各学生的分数属于哪一个分数段。分数小于60即为不及格,大于等于60则执行下一步;判断是否小于70,若是则属于60~69这个段,否则执行下一步继续判断。输入过程有可能出现错误输入一个大于满分100分或者小于0的数,所以还要判断这个数是不是输入错误。在数据区中,存放9个学生的成绩,根据程序执行的结果,验证所设计的程序是否正确。
三、实验结果和数据处理
数据处理:程序代码及代码注释如下:
include io32.inc
.data
score DWORD 67 ,77 ,98 ,100 ,110 ,89 ,35 ,58 ,88
output1 byte '不及格(0-59)的人数是: ',0
output2 byte '及格(60-69)的人数是: ',0
output3 byte '中等(70-79)的人数是: ',0
output4 byte '良好(80-89)的人数是: ',0
output5 byte '优秀(90-99)的人数是: ',0
output6 byte '满分(100)的人数是: ',0
output7 byte '输入错误数: ',0
count1 byte 0 ;0-59段人数计数器
count2 byte 0 ;60-69段人数计数器
count3 byte 0 ;70-79段人数计数器
count4 byte 0 ;80-89段人数计数器
count5 byte 0 ;90-99段人数计数器
count6 byte 0 ;100段人数计数器
count7 byte 0 ;错误分数段人数计数器
.code
start:
mov ecx,lengthof score ;数组长度每次循环后ecx减1
mov esi,0
again:
mov eax,score[esi*(type score)] ;寄存器相对寻址,type score即为DWORD的大小,为4 call dispsid
cmp eax,0
jl flags0 ;判断是否小于0?是就转移到flags0
cmp eax,60 ;跟60比较大小
jl flags1
cmp eax,70
jl flags2
cmp eax,80
jl flags3
cmp eax,90
jl flags4
cmp eax,100
jl flags5
je flags6
jg flags7
flags0:
add count7,1
jmp next
flags1:
add count1,1
jmp next
flags2:
add count2,1
jmp next
flags3:
add count3,1
jmp next
flags4:
add count4,1
jmp next
flags5:
add count5,1
jmp next
flags6:
add count6,1
jmp next
flags7:
add count7,1
jmp next
next:
inc esi ;指向下一个数
loop again;循环
OUTPUT:
call dispcrlf ;回车换行
mov eax,offset output1
call dispmsg ;显示字符串(以0结尾) xor eax,eax ;异或使eax为0
mov al,count1
call dispsid ;显示有符号的十进制整数 call dispcrlf
mov eax,offset output2
call dispmsg
xor eax,eax
mov al,count2
call dispsid
call dispcrlf
mov eax,offset output3
call dispmsg
xor eax,eax
mov al,count3
call dispsid
call dispcrlf
mov eax,offset output4
call dispmsg
xor eax,eax
mov al,count4
call dispsid
call dispcrlf
mov eax,offset output5
call dispmsg
xor eax,eax
mov al,count5
call dispsid
call dispcrlf
mov eax,offset output6
call dispmsg
xor eax,eax
mov al,count6
call dispsid
call dispcrlf
mov eax,offset output7
call dispmsg