- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算学生平均成绩实验
《计算机原理实验报告》----- 接口部分
实验( 三 )名称: 计算学生平均成绩实验
一、实验目的:
1.熟悉汇编语言程序的使用
2.熟悉十进制的运算、设计显示程序运行结果的格式
3.熟悉掌握DOS功能调用
二、实验要求:
编写程序,求30个分数的平均值,并以十进制表示将结果显示在屏幕上,显示的格式要求如下:
第一行显示: The thirty scores are: 以分号分隔的30个分数;
第二行显示:average scores is= 求得的平均分数。
三、编程算法与说明:
本实验从键盘输入N个分数数据,调用DOS 10号功能,便可实现从键盘输入一个字符串,然后将输入的字符串转为N个分数,累加,求平均值,然后将平均值除以N取余数,余数入栈,然后出栈输出到屏幕即可。
DOS 10号功能调用说明:
MOV AH,0AH是从键盘输入字符到缓冲区。
调用参数:
DS:DX=缓冲区首地址
[DS:DX]=缓冲区最大字符数。
返回参数:
[DS:DX+1]=实际输入的字符数
DS:DX+2=字符串首地址
四、程序流程图:
五、程序清单:
data segment
infor1 db 201081516 linyun,0dh,0ah,$
infor2 db please input the scores split by ; ,0dh,0ah,$
first db 0dh,0ah,The scores are: ,$
second db The average score is = ,$
limit db 200 ;最大能从键盘输入200个字符
numb db ? ;实际输入的字符
msg db 200 dup(0) ;从键盘输入的字符首地址
count dw ? ;统计输入的分数个数
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx, infor1
mov ah,9
int 21h
lea dx,infor2
mov ah,9
int 21h
mov dx,offset limit ;DOS 10号功能调用
mov ah,0ah
int 21h
mov bl,numb ;numb为实际输入的值
mov bh,0
mov byte ptr msg[bx],$ ;将最后一个字符为$,表示字符串的结尾
lea dx,first
mov ah,9
int 21h
lea dx,msg
mov ah,9
int 21h
mov dl,0dh ;回车换行
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
lea dx,second
mov ah,9
int 21h
lea bx,msg
mov dl,0 ;用dl统计分数的个数
mov cx,0ffffh
circle: ;统计分数的个数,由于分数之间是用逗号隔开的,所以统计逗
mov al,[bx] ;号的个数就是分数的个数
cmp al,$ ;碰到字符串结尾跳出循环
je main
cmp al,;
jne next
inc dl
next:
inc bx
loop circle
main:
lea bx,msg
mov si,0
mov dh,0
mov count,dx ;将统计到的分数个数赋给count变量,再赋给CX
mov cx,count ;cx为累加的次数,也就是循环的次数
loop1:
mov ah,00h
mov al,[bx]
sub al,30h
inc bx
mov dl,[bx]
inc bx
cmp dl,; ; 第二个字符为逗号则说明分数为0-9之间的数,直接跳转到累加程序
je sum
sub dl,30h ;如果是10-99之间的数,十位乘以10加上各位
mov ah,10
mul ah
mov dh,00h
add ax,dx
inc bx
sum:
add si,ax ; 累加的值在si寄存器中
loop loop1
mov ax,si
mov cx,count
div cl ;总分数除以个数就是平均值,存与AL中
mov ah,0 ;平均值存在AX中
;;;;;;;;;;;;;;;;;;;;;;;;;;接下来的程序是将AX里的值转为ascii码输出到屏幕
mov
文档评论(0)