江苏大学微机原理课程设计.docx
《江苏大学微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《江苏大学微机原理课程设计.docx(39页珍藏版)》请在冰豆网上搜索。
![江苏大学微机原理课程设计.docx](https://file1.bdocx.com/fileroot1/2023-4/16/9a9f5283-6904-4ec9-86d9-58b76ac9da89/9a9f5283-6904-4ec9-86d9-58b76ac9da891.gif)
江苏大学微机原理课程设计
江苏大学
电气信息工程学院
微机原理课程设计
附件下载地址:
各个列程:
各题间的顺序我忘记了!
!
1、有条关于输入年、月、日的,程序如下:
DATASEGMENT
THEME1DB0DH,0AH,0DH,0AH,'=========WHATISTHEDATA(MM/DD/YY)?
========',0DH,0AH,'$'
THEME2DB'===PLEASEINPUTMONTH,DAY,YEAR(MM/DD/YY),ENDWITHEsc!
===',0DH,0AH,'$'
M_ERRORDB0DH,0AH,'!
!
MONTHERROR!
PLEASEINPUTAGAIN',0DH,0AH,'$'
D_ERRORDB0DH,0AH,'!
!
DAYERROR!
PLEASEINPUTAGAIN',0DH,0AH,'$'
ERRORDB0DH,0AH,'!
!
ERROR!
PLEASEINPUTAGAIN',0DH,0AH,'$'
POINTDB0DH,0AH,'THEDATAIS:
','$'
POINT_MDB0DH,0AH,'PLEASEINPUTTHENUMBEROFMONTH:
','$'
POINT_DDB0DH,0AH,'PLEASEINPUTTHENUMBEROFDAY:
','$'
POINT_YDB0DH,0AH,'PLEASEINPUTTHENUMBEROFYEAR:
','$'
BUFFDW4DUP(?
)
MARKDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
LEADX,THEME1
MOVAH,9
INT21H
MOVAH,02H
MOVDL,07H
INT21H
LEADX,THEME2
MOVAH,9
INT21H
JMPINPUT_M
NEW_M:
MOVAH,02H
MOVDL,07H
INT21H
MOVAH,9
LEADX,M_ERROR
INT21H
INPUT_M:
LEADX,POINT_M
MOVAH,9
INT21H
MOVMARK,0
CALLGETNUM
CMPMARK,1
JZNEW_M
MOVAX,BUFF[SI-1]
ANDAX,00FFH
CMPAX,0012H
JBEL1
DECSI
JMPNEW_M
L1:
CALLHuanHang
JMPINPUT_D
NEW_D:
MOVAH,02H
MOVDL,07H
INT21H
MOVAH,9
LEADX,D_ERROR
INT21H
INPUT_D:
LEADX,POINT_D
MOVAH,9
INT21H
MOVMARK,0
CALLGETNUM
CMPMARK,1
JZNEW_D
MOVAX,BUFF[SI-1]
ANDAX,00FFH
CMPAX,0031H
JBEL2
DECSI
JMPNEW_D
L2:
CALLHuanHang
INPUT_Y:
MOVAH,9
LEADX,POINT_Y
INT21H
MOVMARK,0
CALLGETNUM
CMPMARK,1
JZINPUT_Y
CALLHuanHang
LEADX,POINT
MOVAH,9
INT21H
MOVAX,BUFF[2]
CALLDISP4
MOVAH,02H
MOVDL,'-'
INT21H
MOVAX,BUFF[0]
CALLDISP2
MOVAH,02H
MOVDL,'-'
INT21H
MOVAX,BUFF[1]
CALLDISP2
CALLHuanHang
JMPSTART
DISP4PROCNEAR
PUSHAX
MOVAL,AH
CALLDISP2
POPAX
CALLDISP2
RET
DISP4ENDP
DISP2PROCNEAR
MOVBL,AL
MOVDL,BL
MOVCL,04
ROLDL,CL
ANDDL,0FH
CALLDISP1
MOVDL,BL
ANDDL,0FH
CALLDISP1
RET
DISP2ENDP
DISP1PROCNEAR
ADDDL,30H
CMPDL,3AH
JBDDD
ADDDL,27H
DDD:
MOVAH,02H
INT21H
RET
DISP1ENDP
GETNUMPROCNEAR
MOVDX,0
AGAIN:
MOVAH,01H
INT21H
CMPAL,1BH
JZEXIT
CMPAL,0DH
JZLP1
SUBAL,30H
CMPAL,0
JBLP2
CMPAL,9
JALP2
MOVCL,4
SHLDX,CL
XORAH,AH
ADDDX,AX
JMPAGAIN
LP1:
MOVAX,DX
MOVBUFF[SI],AX
INCSI
LP3:
RET
LP2:
LEADX,ERROR
MOVAH,9
INT21H
MOVMARK,1
CALLHuanHang
JMPLP3
RET
GETNUMENDP
HuanHangPROCNEAR
MOVAH,2
MOVDL,0DH
INT21
MOVAH,02H
MOVDL,0AH
INT21H
RET
HuanHangENDP
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、输入字符并显示的那题:
DATASEGMENT
TITTLEDB0DH,0AH,0DH,0AH,'<<======16--2CONVENTOR======>>',0DH,0AH,'!
PLEASEINPUT1<-->F!
',0DH,0AH,'QUITWITHEsc'0DH,0AH,'$'
MSG1DB0DH,0AH,'Hex:
','$'
MSG2DB0DH,0AH,'Binary:
','$'
BUFDB4DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,TITTLE
MOVAH,9
INT21H
LEADX,MSG1
;MOVAH,9
;INT21H
MOVCX,4
MOVSI,0
INPUT:
MOVAH,1;通过四次循环从键盘读入四位十六进制数
INT21H
CMPAL,1BH;Esc键的ASCII码
JZEXIT
MOVBUF[SI],AL
INCSI
LOOPINPUT
LEADX,MSG2
MOVAH,9
INT21H
MOVCX,4
MOVSI,0
NEXT:
MOVBL,BUF[SI]
CMPBL,39H
JBELP2;读入的字符<=9转向OK
SUBBL,7;读入字符>=9减7
LP2:
ANDBL,0FH
PUSHCX
MOVCL,4
SHLBL,CL;逻辑左移4位,低4位à高4位
MOVCX,4
LP1:
SHLBL,1;逻辑左移1位,最高位进入CF
MOVDL,30H
ADCDL,0;用到CF,转换为ASCII码
MOVAH,2
INT21H
LOOPLP1
POPCX
INCSI
LOOPNEXT
MOVAH,2
MOVDL,'B';显示二进制表示符'B'
INT21H
JMPSTART
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3、小写字符转换为大写字符:
DATASEGMENT
DISPP1DB0AH,'__WrongWord!
PleaseInputAgain!
'0DH,0AH,'$'
DISPP2DB0DH,0AH,'$'
DISPP3DB'PleaseInputACharacter,EndWithEsc',0DH,0AH,'$'
BUFF1DB50DUP(?
);!
!
!
!
BUFF2DB50DUP(?
);!
!
!
!
DATAENDS
;代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,BUFF1
LEADI,BUFF2
L2:
LEADX,DISPP3
MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
AGAIN:
MOVAH,1;1号功能,单个字符从键盘输入到AL寄存器,并在屏幕上显示出来
INT21H
;MOVBL,AL;暂存
;MOVDL,'_'
;MOVAH,02H
;INT21H
;MOVDL,'_';写与不写区别不大
;MOVAH,02H;2号功能调用,单个字符显示,把要显示的字符的ASCII码送DL寄存器
;INT21H
;MOVAL,BL;取出
MOV[SI],AL
INCSI
CMPAL,0DH
JZDISPLAY
CMPAL,1BH;Esc键的ASCII码
JZOVER
CMPAL,'a';CMP是比较指令,功能是目的操作数减去源操作数,但不送回相减的结果,只是使结果影响标志位
JBL1
CMPAL,'z'
JAL1
SUBAL,20H;小写字母向大写字母转换
MOV[DI],AL
INCDI
JMPAGAIN
;MOVAH,2;2号功能调用,单个字符显示,把要显示的字符的ASCII码送DL寄存器
;INT21H
;LEADX,DISPP2;回车并换行
;MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
;INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
;LEADX,DISPP2
;MOVAH,9
;INT21H
;JMPSTART;循环
L1:
LEADX,DISPP1;报错
MOVAH,9
INT21H
LEADX,DISPP2;回车并换行
MOVAH,9
INT21H
JMPL2
DISPLAY:
MOVBYTEPTR[DI],'$'
MOVBYTEPTR[SI],'$'
;LEADX,DISPP2;回车并换行
;MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
;INT21H
;LEADX,BUFF1
;MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
;INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
LEADX,DISPP2;回车并换行
MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
;LEADX,DISPP2
MOVAH,9
INT21H
LEADX,BUFF2
MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
LEADX,DISPP2;回车并换行
MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
;LEADX,DISPP2
MOVAH,9
INT21H
JMPSTART;循环
OVER:
MOVAH,4CH;结束
INT21H
CODEENDS
ENDSTART
4、字符串匹配:
DATASEGMENT
STRING1DB250
DB?
DB250DUP(?
)
STRING2DB250
DB?
DB250DUP(?
)
YESDB0DH,0AH,'MATCH!
','$'
NODB0DH,0AH,'NOMATCH!
','$'
POINT1DB0DH,0AH,'PLEASEINPUTTHEFIRSTSTRING:
','$'
POINT2DB0DH,0AH,'PLEASEINPUTTHEFIRSTSTRING:
','$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEADX,POINT1
MOVAH,9
INT21H
LEADX,STRING1
MOVAH,0AH
INT21H
LEADX,POINT2
MOVAH,9
INT21H
LEADX,STRING2
MOVAH,0AH
INT21H
CLD
LEASI,STRING1
LEADI,STRING2
MOVCL,STRING1[1]
MOVCH,0
ADDSI,2
ADDDI,2
REPZCMPSB
JZYESS
LEADX,NO
MOVAH,9
INT21H
YESS:
LEADX,YES
MOVAH,9
INT21H
JMPSTART
CODEENDS
ENDSTART
5、好像有条关于字符、数据的题:
DATASEGMENT
DISP1DB0DH,0AH,'===INPUTSTRING,THEENDFLAGISCR(24H),QUITWITHCTRL-C===',0DH,0AH,0DH,0AH,'$'
DISP2DB0DH,0AH,'$';回车并换行
DISP3DB'PleaseInputTheNewString(TheNumberOfDatasInTheStringIs<10!
!
):
',0DH,0AH,'$'
DISP4DB'WhatTheStringIs:
','$'
DISP5DB'TheNumberOfDatasInTheStringIs:
','$'
BUFFDB200DUP(?
)
DATAENDS
;代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,0;清指针
MOVCL,0;清计数器
LEADX,DISP1
MOVAH,9;9号功能调用,注意DX的值以及$
INT21H
LEADX,DISP3
MOVAH,9
INT21H
AGAIN:
MOVAH,01H;1号功能调用,单个字符输入到AL中
INT21H
CMPAL,0DH;AL中是回车吗?
JZDISPLAY
CMPAL,03H;Ctrl-C退出
JZEXIT
MOVBUFF[DI],AL;存入缓冲区
CMPAL,39H
JANEXT
LP1:
CMPAL,30H
JAELP2
JMPNEXT
LP2:
INCCL;计数器加1
NEXT:
INCDI
JMPAGAIN
DISPLAY:
ADDCL,30H
;MOVAL,CL
;MOVBUFF[DI+1],AL
MOVAL,0AH
MOVBUFF[DI+2],AL
MOVAL,'$'
MOVBUFF[DI+3],AL
LEADX,DISP2
MOVAH,9
INT21H
LEADX,DISP4
MOVAH,9
INT21H
LEADX,BUFF;MOVDX,OFFSETBUFF
;MOVAH,9
INT21H
LEADX,DISP2
;MOVAH,9
INT21H
MOVDX,OFFSETDISP5;LEADX,DISP5
MOVAH,9
INT21H
MOVDL,CL
MOVAH,2;2号功能调用
INT21H
LEADX,DISP2
MOVAH,9
INT21H
JMPSTART
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6、读文件的那题(好像是倒数第二题,记不清楚了):
DATASEGMENT
FILENDB21;文件名允许长度为20
DB?
;实际文件名长度
DB20DUP(?
);存新文件名
ERROPDB'Openfileerror!
',0AH,0DH,'$'
ERRRDDB'Readfileerror!
',0AH,0DH,'$'
INMSG1DB'Pleaseinputfilename:
',0AH,0DH,'$'
BUFINDB0F000HDUP(?
);输入缓冲区
EOFEQU1AH;文件结束符CTRL+Z
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,INMSG1;显示要求输入打开的文件名信息
MOVAH,09H;9号功能调用
INT21H
LEADX,FILEN;输入文件名
MOVAH,0AH;0A号功能调用可实现从键盘接收字符串到输入缓冲区;缓冲区第一个字节指出能容纳字符的最大个数,由用户设置;
INT21H;第二个字节存放实际输入的字符个数,由系统最后自动填入;从第三个字节开始存放从键盘输入的字符,知道Enter键结束
MOVBL,FILEN+1;取文件名长度
MOVBH,0;BX中装入文件名长度
MOVFILEN[BX+2],BYTEPTR0;文件名末尾添加0
LEADX,FILEN+2;指向文件名
MOVAL,0;以只读方式打开
MOVAH,3DH;3DH功能调用,打开文件
INT21H
JCOPERR;打开出错,转OPERR,CF=1则跳转
MOVBX,AX;转存文件号
RDFILE:
LEADX,BUFIN;DX指向缓冲区
MOVCX,50H;每次读80个字节
MOVAH,3FH;3F功能调用,读文件
INT21H
JCRDERR;CF=1则跳转,读出错,转RDERR
ORAX,AX;读入的字节数是否为0
JZCLFILE;若为AX为0,转CLFILE
MOVDL,0DH;输出回车
MOVAH,2;2号功能调用
INT21H
MOVDL,0AH;输出换行,准备显示文件内容
MOVAH,2;2号功能调用
INT21H
MOVSI,0
DISP0:
MOVAL,BUFIN[SI];从缓冲区送一个字节到AL
CMPAL,EOF;是否为文件结束符
JZCLFILE;若是,转CLFILE
MOVDL,AL;显示一个字符
MOVAH,2
INT21H
INCSI;指向下一个字节
LOOPDISP0
JMPRDFILE;再去读50H个字节
RDERR:
LEADX,ERRRD;显示读文件出错的信息
JMPDISP1
OPERR:
LEADX,ERROP;显示打开文件出错的信息
DISP1:
MOVAH,09H
INT21H
JMPENDO
CLFILE:
MOVAH,3EH;3EH功能调用,关闭文件
INT21H
ENDO:
MOVAH,4CH;退出
INT21H
CODEENDS
ENDSTART
7、响铃设计:
DATASEGMENT
DATA1DB'Inputnumber1-9,quitwithZero(0)',0DH,0AH,'$'
DISPP1DB0DH,0AH,'$';回车与换行
DISPP2DB'_Wrongnumber,pleaseinputagainorquitwithZero(0)',0DH,0AH,'$'
DATAENDS
;代码段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
L2:
LEADX,DISPP1
MOVAH,9;9号功能调用可实现将字符串在屏幕上显示出来,
INT21H;要求:
DS:
DX指向字符串地址的首址,并且字符串必须以‘$’为结束符
LEADX,DATA1
MOVAH,9
INT21H
LEADX,DISPP1
MOVAH,9
INT21H
MOVAH,1;1号功能,单个字符从键盘输入到AL寄存器,并在屏幕上显示出来
INT21H
CMPAL,30H;CMP是比较指令,功能是目的操作数减去源操作数,但不送回相减的结果,只是使结果影响标志位
JBL1
CMPAL,39H
JAL1
ANDAL,0FH;取低四位
CMPAL,0
JEOVER
MOVCL,AL
L3:
MOVDL,07H;响