华工微机实验报告实验四子程序的调用文档格式.docx
- 文档编号:8358981
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:25
- 大小:300.46KB
华工微机实验报告实验四子程序的调用文档格式.docx
《华工微机实验报告实验四子程序的调用文档格式.docx》由会员分享,可在线阅读,更多相关《华工微机实验报告实验四子程序的调用文档格式.docx(25页珍藏版)》请在冰点文库上搜索。
流程图4—过程三流程图5—过程四
代码:
STACKSEGMENTSTACK'
STACK'
DW100DUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
ORG3500H
;
数据段主要保存一些字符串以及定义一些字符串变量
COPYRIGHTDB'
-------ALLPROGRAMEDBY@MRZHU--------'
0DH,0AH,'
$'
COMMONDB'
Pleaseinput1to5toselectafunction'
S1DB'
1.Inputastring,thenconvertthesmallletterstobigletters'
S2DB'
2.Findthebiggest-ASCII-codecharacter'
S3DB'
3.SortthecharacterbyASCIIcodebydecreasingorder'
S4DB'
4.displaythetickingtime'
S5DB'
5.Exittheprogram'
CR_LFDB0DH,0DH,'
IN_MAINDB'
Nowinputanumber(1-5):
'
'
MAIN_ERRORDB0DH,0AH,'
ERROR:
Pleaseinputacorrectnumber;
'
PRO_1_S1DB0DH,0AH,'
Nowinputastring(numberorletter):
PRO_1_S2DB0DH,0AH,'
Thestringhasbeenchangedto:
PRO_2_S1DB0DH,0AH,'
Nowinputastring(anysymbol):
PRO_2_S2DB0DH,0AH,'
Thebiggest-ASCII-codesymbolis:
PRO_3_S1DB0DH,0AH,'
PRO_3_S2DB0DH,0AH,'
Thestringhasbeensorted:
PRO_4_S1DB0DH,0AH,'
Settingtime(XX:
XX:
XX<
Hours:
Minutes:
Seconds>
):
PRO_4_S2DB0DH,0AH,'
SETTINGDONE!
PRO_4_S3DB0DH,0AH,'
TIME_NOW(Pressanykeytostop):
PRO_4_ERROR_LENDB0DH,0AH,'
!
ERROR(Lengthoverflow):
Pleaseinputinthecorrectformat!
PRO_4_ERROR_NOT_NUMDB0DH,0AH,'
ERROR(Notnumberornot"
:
"
PRO_4_ERROR_NUM_OVERDB0DH,0AH,'
ERROR(Numberoverflow):
Pleaseinputthecorrectnumber!
PRO_END_SDB0DH,0AH,'
PressanykeytocontinueexceptESC'
STRING1DB50
DB?
DB50DUP(?
STRING2DB50
DB?
DB50DUP(?
STRING3DB50
STRING4DB50
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
MOVSP,OFFSETTOP
PUSHDS
SUBAX,AX
PUSHAX;
初始化堆栈
MOVAX,DATA
MOVDS,AX
MENU:
MOVDX,OFFSETCOPYRIGHT
MOVAH,9
INT21H
MOVDX,OFFSETCOMMON
MOVDX,OFFSETS1
MOVDX,OFFSETS2
MOVDX,OFFSETS3
MOVDX,OFFSETS4
MOVDX,OFFSETS5
MOVDX,OFFSETCR_LF
IN_A_NUM:
MOVDX,OFFSETIN_MAIN
INT21H;
显示主菜单信息
MOVAH,01H
INT21H;
输入一个字符
CMPAL,'
1'
JEP1
2'
JEP2
3'
JEP3
4'
JEP4
5'
JEP5_EXIT;
判断输入的字符并跳转
MOVDX,OFFSETMAIN_ERROR
INT21H
JMPIN_A_NUM;
其他字符时输出提醒并跳转到重新输入
P1:
CALLPRO_1
换行
JMPMENU
P2:
CALLPRO_2
P3:
CALLPRO_3
P4:
CALLPRO_4
P5_EXIT:
RET;
返回DOS
MAINENDP;
MAIN段结束
PRO_1PROCNEAR;
过程一
PRO_1_START:
MOVDX,OFFSETPRO_1_S1
INT21H;
输出提示语
MOVDX,OFFSETSTRING1
MOVAH,0AH
把STRING1的字符串首地址给DX,输入一个字符串
MOVCX,0
MOVCL,STRING1[1]
MOVBX,1
LOOP1:
;
循环,将小写字母改为大写
INCBX
MOVAL,STRING1[BX]
CMPAL,61H
JBNEXT1
CMPAL,7AH
JANEXT1
SUBAL,20H
MOVSTRING1[BX],AL
NEXT1:
LOOPLOOP1
MOVSTRING1[BX],'
MOVDX,OFFSETPRO_1_S2
输出提示的句子
MOVDX,OFFSETSTRING1[2]
输出改变后的字符串
MOVDX,OFFSETPRO_END_S;
输出通用结束提示语
输入一个字符,实现跳转的判断
CMPAL,1BH
JENEXT1_2
JMPPRO_1_START;
如果是ESC则不跳转到子程序开头,是则跳转
NEXT1_2:
RET
PRO_1ENDP
PRO_2PROCNEAR;
过程二
PRO_2_START:
MOVDX,OFFSETPRO_2_S1;
MOVDX,OFFSETSTRING2;
把STRING2的字符串首地址给DX,接收一个字符串
MOVCL,STRING2[1]
MOVAL,0
LOOP2:
CMPAL,STRING2[BX]
JAENEXT2_1;
AL大于等于字符ASCII值时跳转
MOVAL,STRING2[BX]
NEXT2_1:
LOOPLOOP2
MOVSI,BX;
把BX的值放到SI,也就是指向回车的位置
MOVBL,AL;
把AL放到BL,防止中断指令时破坏AL
MOVDX,OFFSETPRO_2_S2
INT21H;
MOVDL,BL
MOVAH,2
显示最大ASCII的字符
JENEXT2_2
JMPPRO_2_START;
NEXT2_2:
PRO_2ENDP
PRO_3PROCNEAR;
过程三
PRO_3_START:
MOVDX,OFFSETPRO_3_S1;
MOVDX,OFFSETSTRING3;
把STRING3的字符串首地址给DX,接收一个字符串
MOVCL,STRING3[1];
把字符串里字符个数赋给CX
DECCX;
实际比较的次数为CX-1
CMPCX,0
JENO_SORTED
LOOP3_1:
;
下面的LOOP3_1是冒泡排序
MOVBX,CX;
把CX的值存到BX,防止内层循环破坏CX
MOVSI,2
LOOP3_2:
MOVAL,STRING3[SI]
CMPAL,STRING3[SI+1]
JAENEXT3_1
XCHGAL,STRING3[SI+1]
XCHGAL,STRING3[SI]
NEXT3_1:
INCSI
LOOPLOOP3_2
MOVCX,BX
LOOPLOOP3_1
NO_SORTED:
MOVBX,0
MOVBL,STRING3[1];
ADDBL,2
MOVSTRING3[BX],'
;
将$存入改变后的字符串以作结束标志
MOVDX,OFFSETPRO_3_S2;
MOVDX,OFFSETSTRING3[2];
JENEXT3_2
JMPPRO_3_START;
NEXT3_2:
PRO_3ENDP
PRO_4PROCNEAR;
过程四
PRO_4_START:
MOVDX,OFFSETPRO_4_S1;
MOVDX,OFFSETSTRING4;
把STRING4的字符串首地址给DX,接收一个字符串
MOVBL,STRING4[1];
MOVSTRING4[BX],'
CALLPRO_4_IFERROR;
调用判断子程序来判断是否输入了正确的格式
CMPBX,0
JEPRO_4_ERROR_1;
BX=0则为长度溢出
CMPBX,1
JEPRO_4_ERROR_2;
BX=1则输入的字符有误
JMPPRO_4_NO_ERROR
PRO_4_ERROR_1:
MOVDX,OFFSETPRO_4_ERROR_LEN;
JMPPRO_4_START
PRO_4_ERROR_2:
MOVDX,OFFSETPRO_4_ERROR_NOT_NUM;
PRO_4_NO_ERROR:
;
下面各段把时间的ASCII转为无符号数,并判断
MOVBH,STRING4[2];
对时的处理
MOVBL,STRING4[3]
SUBBH,30H
SUBBL,30H
MOVAL,BH
MOVDL,10
MULDL
MOVBH,AL;
BH乘以10
ADDBH,BL;
BH+BL->
BH将ASCII转换成无符号数
CMPBH,0
JBPRO_4_EOOOR_NUM_HR
CMPBH,24
JAPRO_4_EOOOR_NUM_HR
JMPPRO_4_NOERROR_NUM_HR
PRO_4_EOOOR_NUM_HR:
MOVDX,OFFSETPRO_4_ERROR_NUM_OVER;
PRO_4_NOERROR_NUM_HR:
MOVCH,BH;
把BH值放入CH,即设置时的入口参数
MOVBH,STRING4[5];
对分的处理
MOVBL,STRING4[6]
JBPRO_4_EOOOR_NUM_MIN
CMPBH,60
JAPRO_4_EOOOR_NUM_MIN
JMPPRO_4_NOERROR_NUM_MIN
PRO_4_EOOOR_NUM_MIN:
PRO_4_NOERROR_NUM_MIN:
MOVCL,BH;
把BH值放入CL,即设置分的入口参数
MOVBH,STRING4[8];
对秒的处理
MOVBL,STRING4[9]
JBPRO_4_EOOOR_NUM_SEC
JAPRO_4_EOOOR_NUM_SEC
JMPPRO_4_NOERROR_NUM_SEC
PRO_4_EOOOR_NUM_SEC:
PRO_4_NOERROR_NUM_SEC:
MOVDH,BH;
把BH值放入DH,即设置秒的入口参数
MOVDL,0;
初始化1/100秒
MOVAH,2DH
设置时间
MOVDX,OFFSETPRO_4_S2;
MOVDX,OFFSETPRO_4_S3;
LOOP4_1:
;
循环显示时间
MOVAH,2CH
获取系统时间,CH:
CL:
DH:
DLH:
M:
S:
1/100S
Time_set:
十六进制转ASCII码
MOVAX,0;
时
MOVAL,CH
MOVBL,10
DIVBL
ADDAL,30H;
时的高位
ADDAH,30H;
时的低位
MOVSTRING4[2],AL
MOVSTRING4[3],AH
分
MOVAL,CL
高位
低位
MOVSTRING4[5],AL
MOVSTRING4[6],AH
秒
MOVAL,DH
MOVSTRING4[8],AL
MOVSTRING4[9],AH
MOVDX,OFFSETSTRING4[2]
MOVDL,0DH;
换行,便于下次显示
MOVAH,02H
MOVAH,0BH
CMPAL,0
JELOOP4_1
JENEXT4_10
JMPPRO_4_START;
NEXT4_10:
PRO_4ENDP
PRO_4_IFERRORPROCNEAR
MOVBX,2
CMPSTRING4[1],8
JZNEXT4_1
MOVBX,0;
用BX保存错误类型,并返回
NEXT4_1:
CMPSTRING4[2],30H;
检查第一个数字
JBNEXT4_2_NO_NUM
CMPSTRING4[2],39H
JANEXT4_2_NO_NUM
JMPNEXT4_2
NEXT4_2_NO_NUM:
NEXT4_2:
CMPSTRING4[3],30H;
检查第二个数字
JBNEXT4_3_NO_NUM
CMPSTRING4[3],39H
JANEXT4_3_NO_NUM
JMPNEXT4_3
NEXT4_3_NO_NUM:
NEXT4_3:
CMPSTRING4[4],3AH;
检查引号
JENEXT4_4
NEXT4_4:
CMPSTRING4[5],30H;
检查第三个数字
JBNEXT4_5_NO_NUM
CMPSTRING4[5],39H
JANEXT4_5_NO_NUM
JMPNEXT4_5
NEXT4_5_NO_NUM:
NEXT4_5:
CMPSTRING4[6],30H;
检查第四个数字
JBNEXT4_6_NO_NUM
CMPSTRING4[6],39H
JANEXT4_6_NO_NUM
JMPNEXT4_6
NEXT4_6_NO_NUM:
NEXT4_6:
CMPSTRING4[7],3AH;
JENEXT4_7
NEXT4_7:
CMPSTRING4[8],30H;
检查第五个数字
JBNEXT4_8_NO_NUM
CMPSTRING4[8],39H
JANEXT4_8_NO_NUM
JMPNEXT4_8
NEXT4_8_NO_NUM:
NEXT4_8:
CMP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华工 微机 实验 报告 子程序 调用