汇编学生管理系统实验报告.docx
- 文档编号:24319537
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:26
- 大小:92.82KB
汇编学生管理系统实验报告.docx
《汇编学生管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《汇编学生管理系统实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
汇编学生管理系统实验报告
《汇编语言程序设计》
综合程序设计实验报告
题目:
简单学生成绩管理
1、项目简介
本程序为一简单的学生成绩管理程序,通过学生姓名对学生成绩进行相应的增删改查操作,同时加入音乐程序让系统更加生动、形象。
语言为80x86汇编语言,运行环境为MASM6.0
2、小组成员具体分工
小组成员共同商讨完成程序的需求分析,设计好程序的各个功能模块。
具体分工:
曹玉松:
完成学生成绩的查询,输出,排序,程序整合
吕盼举:
音乐播放、清屏、图形输出、实验报告撰写
3、需求分析与设计
(对项目的详细分析步骤)
本程序综合运用课上所学知识,主在完成学生成绩的管理工作,
首先,有一个菜单界面,用来给用户提示信息,提供七个菜单选项,包括成绩的查询,学生信息的输出,成绩的排序、增加、删除等,
另外还有一个让人劳逸结合的音乐播放功能,有音乐的选择、播放功能,在放音乐的同时可以将音乐的频率随着音乐同步以柱状图形显示在屏幕上,模拟mp3音乐播放的功能。
4、代码及分析
亮点一:
子程序
综合运用各种子程序,嵌套调用,既有段内也有段间子程序
亮点二:
宏
多次使用宏定义,通过宏的调用使程序代码简化
亮点三:
音乐播放
选择乐曲进行播放,
亮点四:
图形动态显示
调用时钟中断,绘制图像,动态显示
亮点五:
伪操作
代码:
outputmacros
movdl,s
adddl,30h
movah,2
int21h
endm
showmacroxingcan
leadx,xingcan
movah,9
int21h
endm
shurumacroa
LEASI,ds:
MUS_FREQ&a;取发声的频率(音阶)表首地址
LEABP,ds:
MUS_TIME&a;
endm
huanhangmacro
movah,2
movdl,10
int21h
movah,4ch
movah,2
movdl,13
int21h
movah,4ch
endm
showkonggemacro
movah,2
movdl,00h
int21h
movah,4ch
endm
STACKSEGMENTPARASTACK'STACK';定义堆栈段
DB64DUP('STACK...')
STACKENDS;以上定义堆栈段
;******************************************
DATASSEGMENT
MUS_FREQ0DW330,294,262,294,3dup(330)
dw3dup(294),330,392,392
DW330,294,262,294,4dup(330),294,294,330,294,262,-1
MUS_TIME0DW6dup(25),50
DW2dup(25,25,50)
DW12dup(25),100
MUS_FREQ1dw330,392,330,294,330,392,330,294,330
dw330,392,330,294,262,294,330,392,294
dw260,262,220,196,220,262,294,330,262,-1
MUS_TIME1dw3dup(50),25,25,50,25,25,100
dw2dup(50,50,25,25),100
dw3dup(50,25,25),100
MUS_FREQ2DW262,262,294,262,349,330,262
dw262,294,262,392,349,262,262
DW294,440,349,330,294,466
dw466,440,262,392,349,-1
MUS_TIME2DW25,25,50,50,50,100
DW25,25,50,50,50,100
DW25,25,50,50,50,50,150
DW25,25,50,50,50,100
scoredw64,71,66,61,78,80,83,89,79
N=$-score
n1=N/2
name1db'aa$'
db'bb$'
db'cc$'
db'dd$'
db'ee$'
db'ff$'
db'gg$'
db'hh$'
db'ii$'
xequ$-name1
wwequx/2
len_sequ2
str_ddb30,?
30dup(?
)
mess1db'match$'
mess2db'noname!
$'
namdb13,10,'namegrade',13,10,'$'
stringdb10,13,'*********************'
db10,13,'1.outputthenameandgrade'
db10,13,'2.seek'
db10,13,'3.paixu'
db10,13,'4.tongji'
db10,13,'5.qingping'
db10,13,'6.Laoyijiehe'
db10,13,'7.Quit'
db10,13,'*********************'
db10,13,'select:
','$'
function1db10,13,'output:
',10,13,'$'
function2db10,13,'input:
','$'
function3db10,13,'***********Goodbye!
***********','$'
temp1dw?
temp2dw?
adb10
bdw?
hcdb1
MUS_LSTDB'****************',0DH,0AH
DB'0MUSIC0',0DH,0AH
DB'1MUSIC1',0DH,0AH
DB'2MUSIC2',0DH,0AH
DB'3exit',0DH,0AH
DB'****************',0DH,0AH,'$'
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACK
START:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
haha:
movah,00h
moval,10h;选择显示方式10h(16色图形)
int10h
movah,0bh
movbh,00h
movbl,01h;背景设为蓝色
int10h
callfunction
function:
leadx,string
movah,9
int21h
movah,1
int21h
cmpal,'1'
jecase1
cmpal,'2'
jecase2
cmpal,'3'
jecase3
cmpal,'4'
jecase4
cmpal,'5'
jecase5
cmpal,'6'
jecase6
cmpal,'7'
jecase7
jmpfunction
case1:
leadx,function1
movah,9
int21h
movcx,n1
movbp,offsetname1
xianshixingming:
movdx,bp
movah,9
int21h
showkongge
addbp,3
loopxianshixingming
huanhang
MOVCX,N/2
callshowscore
jmpfunction
case2:
showfunction2
leadx,str_d
movah,0ah
int21h
movcl,ww
LEASI,name1
movdi,0
pushdi
bijiao:
pushcx
pushdx
;比较字符串长度是否一致
XORbX,bX
MOVbL,str_d+1
CMPbX,len_s
JNEMS
;比较字符串中各元素是否一致
LEADI,str_d+2
movcl,len_s
leabp,score
pushsi
MAD:
MOVAL,DS:
[SI]
MOVBL,ES:
[DI]
CMPAL,BL
JNEMS
INCSI
INCDI
LOOPMAD
popsi
MOVCX,1
huanhang
popdi
movsi,0
pushdi
callshowscore
MS:
popdi
adddi,2
pushdi
popcx
loopbijiao
leadx,mess2
SHOW3:
;输出匹配结果信息
MOVAH,09H
INT21H
MOVAH,4CH
jmpfunction
case3:
callmaopao
case4:
calltongji
case5:
jmphaha
case6:
pushax
pushbx
pushcx
pushdx
pushsi
pushbp
pushdi
callMP3
popdi
popbp
popsi
popdx
popcx
popbx
popax
jmpfunction
case7:
leadx,function3
movah,9
int21h
MOVAH,4CH
INT21H
MP3proc
callwaitf
a5:
leadx,mus_lst
movah,09
int21h
movah,01
int21h
cmpal,'0'
jza1
cmpal,'1'
jza2
cmpal,'2'
jza3
cmpal,'3'
jzend_mus
jmpa5
ac:
callwaitf
a1:
shuru0
callwaitf
jmpa4
a2:
shuru1
callwaitf
jmpa4
a3:
shuru2
callwaitf
a4:
movcx,0
movbl,0
FREQ:
MOVDI,ds:
[si];读取频率值
CMPDI,-1;歌曲结束了吗?
JEa5
movbl,01
movdx,di
subdx,190
movb,dx
aa:
movah,0ch;写像素点
moval,bl
int10h
incdx
cmpdx,400
jneaa
movdx,b
pushax
subax,ax
inccx
suba,5
movax,cx
diva
mova,10
cmpah,0
popax
jnzaa
MOVBX,DS:
[BP];读取节拍
CALLSOUNDF;调通用发声子程序
inccx
;aa
inccx
;jneaa
inccx
;jneaa
inccx
;jneaa
inccx
addcx,5
cmpcx,150
jbeab
callwaitf
movcx,0
ab:
ADDSI,2
ADDBP,2
;ad:
inccx
JMPFREQ
END_MUS:
;movax,4c00h
;int21h
ret
MP3endp
SOUNDFPROCnear
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAL,0b6H;写定时器8253的工作方式
OUT43H,AL
MOVDX,12H;根据频率求8253的计数值,即533H*896/freq
MOVAX,348ch;(DX),(AX)=123280H=533H*896
DIVdi;(DI)=freq
OUT42H,AL;向8253送计数值
MOVAL,AH
OUT42H,AL
INAL,61H;取8255的PB口当前内容,并保护
MOVAH,AL
ORAL,3;开始发声,PB1=1,PB0=1
OUT61H,AL
WAIT1:
MOVCX,28000;延时(BX)×10ms
delay:
loopdelay
decbx
jnzWAIT1
MOVAL,AH
ANDAL,0FCH;停止发声,PB1=0,PB0=0
OUT61H,AL
POPDI
POPDX
POPCX
POPBX
POPAX
RET
SOUNDFENDP
;******************************************
WAITFPROCNEAR
PUSHAX
movah,00h
moval,10h;选择显示方式10h(16色图形)
int10h
movah,0bh
movbh,00h
movbl,01h;背景设为蓝色
int10h
movah,0bh
movbh,01h
movbl,00h;设置调色板0#
int10h
POPAX
RET
WAITFENDP
;CSEGENDS;以上定义代码段
;******************************************
showscoreproc
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
MOVAX,DATAS
MOVDS,AX
MOVDI,0
MOVBP,N+5
SHOW2:
PUSHCX
MOVDX,0
MOVAX,[SI]
CALLDTOC2
CALLSHOW_STR2
ADDSI,2
POPCX
LOOPSHOW2
callfunction
DTOC2PROC
S:
MOVCX,10
CALLDIVDW2
ADDCL,30H
MOVDS:
[BP],CL
INCDI
PUSHAX
ADDAX,DX
JZBACK
POPAX
DECBP
JMPS
BACK:
POPAX
RET
DTOC2ENDP
DIVDW2PROC
PUSHAX
MOVAX,DX
MOVDX,0
DIVCX
MOVBX,AX
POPAX
DIVCX
MOVCX,DX
MOVDX,BX
RET
DIVDW2ENDP
SHOW_STR2PROC
S2:
MOVAH,2
MOVDL,DS:
[BP]
INT21H
INCBP
DECDI
JZOK
JMPS2
OK:
MOVAH,2
MOVDL,0
INT21H
RET
SHOW_STR2ENDP
codesends
showscoreendp
maopaoproc
CODESSEGMENT
pushcs
pushds
pushax
ASSUMECS:
CODES
MOVSI,0
MOVCX,N/2-1
CALLBUBBLE
MOVCX,N/2
MOVSI,0
MOVDI,0
MOVBP,N+5
callshowscore
BUBBLEPROC
L1:
PUSHCX
LEASI,score
L2:
MOVAX,score[SI]
CMPAX,score[SI+2]
JBENEXT
XCHGAX,score[SI+2]
MOVscore[SI],AX
NEXT:
ADDSI,2
LOOPL2
POPCX
LOOPL1
huanhang
RET
BUBBLEENDP
ret
popax
popcx
popdx
CODESENDS
maopaoendp
clr_screenprocnear
movah,06h
movcx,temp1
movdx,temp2
int10h
movah,02h
movdh,24
movdl,80
movbh,0
int10h
ret
clr_screenendp
tongjiproc
DATASSEGMENT
num_under60db0
num_60to69db0
num_70to79db0
num_80to89db0
num_90to99db0
num_100db0
string10db'thenumberunder60:
$'
string20db'thenumberbetween60and69:
$'
string30db'thenumberbetween70and79:
$'
string40db'thenumberbetween80and89:
$'
string50db'thenumberbetween90and99:
$'
string60db'thenumberwhichis100:
$'
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
MOVAX,DATAS
MOVDS,AX
xorax,ax
movcx,9
leabx,score
compare:
cmpbyteptr[bx],60
jlunder60
is60to69:
cmpbyteptr[bx],70
jl_60to69
is70to79:
cmpbyteptr[bx],80
jl_70to79
is80to89:
cmpbyteptr[bx],90
jl_80to89
is90to99:
cmpbyteptr[bx],100
jl_90to99
jzequal100
under60:
addnum_under60,1
jmpcon
_60to69:
addnum_60to69,1
jmpcon
_70to79:
addnum_70to79,1
jmpcon
_80to89:
addnum_80to89,1
jmpcon
_90to99:
addnum_90to99,1
jmpcon
equal100:
addnum_100,1
con:
leabx,[bx+2]
loopcompare
last:
huanhang
showstring10
outputnum_under60
huanhang
showstring20
outputnum_60to69
huanhang
showstring30
outputnum_70to79
huanhang
showstring40
outputnum_80to89
huanhang
showstring50
outputnum_90to99
huanhang
showstring60
outputnum_100
huanhang
movah,4ch
jmpfunction
CODESENDS
tongjiendp
CODESENDS
ENDSTART
五、总结
本次大作业采用汇编语言编写一比较大型的程序,采用数组、栈等形式进行操作,从开始设计到实现,我们复习到了课本上学到的知识,也对没有学到的图形和声音的应用领域有了一些涉猎。
其中遇到了不少问题,比如如何对输入的字符串进行插入,转换成十六进制的数进行保存,两位数的输出问题以及对图像的输出,清屏,寄存器使用冲突等操作的问题。
通过查阅有关资料解决以上问题,使程序顺利完成。
汇编语言博大精深,它虽然不如c等高级语言灵活、自然,但它可以帮助我们了解计算机的运行方式,理解高级语言的编写方法。
认真对待一门学科,我们都会有所收获。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 学生 管理 系统 实验 报告