西电微机原理大作业.docx
- 文档编号:706875
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:25
- 大小:86.08KB
西电微机原理大作业.docx
《西电微机原理大作业.docx》由会员分享,可在线阅读,更多相关《西电微机原理大作业.docx(25页珍藏版)》请在冰豆网上搜索。
西电微机原理大作业
汇编语言程序设计综合实验
姓名:
***
学号:
***********
2016年12月25日
题目功能及要求
题目要求
编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:
(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:
<原字符串>例如:
abcdgyt0092
<新字符串>ABCDGYT0092
按任一键重做;按Esc键返回主菜单。
(2)按数字键“2”,完成在字符串中找最大值。
用户输入由英文大小写字母或数字
0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:
<原字符串>Themaximumis<最大值>.
按任一键重做;按Esc键返回主菜单。
(3)按数字键“3”,完成输入数据组的排序。
用户输入一组十进制数值(小于255),
然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:
<原数值串>
<新数值串>
按任一键重做;按Esc键返回主菜单。
(4)按数字键“4”,完成时间的显示。
首先提示用户对时,即改变系统的定时器
HH:
MM:
SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:
HH:
MM:
SS。
按任一键重新对时;按Esc键返回主菜单。
(5)按数字键“5”,结束程序的运行,返回操作系统。
程序功能及分析:
程序主干:
(1)主程序:
通过调用屏幕初始化子程序、光标位置设定子程序、清屏子程序、菜单显示子程序、命令解析子程序完成显示器初始化,设置光标位置,打印程序菜单列表以及用户输入提示信息,并等待用户从键盘输入1~5进行菜单选择。
用户输入错误会被要求重输。
子程序跳转利用数据段转移地址查找表实现。
从子服务退回时,重新开始上述操作。
(2)子服务一:
将字符串中的小写字母转换成大写字母,并输出到屏幕上。
先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,后逐个判断字符是否为小写字母,如果是,则通过逻辑与进行转化,完成后,将结果放置到BUFFER2,后调用字符串输出子程序完成输出。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(3)子服务二:
找出一字符串中ASCII码最大的字符并输出。
先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,将AL赋初值为第一个字符,后将AL作为暂时最大值与各字符逐个比较,若小于则将其值赋给AL,否则不赋。
后将结果与提示信息生成字符串,后调用字符串输出子程序完成输出。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(4)子服务三:
读入一组十进制数,递增排序,并原格式输出。
先调用字符串输出子程序输出提示信息,后调用字符串输入子程序将用户从键盘输入的字符串读到BUFFER1存储区,后调用十进制数转二进制数子程序,将转换数据放置到BUFFER2,再利用冒泡算法对BUFFER2内的数据递增排序,再调用二进制数转十进制数子程序将BUFFER2内的二进制数转化为十进制数,放置到BUFFER3存储区内,并调用字符串格式修正子程序将不必要的前导’0’删除,再调用字符串输出子程序将BUFFER3内的数据输出。
对于非法输入(数值超过255、非法字符)会给出错误提示信息。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(5)子服务四:
完成时间的显示、修改。
调用字符串输出子程序将是否更改时间提示信息输出,并调用无等待字符读入子程序等待用户输入。
然后通过DOS功能调用读出系统时间,后调用二进制转十进制数子程序,将系统时间显示到屏幕右上方。
如果用户确认修改时间,则调用字符串读入子程序将时间放置到BUFFER1,后调用十进制数转二进制数子程序并将结果放置到BUFFER2,后通过DOS功能调用将数据送给系统,如果出错则给出出错信息。
然后输出是否重做提示信息,调用无回显的字符读入子程序,并判断退出到主程序或重做。
(6)子服务五:
退出到系统。
通过DOS功能调用完成。
辅助子程序:
(1)命令解析子程序:
完成对用户输入选择信息的检查,合法则安排服务跳转,否则要求用户重做。
(2)菜单显示子程序:
调用字符串输出子程序将菜单输出到屏幕上。
(3)屏幕初始化子程序:
通过BIOS功能调用将屏幕设置成80*25字符模式。
(4)光标位置设定:
通过BIOS功能调用完成设定。
(5)字符串显示子程序:
通过DOS功能调用完成。
(6)清屏子程序:
通过重新设置屏幕显示模式到达清屏目的。
(7)字符串读入子程序:
通过DOS功能调用完成字符串输入,数据放在BUFFER1。
(8)字符读入子程序:
通过DOS功能调用完成。
(9)无等待的字符读子程序:
通过DOS功能调用完成。
(10)无回显的字符读入子程序:
通过DOS功能调用完成。
(11)字符串结束符添加子程序:
在指定存储区的字符串的最后添加回车、换行、字符串结束符。
(12)字符输出子程序:
通过DOS功能调用完成。
(13)十进制数转二进制数子程序:
利用加权求和公式将读入的十进制数(ASCII码字符串表示的数字)转化成二进制数并放到BUFFER存储区,其中第一个字节变量值为数据个数。
具有非法字符判定、数值超过255等判断。
(14)二进制数转十进制数子程序:
利用除10取余并逆序的算法将每一个二进制数转化为十进制数(ASCII字符串),将输出放置到BUFFER3存储区。
(15)字符串前导’0’删除子程序:
将十进制数(ASCII码字符串)高位的前导’0’删除。
汇编源程序
STACKSEGMENT'STACK'
DW4096DUP('C')
TOPLABELWORD
STACKENDS
DATASEGMENT
TRANSFORMDB'1.TRANSFORM',0DH,0AH,'$'
MAXDB'2.MAX',0DH,0AH,'$'
SORTDB'3.SORT',0DH,0AH,'$'
TIMEDB'4.TIME',0DH,0AH,'$'
EXITDB'5.EXIT',0DH,0AH,'$'
WAITINGDB'PLEASEINPUTNUM1-5TOSELECTSERVICE:
',0DH,0AH,'$'
TIPDB'PLEASEINPUTASTRING',0DH,0AH,'$'
TIPNUMDB'PLEASEINPUTAGROUPOFDECIMAL',0DH,0AH,'$'
ANYKEYDB'PRESSANYKEYTOCONTINUE',0DH,0AH,'$'
MAXIMUMDB'THEMAXIMUMIS:
$'
INPUT_TIMEDB'PLEASEINPUTCURRENTTIMELIKEHH:
MM:
SS',0DH,0AH,'$'
QUESTIONDB'DOYOUWANTTOSETTIME(Y/N)',0DH,0AH,'$'
INPUT_ERRORDB'ERRORORINVALIDINPUT',0DH,0AH,'$'
SUCCESSDB'SETTIMESUCCEED',0DH,0AH,'$'
STRINGDWTRANSFORM,MAX,SORT,TIME,EXIT,WAITING
SERVICEDWTRANS,FIND_MAX,SORTING,SET_TIME,EXIT_TOSYS
BUFFER1DB512DUP('C');INPUTBUFFER
BUFFER2DB512DUP('C');PROCESSWORKSPACE
BUFFER3DB512DUP('C');OUTPUTBUFFER
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEAAX,TOP
MOVSP,AX
CALLSCREEN_INIT
MAIN_AGAIN:
CALLCLEAR_SCREEN
CALLDISPLAY_MENU
CALLGET_CHAR
CALLORDER_PARSE
JMPMAIN_AGAIN
MOVAH,4CH
INT21H
ORDER_PARSEPROCNEAR;RETURNAL=-1IFERRORELSEINVOKESERVICE
PUSHAX
PUSHBX
ANDAL,0FH
CMPAL,1
JBERROR_OVER
CMPAL,5
JAERROR_OVER
LEABX,SERVICE
DECAL
SHLAL,1
XORAH,AH
ADDBX,AX
CALLCLEAR_SCREEN
CALLwordptr[BX]
POPBX
POPAX
JMPOVER_ORDER
ERROR_OVER:
MOVAL,0FFH
OVER_ORDER:
RET
ORDER_PARSEENDP
DISPLAY_MENUPROCNEAR;displaymenuincludingfiveitems
PUSHDX
PUSHCX
PUSHSI
MOVDH,0BH
MOVDL,14H
MOVCX,06H
LEASI,STRING
NEXT_DIS:
MOVBH,0
CALLCURSOR_SET
PUSHDX
MOVDX,[SI]
ADDSI,02H
CALLSTRING_DISPLAY
POPDX
INCDH
LOOPNEXT_DIS
POPSI
POPCX
POPDX
RET
DISPLAY_MENUENDP
SCREEN_INITPROCNEAR;setscreenmode80*25character
PUSHAX
MOVAH,0
MOVAL,02H
INT10H
POPAX
RET
SCREEN_INITENDP
CURSOR_SETPROCNEAR;setcursorBHPAGE,DHROW,DLCOLUMN
PUSHAX
MOVAH,02H
INT10H
POPAX
RET
CURSOR_SETENDP
STRING_DISPLAYPROCNEAR;displaystringDXADDRESS
PUSHAX
MOVAH,09H
INT21H
POPAX
RET
STRING_DISPLAYENDP
CLEAR_SCREENPROCNEAR;clearscreen
PUSHAX
MOVAX,3
INT10H
POPAX
RET
CLEAR_SCREENENDP
GET_CHAR_DIRPROC
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 作业