《计算机原理实验报告》----- 汇编语言编程部分
实验(3)名称:计算学生平均成绩实验
一、实验目的:
1、熟练掌握运算类指令以及其对各状态标志位的影响。 2、掌握运算类程序的设计及调试方法。 3、掌握BCD码的基本知识和BCD码的转换。
二、实验要求:
在DOS环境下利用EDIT软件来编辑源文件,并使用MASM和LINK工具对源文件进行编译链接,最终在实现对30个学生成绩的求和以及求平均数,并将平均数转换为BCD码显示出来。
三、程序流程图:
Buf:十进制数据串(30个字) data1:累加和(dw) data2:平均值(db) data3、4、5:BCD码(db) 显示姓名、学号字符调累加和子程序 调求平均值子程序 调转换子程序 调显示子程序 返回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 lea lop: add bx,2 loop lop
mov data1,ax ret
average: mov ax,data1 mov div mov data2,al ret
display:
lop3: mov si,offset data3
mov al,ds:[si] and al,0f0h mov cl,04h shr add al,30h mov dl,al mov al,ds:[si] and al,0fh add al,30h mov mov ah,02h int
lop4: mov si,offset data4
mov al,ds:[si] and al,0f0h
ax,0 bx,buf ax,[bx] bl,count bl
dl,al
21H add al,cl
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 int 21H
lea dx,buf2 mov ah,09h int 21h
lop22: mov ax,4c00h ; to DOS int 21h ret code ends
end main
五、实验结果:
学生签字: 日期:
图二运行结果
相关推荐: