《汇编语言设计》课程设计指导书.docx
- 文档编号:3961938
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:61
- 大小:24.77KB
《汇编语言设计》课程设计指导书.docx
《《汇编语言设计》课程设计指导书.docx》由会员分享,可在线阅读,更多相关《《汇编语言设计》课程设计指导书.docx(61页珍藏版)》请在冰点文库上搜索。
《汇编语言设计》课程设计指导书
《汇编语言程序设计》
课程设计指导书
一、课程设计的目的
本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。
二、课程设计内容
(1)课题①:
磁盘文件管理系统
要求:
功能菜单的编制;向磁盘文件中写入信息;从磁盘文件中读出信息并显示。
参考程序:
datasegment
menudb0dh,0ah,'********************************************',0dh,0ah
db'*menu*',0dh,0ah
db'*------------------------------------------*',0dh,0ah
db'*1.Createfile*',0dh,0ah
db'*2.Writetofile*',0dh,0ah
db'*3.Readfile*',0dh,0ah
db'*4.Quit*',0dh,0ah
db'*------------------------------------------*',0dh,0ah
db'*Choice(1--4)*',0dh,0ah
db'********************************************',0dh,0ah,'$'
pathnamedb'D:
\IBMPC.TXT',00
handledw?
buffer1db60,0,60dup(?
)
buffer2db60,0,60dup(?
)
huanhangdb'',0dh,0ah,'$'
chosedb0dh,0ah,'Pleaseenterthedigitalfrom1-4!
',0dh,0ah,'$'
enterydb0dh,0ah,'Enterwhatyouwanttowritetothefile!
(Thelengthofthestringsisunder60)',0dh,0ah,'$'
str_ok1db0dh,0ah,'Createfilesuccessfully!
',0dh,0ah,'$'
str_ok2db0dh,0ah,'Wtitetofilesuccessfully!
',0dh,0ah,'$'
str_ok3db0dh,0ah,'Readfromfilesuccessfully!
',0dh,0ah,'$'
str_error1db'Createfileerror!
$'
str_error2db'Openfileerror!
$'
str_error3db'Writetofileerror!
$'
str_error4db'Readfileerror!
$'
str_error5db'Exitfromfileerror!
$'
dataends
codesegment
assumecs:
code,ds:
data
mainprocfar
start:
movax,data
movds,ax
movax,0600h
callme
callchoice
ret
mainendp
meprocnear
movah,9
leadx,menu
int21h
meendp
choiceprocnear
movah,1
int21h
cmpal,31h
jenext1
cmpal,32h
jenext2
cmpal,33h
jenext3
cmpal,34h
jenext4
jmpback
next1:
callcreath
next2:
callentry
next3:
movah,9
leadx,huanhang
int21h
callread
next4:
movax,4c00h
int21h
back:
movah,9
leadx,chose
int21h
callme
ret
choiceendp
creathprocnear
movah,3ch
leadx,pathname
movcx,0
int21h
jcerror1
movhandle,ax
jmpexit
error1:
movah,9
leadx,str_error1
int21h
jmpexit1
exit:
movah,9
leadx,str_ok1
int21h
exit1:
callchoice
creathendp
entryprocnear
movah,9
leadx,entery
int21h
leadx,buffer1
movah,0ah
int21h
subch,ch
movcl,buffer1+1
adddx,2
callwrith
ret
entryendp
writhprocnear
movah,3dh
leadx,pathname
moval,1
int21h
jcerror2
movhandle,ax
movah,40h
leadx,buffer1+2
movbx,handle
movcx,60
int21h
jcerror3
movah,3eh
movbx,handle
int21h
jcerror4
jmpback1
error2:
movah,9
leadx,str_error2
int21h
jmpexit2
error3:
movah,9
leadx,str_error4
int21h
jmpexit2
error4:
movah,9
leadx,str_error5
int21h
jmpexit2
back1:
movah,9
leadx,str_ok2
int21h
exit2:
callchoice
writhendp
readprocnear
movah,3dh
leadx,pathname
moval,0
int21h
jcerror5
movhandle,ax
movah,3fh
leadx,buffer2
movbx,handle
movcx,60
int21h
jcerror6
movah,9
leadx,buffer2
int21h
jcerror6
movah,3eh
movbx,handle
int21h
jcerror7
jmpback2
error5:
movah,9
leadx,str_error2
int21h
jmpexit3
error6:
movah,9
leadx,str_error4
int21h
jmpexit3
error7:
movah,9
leadx,str_error5
int21h
jmpexit3
back2:
movah,9
leadx,str_ok3
int21h
exit3:
callchoice
readendp
codeends
endstart
endmain
(2)课题②:
实现加减乘除四则运算的计算器
要求:
能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:
c:
\tasm>js3+2
5
参考程序:
B_PEQUBYTEPTR
W_PEQUWORDPTR
D_PEQUDWORDPTR
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
ORG100H
;主程序开始
NEWSTAR:
JMPSTAR
EVEN
NUM1DW0,0
NUM2DW0,0
NUM3DW0,0
JGV4DW0,0
YSFLABELWORD
YSF1DB0
YSF2DB0
JUVDB0
UVDB0
;使DS:
SI指向第一有效字符
OVERSLABELNEAR
CLD
PUSHAX
OVERS1:
LODSB
CMPAL,''
JZOVERS1
CMPAL,9
JZOVERS1
DECSI
CMPAL,13
POPAX
RET
;输出一个制表符
TABLABELNEAR
MOVAL,9
JMPSHORTDISP
;输出一个回车换行符
CRLFLABELNEAR
MOVAL,13
CALLDISP
MOVAL,10
;显示一个字符
DISPLABELNEAR
PUSHAX
PUSHDX
MOVAH,2
MOVDL,AL
INT21H
POPDX
POPAX
RET
;检查是否为运算符
ISYSFLABELNEAR
CLD
LODSB
CALLISJJ
JZISYSF1
CALLISII
JZISYSF1
DECSI
ISYSF1:
RET
;检查是否是加减运算
ISJJLABELNEAR
CMPAL,'+'
JZISYSF1
CMPAL,'-'
RET
;检查是否为乘除运算
ISIILABELNEAR
CMPAL,'*'
JZISYSF1
CMPAL,'/'
JZISYSF1
CMPAL,'\'
RET
;数据输出
;CX=10十进制
;CX=16十六进制
DOUTLABELNEAR
PUSHAX
PUSHBX
PUSHDX
PUSHBP
XORBP,BP
DOUT1:
INCBP
PUSHAX
MOVAX,DX
XORDX,DX
DIVCX
MOVBX,AX
POPAX
DIVCX
PUSHDX
MOVDX,BX
ORBX,AX
JNZDOUT1
DOUT2:
POPAX
ADDAL,'0'
CMPAL,'9'
JBEDOUT3
ADDAL,'A'-'9'-1
DOUT3:
CALLDISP
DECBP
JNZDOUT2
POPBP
POPDX
POPBX
POPAX
RET
;输入数据在DX:
AX中返回
;CX=0数据为10进制
;CX#0数据为16进制
DATELABELNEAR
PUSHBX
PUSHBP
PUSHDI
XORAX,AX
XORDX,DX
DATE1:
MOVDI,AX
LODSB
CMPAL,'0'
JBDATE7
CMPAL,'9'
JADATE6
DATE2:
ANDAX,0FH
SHLDI,1
RCLDX,1
MOVBX,DI
MOVBP,DX
SHLDI,1
RCLDX,1
SHLDI,1
RCLDX,1
JCXZDATE3
SHLDI,1
RCLDX,1
JmpshortDATE4
DATE3:
ADDDI,BX
ADCDX,BP
DATE4:
ADDAX,DI
ADCDX,0
JMPDATE1
DATE5:
ADDAL,9
JMPDATE2
DATE6:
JCXZDATE7
CMPAL,'A'
JBDATE7
CMPAL,'F'
JBEDATE5
CMPAL,'a'
JBDATE7
CMPAL,'f'
JBEDATE5
DATE7:
MOVAX,DI
DECSI
ORDI,DX
POPDI
POPBP
POPBX
RET
;数据1与数据2根据YSF1进行加减运算
JSJJLABELNEAR
MOVAX,NUM2
MOVDX,NUM2+2
CMPYSF1,'+'
JZJSJJ1
SUBNUM1,AX
SBBNUM1+2,DX
JMPSHORTJSJJ2
JSJJ1:
ADDNUM1,AX
ADCNUM1+2,DX
JSJJ2:
RET
;数据1与数据2根据YSF1进行乘除运算
JSII1LABELNEAR
MOVBX,OFFSETNUM1
JMPSHORTJSII2_1
;数据2与数据3根据YSF2进行乘除运算
JSII2LABELNEAR
MOVBX,OFFSETNUM2
JSII2_1:
DB66H
MOVAX,[BX]
DB66H
MOVCX,[BX+4]
CMPYSF2,'*'
JNZJSII2_2
DB66H
IMULCX
JMPSHORTJSII2_3
JSII2_2:
DB66H
CWD
DB66H
IDIVCX
CMPYSF2,'/'
JZJSII2_3
DB66H
XCHGDX,AX
JSII2_3:
DB66H
MOV[BX],AX
RET
;显示结果
XUJGLABELNEAR
MOVAX,JGV4
MOVDX,JGV4+2
MOVCX,10
CMPUV,10
JZXUJG0
MOVCX,16
XUJG0:
TESTDX,8000H
JZXUJG1
CMPUV,10
JZXUJG2
CALLDOUT
XUJG2:
NOTAX
NOTDX
ADDAX,1
ADCDX,0
PUSHAX
CMPUV,10
JZXUJG3
MOVAL,''
CALLDISP
MOVAL,'('
CALLDISP
XUJG3:
MOVAL,'-'
CALLDISP
POPAX
CMPUV,10
JZXUJG1
CALLDOUT
MOVAL,')'
CALLDISP
RET
XUJG1:
CALLDOUT
RET
;计算结果放入DX:
AX中
JSJGLABELNEAR
CALLJSJJ
MOVAX,NUM1
MOVDX,NUM1+2
RET
;从DS:
SI处取一个数据
LOADATELABELNEAR
LODSB
CMPAL,'('
JZLOADATE1
DECSI
PUSHCX
XORCX,CX
CMPUV,10
JZLOADATE0
INCCX;取16进制数
LOADATE0:
CALLDATE;取数据放入DX:
AX中
POPCX
RET
LOADATE1:
PUSHNUM1;保存数据1数据2及运算符
PUSHNUM1+2
PUSHNUM2
PUSHNUM2+2
PUSHYSF
INCJUV
MOVJGV4,0;结果值清零
MOVJGV4+2,0
;进行四则运算
SZYSLABELNEAR
CALLISYSF;首字符是运算符?
JZSZYS2
CALLLOADATE;不是,取数并保存
MOVNUM1,AX
MOVNUM1+2,DX
SZYS1:
XORAX,AX;数据2清零
MOVNUM2,AX
MOVNUM2+2,AX
CALLISYSF;下个是运算符?
JZSZYS3
JNZSZYS6
SZYS2:
PUSHAX
MOVAX,JGV4;将结果作为数据1
MOVNUM1,AX
MOVAX,JGV4+2
MOVNUM1+2,AX
POPAX
SZYS3:
MOVYSF1,AL
MOVYSF2,AL
CALLISJJ;是加减运算转
JZSZYS4
CALLLOADATE;取数据2
MOVNUM2,AX
MOVNUM2+2,DX
CALLJSII1;数据1与数据2根据YSF1进行乘除运算
JMPSZYS1;结果保存在数据1中
SZYS4:
CALLLOADATE;取数据2并保存
MOVNUM2,AX
MOVNUM2+2,DX
SZYS4_1:
CALLISYSF
JNZSZYS6
CALLISJJ;运算符2是加减运算?
JNZSZYS5;不是转
PUSHAX
CALLJSJJ;数据1与数据2根据YSF1进行加减运算
POPAX;结果保存在数据1中
MOVYSF1,AL;保存新的运算符
JMPSZYS4
SZYS5:
MOVYSF2,AL;保存运算符2
CALLLOADATE;取数据3
MOVNUM3,AX
MOVNUM3+2,DX
CALLJSII2;数据2与数据3根据YSF2进行乘除运算
JMPSZYS4_1;结果保存在数据2中
SZYS6:
MOVCL,AL
CMPAL,13
JNZSZYS9
SZYS7:
CALLJSJG
CMPJUV,0
JZSZYS8
DECJUV
POPYSF
POPNUM2+2
POPNUM2
POPNUM1+2
POPNUM1
RET
SZYS8:
CMPCL,')'
JZSZYS10
MOVJGV4,AX
MOVJGV4+2,DX
JNZSZYS12
SZYS9:
CMPAL,')'
JNZSZYS11
INCSI
JMPSZYS7
SZYS10:
MOVNUM1,AX
MOVNUM1+2,DX
JMPSZYS1
SZYS11:
STC
RET
SZYS12:
CLC
RET
;数制处理
UVILLABELNEAR
PUSHSI
UVIL1:
LODSB
CMPAL,''
JZUVIL2
CMPAL,9
JZUVIL2
CMPAL,13
JZUVIL4
JNZUVIL1
UVIL2:
MOVBX,SI
CALLOVERS
JZUVIL3
LODSW
CALLOVERS
POPSI
JNZSZYS11
CMPAX,'01'
JNZSZYS11
PUSHSI
MOVUV,10
UVIL3:
MOVAL,13
MOV[BX-1],AL
UVIL4:
POPSI
CLC
RET
;预置结果
YVJGLABELNEAR
MOVAH,52H
INT21H
MOVAX,ES:
[BX-2]
MOVDS,AX
MOVAX,DS:
[0CH]
MOVCS:
JGV4,AX
MOVAX,DS:
[0EH]
MOVCS:
JGV4+2,AX
PUSHCS
POPDS
PUSHCS
POPES
RET
;保存结果
BCJGLABELNEAR
MOVAH,52H
INT21H
MOVAX,ES:
[BX-2]
MOVDS,AX
MOVAX,CS:
JGV4
MOVDS:
[0CH],AX
MOVAX,CS:
JGV4+2
MOVDS:
[0EH],AX
PUSHCS
POPDS
PUSHCS
POPES
RET
STAR:
MOVSI,81H
CLD
CALLOVERS
JNZSTAR1
STAR0:
MOVDX,OFFSETMESS1
JMPSTAR4
STAR1:
CALLYVJG
CALLUVIL
JBSTAR0
MOVSAVESP,SP
CALLSZYS
MOVSP,SAVESP
MOVDX,OFFSETMESS2
JBSTAR4
CALLCRLF
CALLXUJG
CALLBCJG
MOVDX,OFFSETMESS3
STAR4:
MOVAH,9
INT21H
INT20H
SAVESPDW0
MESS1DB13,10,'Syntax:
',13,10
DB'JS
MESS2DB'Errorinexpression!
$'
MESS3DB13,10,'$'
CODEENDS
ENDNEWSTAR
(3)课题③:
代码转换程序
要求:
功能菜单的编制;小写字母向大写字母的转换;大写字母向小写字母的转换;二进制数向十六进制数的转换;十六进制数向二进制数的转换;十六进制数向十进制数的转换。
参考程序:
publicinfo1,info2,bufa,bufb,buf,main,info0,info3
extrnchange1:
far,change2:
far,change3:
far,change4:
far
datasegment
info0db0ah,0dh,'thisisthechangeoflettertoleter:
$'
info1db0ah,0dh,'pleaseinputstring:
$'
info2db0ah,0dh,'outputstring:
$'
bufadb81
db?
db80dup(?
)
bufbdb80dup(?
)
info3db0ah,0dh,'thisisthechangeofdigitaltodigital:
',0ah,0dh,'$'
bufdb0dh,0ah,'thenumberis:
0100101010001111b',0ah,0dh,'theresultis:
$'
dataends
stac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言设计 汇编语言 设计 课程设计 指导书