汇编学生管理系统实验报告.docx

上传人:b****4 文档编号:24319537 上传时间:2023-05-26 格式:DOCX 页数:26 大小:92.82KB
下载 相关 举报
汇编学生管理系统实验报告.docx_第1页
第1页 / 共26页
汇编学生管理系统实验报告.docx_第2页
第2页 / 共26页
汇编学生管理系统实验报告.docx_第3页
第3页 / 共26页
汇编学生管理系统实验报告.docx_第4页
第4页 / 共26页
汇编学生管理系统实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

汇编学生管理系统实验报告.docx

《汇编学生管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《汇编学生管理系统实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

汇编学生管理系统实验报告.docx

汇编学生管理系统实验报告

 

《汇编语言程序设计》

综合程序设计实验报告

题目:

简单学生成绩管理

 

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等高级语言灵活、自然,但它可以帮助我们了解计算机的运行方式,理解高级语言的编写方法。

认真对待一门学科,我们都会有所收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1