汇编课程设计PC钢琴.docx
- 文档编号:13730070
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:82
- 大小:226.90KB
汇编课程设计PC钢琴.docx
《汇编课程设计PC钢琴.docx》由会员分享,可在线阅读,更多相关《汇编课程设计PC钢琴.docx(82页珍藏版)》请在冰点文库上搜索。
汇编课程设计PC钢琴
《汇编语言》课程设计
任
务
书
姓名:
班级:
学号:
指导教师:
贾宇波、杨东鹤
授课性质:
集中
一、题目
1.简单的计算器
2.字典
3.“Pc”钢琴
二、目的:
本次课程设计的目的是提高学生分析问题、解决问题的能力以及实际动手能力,进一步加深学生对汇编语言程序设计基本理论的理解,使学生熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础。
三、已知技术参数和设计要求:
1.编写一个有符号多位十进制数的四则运算计算器程序,所输入的算式如下例所示:
-278+32=
-132――12=
11*-32=
-1234/-18=
要求程序能接收键入的算式,在接收到‘=’号时,计算并以有符号十进制数的形式显示结果,然后允许用户继续键入算式。
如果键入算式后再键入‘.’,则显示结果并结束整个程序。
(‘/’为整除)
2.已知一个由英语单词组成的字符串已按字典序排好,每个单词以空格符为结束,该串的首二字节为16位无符号二进制数,用以说明串的长度。
试编程能从键盘上输入单词(以空格字符为结束),若字符串中没有该单词,则将该单词插入该串适当的位置,使其仍保持字典序,并修改串长度,显示单词在串中位置及串长度;若字符串中有该单词,则显示字符串中所有包含该单词的单词,及其在字符串中的位置。
3.编写程序,程序运行时使PC机成为一架可弹奏的“钢琴”。
当按下数字键0~9时,发出6,7,1,2,3,4,5,6,7,i,十个音调,按‘.’则退出“钢琴”状态。
总体要求
1)程序结构清晰,相对独立的功能应尽量用子程序实现
2)有较多提示信息,以方便用户使用
3)能检测用户输入的错误,并作相应处理
4)每个程序应作较多测试,以证明程序的正确性
四、实验流程图
1.
是
是
是
是
否
否
是
2.
3.
接收键入字符
↓
是否数字键?
Y
↓N
键入字符值转化为查表偏移量→BX结束
↓
常数120000H作被除数→(DX,AX)
↓
查表得频率值作为除数
↓
相除结果作为计数初值→BX
↓
设置8253计数器2的工作模式
↓
装入计数初值
↓
打开与门
↓
延迟一段时间
↓
关闭与门
五、实验源代码
1.
STACKSEGMENTSTACK'STACK'
DW64DUP(?
)
STACKENDS
DATASEGMENT
STR1DB'CalculatorA+-*/B',0DH,0AH,'InputQQuit',0dh,0ah,'PleaseInput:
',0DH,0AH,'$'
STR2DB0DH,0AH,'Inputerror,pleaseinputagainorquit:
',0DH,0AH,'$'
STR3DB'........$'
ABDB12DUP(?
)
ADW0
BDW0
CDB15DUP(?
)
C0DB14DUP(?
)
C1DW0
DDB?
SDB0
COUNTADW?
COUNTBDW?
HDW0
LDW0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
LEADX,STR1
MOVAH,9
INT21H;输出字符串STR1
SL:
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H;回车换行
MOVS,0
MOVC1,0
LEASI,AB
MOVAH,1
INT21H;输入一个字符
MOV[SI],AL
MOVD,AL
CMPD,'.';为‘.’则终止
JZQ
CMPAL,30H
JBWR
CMPD,39H
JAWR;判断数字不在0-9则出错
MOVBX,0;BX清零
LOOP1:
INCBX
MOVAH,1
INT21H
MOV[SI+BX],AL
MOVD,AL
CMPD,'Q'
JZQ
CMPD,'q'
JZQ
CMPD,'+'
JZA1
CMPD,'-'
JZA1
CMPD,'*'
JZA1
CMPD,'/'
JZA1
CMPD,'='
JZA2
CMPD,''
JZA3
CMPD,30H
JBWR
CMPD,39H
JAWR
JMPLOOP1
Q:
JMPQUIT
WR:
LEADX,STR2
MOVAH,9
INT21H
JMPSL;出错则返回重新输入运算式
A1:
CMPS,0
JNZWR
DECBX
MOVCOUNTA,BX;取第一个输入的数A
MOVAL,D
MOVS,AL;将运算符+|-|*|/放入S
JMPLOOP1
A2:
CMPS,0
JZXS0
DECBX
MOVCOUNTB,BX;取第二个输入的数B
CALLASC_BIN;将A,B转换成二进制后进行四则运算
CMPS,'+'
JZP1
CMPS,'-'
JZP2
CMPS,'*'
JZP3
CMPS,'/'
JZP4
A3:
MOVDL,'='
MOVAH,2
INT21H
JMPA2
P1:
CALLP01
JMPSL
P2:
CALLP02
JMPSL
P3:
CALLP03
JMPSL
P4:
CALLP04
JMPSL
XS0:
LEASI,AB
ADDSI,BX
MOVAL,'$'
MOV[SI],AL
LEASI,AB
movdx,si
MOVAH,9
INT21H
JMPSL
P01PROC;加法,A+B高位存入H,低位存入L
MOVDX,0
MOVAX,A
ADDAX,B
ADCDX,0
MOVL,AX
MOVH,DX
CALLXS;用来将二进制转换成十进制输出,并返回重新输入运算式
RET
P01ENDP
P02PROC;减法,若A
MOVAX,A
CMPAX,B
JACNT
CMPAX,B
JZCNT
MOVBX,B
MOVA,BX
MOVB,AX
MOVDL,'-'
MOVAH,2
INT21H
CNT:
MOVAX,A
SUBAX,B
MOVDX,0
MOVL,AX
MOVH,0
CALLXS
RET
P02ENDP
P03PROC;乘法,A*B,结果高位存入H,低位存入L
MOVDX,0
MOVAX,A
MULB
MOVL,AX
MOVH,DX
CALLXS
RET
P03ENDP
P04PROC;除法,A/B,并显示余数,高位0存入H,低位存入L
MOVDX,0
MOVAX,A
DIVB
PUSHDX
MOVH,0
MOVL,AX;显示商
CALLXS
LEADX,STR3
MOVAH,9
INT21H
movc1,0
POPDX
MOVH,0
MOVL,DX;显示余数
CALLXS
RET
P04ENDP
ASC_BINPROC;将十进制转换成二进制
INCCOUNTA
MOVCX,COUNTA
MOVAX,0
MOVBX,10
LEASI,AB
LOOP01:
MOVDL,[SI]
ANDDL,0FH
MOV[SI],DL
MULBX
MOVDL,[SI]
MOVDH,0
ADDAX,DX
INCSI
LOOPLOOP01
MOVDX,SI
LEASI,AB
SUBDX,SI
MOVSI,DX
CMPSI,COUNTA
JNZLOOP02
MOVA,AX
MOVAX,COUNTB
DECCOUNTA
SUBAX,COUNTA
MOVCX,AX
LEASI,AB
INCCOUNTA
ADDSI,COUNTA
MOVAX,0
JMPLOOP01
LOOP02:
MOVB,AX
RET
ASC_BINENDP
BIN_ASCPROC
MOVBX,10
LEADI,C0
LP1:
MOVDX,0
MOVAX,H
CMPAX,0
JZLP2
DIVBX
MOVH,AX
MOVAX,L
DIVBX
MOVL,AX
ORDL,30H
MOV[DI],DL
INCDI
INCC1
JMPLP1
LP2:
MOVAX,L
LP3:
CMPAX,0
JZLP4
MOVDX,0
DIVBX
ORDL,30H
MOV[DI],DL
INCDI
INCC1
JMPLP3
LP4:
CMPC1,0
JNZLP5
MOVAL,30H
MOV[DI],AL
INCC1
LP5:
RET
BIN_ASCENDP
XSPROC
CALLBIN_ASC
CALLSC
RET
XSENDP
SCPROC ;结果输出
MOVCX,C1
DECC1
LEASI,C0
ADDSI,C1
LEADI,C
LP:
MOVAL,[SI]
MOV[DI],AL
DECSI
INCDI
LOOPLP
MOVAL,'$'
MOV[DI],AL
LEADX,C
MOVAH,9
INT21H
RET
SCENDP
QUIT:
MOVAH,4CH
INT21H;退出程序
CODEENDS
ENDSTART
2.
代码说明:
1、查询模块
(1)、mycmps
功能:
字符串比较
参数:
mycmpstab[0]字符串1偏移地址;mycmpstab[2]字符串2偏移地址。
返回:
str1
(2)、halfsearch
功能:
字符串查找(折半)
参数:
halfsearchtab[0]字符串缓冲区偏移地址;halfsearchtab[2]字符串个数;
halfsearchtab[4]查询字符串偏移地址;halfsearchtab[6]字符串长度。
返回:
查找成功,CF=0,ax返回匹配串的偏移地址。
查找不成功,CF=1,ax返回查询串插入时偏移地址。
2、显示模块
(1)、displayword
功能:
显示单词前缀和字符串相匹配的单词
参数:
displaywordtab[0]字符串缓冲区偏移地址;displaywordtab[2]显示字符串个数;
displaywordtab[4]字符串长度;displaywordtab[6]亮行位置;
displaywordtab[8]返回光标位置;displaywordtab[10]实际显示字符串个数。
返回:
操作成功,displaywordtab[10]返回实际显示字符串个数,光标位于
displaywordtab[8]设置位置。
(2)、readwordinfo
功能:
读取单词解释、近义词、反义词信息
参数:
readwordinfotab[0]单词信息块位置;readwordinfotab[2]存放信息块缓冲区偏移地址;readwordinfotab[4]单词信息块大小。
返回:
操作成功,从文件中读取信息块于主存偏移地址为readwordinfotab[2]缓冲区中。
(3)、showasentence
功能:
显示一条单词信息
(4)、showwordinfo
功能:
显示单词信息
参数:
showwordinfotab[0]单词索引表中该单词的偏移地址;
showwordinfotab[2]单词信息缓冲区偏移地址;
showwordinfotab[4]单词信息块大小;
showwordinfotab[6]返回光标位置;
showwordinfotab[8]实际显示单词信息条数。
返回:
操作成功,显示单词信息,showwordinfotab[8]返回实际显示单词信息条数,光标位于showwordinfotab[6]设置位置。
3、编辑模块
(1)、indexinsert
功能:
在单词索引表中插入一个单词
参数:
indexinserttab[0]单词索引表偏移地址;indexinserttab[2]单词索引表单词个数;
indexinserttab[4]单词大小;indexinserttab[6]插入单词的偏移地址;
indexinserttab[8]插入位置偏移地址。
返回:
单词索引表中插入一个单词,完成索引表信息的维护。
(2)、indexdelete
功能:
在单词索引表中删除一个单词
参数:
indexdeletetab[0]单词索引表偏移地址;indexdeletetab[2]单词索引表单词个数;
indexdeletetab[4]删除位置偏移地址。
返回:
单词索引表中删除一个单词,完成索引表信息的维护。
(3)、inputnewinfo
功能:
接受新的单词信息
哑元:
bufad存放新的单词信息的缓冲区偏移地址;
maxindex最大下标值,信息中字符个数减结束符减1;
charperline输入时每行字符数;
specialpoint键入BackSpace需特殊处理的点;
wndb窗口属性;begincursor接受字符起始光标位置。
(4)、appdnewword
功能:
添加新的单词
(5)、editnotfind
功能:
完成未找到匹配单词时的编辑(添加操作)
参数:
editnotfindtab单词插入索引表位置偏移地址。
(6)、delallwordinfo
功能:
删除一个单词。
(7)、editfind
功能:
完成找到匹配单词时的编辑(修改、删除操作)
参数:
editfindtab单词插入索引表位置偏移地址。
4、文件处理模块
(1)、createfile
功能:
创建文件
参数:
createfiletab[0]ASCIZ串偏移地址;createfiletab[2]文件属性;
createfiletab[4]出错信息偏移地址;createfiletab[6]返回文件代号。
返回:
操作成功,createfiletab[6]返回文件代号,CF=0。
操作不成功,输出提示信息,CF=1。
(2)、openfile
功能:
打开文件
参数:
openfiletab[0]ASCIZ串偏移地址;openfiletab[2]出错信息偏移地址。
返回:
操作成功,handle返回文件代号,CF=0。
操作不成功,输出提示信息,CF=1。
(3)、movfp
功能:
移动文件指针
参数:
handle文件代号;movfptab[0]移动方式码;
movfptab[2]偏移字节数(高位);movfptab[4]偏移字节数(低位);
movfptab[6]出错信息偏移地址。
返回:
操作成功,CF=0。
操作不成功,输出提示信息,CF=1。
(4)、wrfile
功能:
读/写文件
参数:
handle文件代号;wrfiletab[0]读/写;
wrfiletab[2]数据缓冲区偏移地址;wrfiletab[4]读/写字节数;
wrfiletab[6]出错信息偏移地址。
返回:
操作成功,CF=0。
操作不成功,输出提示信息,CF=1。
5、绘制界面模块
(1)、drawwnd
功能:
绘制窗口
哑元:
attribute窗口属性;wndleftr左上角行号;wndleftc左上角列号;
wndrightr右上角行号;wndrihgtc右上角行号。
(2)、setcursor
功能:
设置光标位置
哑元:
page页号;row行号;column列号;
addp页号增量;addr行号增量;addc列号增量。
(3)、interface
功能:
绘制界面
(4)、operdeclare
功能:
显示操作说明
dsegsegment'data'
indexelemsizeequ24
wordmaxsizeequ23
wordinfosizeequ64
wordmeaningsizeequ384
Upequ48h
Downequ50h
Leftequ4Bh
BackSpaceequ08h
KeyEscequ1bh
Dollarequ24h
Enterequ0dh
dictionarydb"Weed'sDictionary1.0$"
inpmsgdb'Inputtheword:
$'
indexmsgdb'Index:
$'
welcomemsgdb"WelcometouseWeed'sDictionary1.0$"
pathmsgdb'Pleaseinputthepathofwords.dat$'
escmsgdb'Esc:
exit$'
entermsgdb'Enter:
edit$'
bslmsgdb'BackSpaceandLeft:
stepback$'
upmsgdb'Up:
lineup$'
downmsgdb'Down:
linedown$'
meaningmsgdb'Meaning:
$'
synonymsmsgdb'Synonyms:
$'
antonymmsgdb'Antonym:
$'
nofindmsg0db'NOFIND!
@_@$'
nofindmsg1db'PRESSENTERTOEDITTHEWORD!
~_~$'
editnotfindmsgdb'Append(A)$'
appendmsgdb'Append:
$'
editfindmsgdb'Modify(M)Delete(D)$'
modifymsgdb'Modify:
$'
deletemsgdb'Delete:
$'
optionmsg0db'Word(W)$'
optionmsg1db'Meaning(M)Synonyms(S)$'
optionmsg2db'Antonym(A)$'
optretmsgdb'Return(R):
$'
operfinmsgdb'Operationhasfinished!
*_*$'
retmsgdb"Enter'R'or'r'toreturn:
$"
nosynonymsmsgdb'nosynonyms$'
noantonymmsgdb'noantonym$'
meaningnomsgdb'MeaningNO.(1~4):
$'
savechgmsgdb'Savetheinformation?
Y/N$'
delmsmsgdb'Deletetheinformation?
Y/N$'
delnotemsgdb"LOSEALLWORD'SINFORMATION:
Y/N$"
mdfywdmsgdb"!
_!
REALLYTODOTHAT:
Y/N$"
crefilmsgdb'ERROR:
createfile()$'
opefilmsgdb'ERROR:
openfile()$'
movfpmsgdb'ERROR:
movfp()$'
wrfilemsgdb'ERROR:
wrfile()$'
clsfilmsgdb'ERROR:
closefile()$'
defaultpathdb'c:
\weeddic',0
wndone1rdb0
wndone1cdb0
wndone2rdb24
wndone2cdb79
wndonebdb96h
barone1rdb1
barone1cdb0
barone2rdb1
barone2cdb79
baronebdb70h
bartwo1rdb2
bartwo1cdb31
bartwo2rdb24
bartwo2cdb31
bartwobdb70h
wndtwo1rdb4
wndtwo1cdb3
wndtwo2rdb5
wndtwo2cdb26
wndtwobdb0fch
wndthree1rdb9
wndthree1cdb3
wndthree2rdb22
wndthree2cdb26
wndthreebdb0f2h
wndfour1rdb4
wndfour1cdb36
wndfour2rdb22
wndfour2cdb75
wndfourbdb0fdh
wndwel1rdb10
wndwel1cdb20
wndwel2rdb14
wndwel2cdb57
wndwelbdb0e0h
wndeditbdb0f5h
wndsavebdb0edh
wndeditnbdb0f6h
mycmpstabdw2dup(?
)
;str1adstr2ad
halfsearchtabdw4dup(?
)
;wordsadtablensearchwordadwordsize
indexinserttabdw5dup(?
)
;indexadi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 课程设计 PC 钢琴