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