《计算机原理实验报告》-- ---汇编语言编程部分
实验(3)名称:计算学生平均成绩实验
亠、实验目的:
1、熟练掌握运算类指令以及其对各状态标志位的影响
2、掌握运算类程序的设计及调试方法。
3、掌握BC码的基本知识和BC码的转换。
二、实验要求:
在DO环境下利用EDIT软件来编辑源文件,并使用MAS和LINK工具对源文件进行编译 链接,最终在实现对30个学生成绩的求和以及求平均数,并将平均数转换为 BC码显示 出来。
、程序流程图:
调累加和子程序调求平均值子程序调转换子程序调显示子程序返回DOS
调累加和子程序
调求平均值子程序
调转换子程序
调显示子程序
返回DOS
图一求平均分流程图
四、程序清单:
data
segment
buf
dw
60,70,80,90,95,98,20,30,40,50
dw
25,35,65,67,88,99,100,78,12,23
dw
100,90,80,70,60,50,59,68,79,90
count
equ ($-buf)/2
data1
dw
?
data2
db
?
data3
db
?
data4
db
?
data5
db
?
buf1
db
' my name is chongkun 201383109',0dh,0ah,'$'
buf2
db
0dh,0ah,'$'
buf3
db
' The average score is ','$'
buf4
db
' 80,100,100,80,75,66,58,100,69,95
',0dh,0ah,'95,72,78,58,62,63,98,91,72,78',0dh,0ah,'90,85,67,74,82,59,66,88,
99,77',0DH,0AH,'$'
data
ends
ssg1
segment
dw 100 dup(?)
ssg1
ends
code
segment
assume cs:code,ds:data,ss:ssg1
main:
mov ax,data
mov ds,ax
lea dx,buf1 mov ah,09h int 21h lea dx,buf4 mov ah,09h
int 21h
call
accum
call
average
call
conver
lea
dx,buf3
mov
ah,09h
int
21h
call display
conver: mov al,data2 mov ah,0
mov bl,100 div bl
mov data3,al mov al,ah mov ah,0 mov bl,10 div bl
mov data4,al mov data5,ah ret
accum:
mov cx,count
mov
ax,0
lea
bx,buf
lop:
add
ax,[bx]
add bx,2
loop lop mov data1,ax ret
average: mov ax,data1 movbl,count
divbl
mov data2,al ret
display:
lop3: mov si,offset data3 mov al,ds:[si] and al,0f0h mov cl,04h shr al,cl add al,30h mov dl,al mov al,ds:[si] and al,0fh add al,30h mov dl,al mov ah,02h int 21H
lop4: mov si,offset data4 mov al,ds:[si] and al,0f0h
mov cl,04h
shr al,cl add al,30h mov dl,al mov al,ds:[si] and al,0fh add al,30h
mov dl,al mov ah,02h
int 21H
lop5:
mov si,offset data5 mov al,ds:[si] and al,0f0h mov cl,04h shr al,cl add al,30h mov dl,al mov al,ds:[si] and al,0fh add al,30h mov dl,al mov ah,02h int21H
lea dx,buf2 movah,09h
int21h
lop22:
mov ax,4c00h ; to DOS int 21h ret
code end
ends main
、实验结果:
DOSBox 0.74■匚pu3000 匚yde缶 FemEskip 0, Program: DOS?.-
Cross-reference CNUL.CRF1:
4呻76 * 453189 Bytes symbolfree
0