方式,这个设置可以用BIOS调用中00号功能的设置显示方式功能,其入口参数为:AL=显示方式,出口参数:无。
显示方式设置好之后,就要显示提示用户信息的字符串,可预先将要显示的字符串放在内存中,显示字符串要用DOS调用中的I/O设备功能调用,其入口参数为DS:DX=字符串首址,字符串需要以$结束,其出口参数无。
这样一个具有提示信息的界面就产生了,接着就需要其要具有可以输入一个字符的功能,由此确立了主程序要有使用户进行键盘输入的指令,这条指令要用到设备I/O 的功能调用,使用21H的01H号功能的键盘输入字符功能,其入口参数:无,出口参数为AL=输入字符;完成以上的汇编语言程序设计的前期工作之后就要进行对输入的字符进行判断了,而主程序只能判断出大写字母D、T、E这三个字符,判断用户输入的字符是什么字符可以根据其ASCII值来判定,故可将其输入的字符的ASCII值分别于D、T、E相减来判断,若用户按下的是键盘上的大写字母D,则主程序就调用一个显示当前系统日期的子程序来完成显示日期的功能;若用户按下键盘上的大写字母T,则主程序调用显示时间子程序,完成显示当前系统时间的功能;若用户按下键盘上的大写字母E,则主程序调用退出子程序,退出程序:若用户按下出了这三个按键之外的其他按键,则主程序只显示用户提示信息,等待用户的继续输入,直至用户输入大写字母E,程序才能正常结束。
这个按输入字符而执行相应程序的功能决定了其判断字符的程序段结构为分支结构或循环结构。
(2)主程序流程图
由主程序完成的功能及实现方式可确定其流程图的结构,主程序的流程图如图1所示。
Y N
N
Y
N
N
Y
图1 主程序流程图
3.2.2子程序功能
(1)显示日期子程序完成的功能
显示日期子程序DATE通过调用DOS下的2AH号功能,将日期值传送进寄存器CX和DX中,然后再调用将日期数值转换成ASCII码字符的子程序,最后调用BIOS下的13H号的显示字符串的功能,将日期显示在矩形框中。
此函数的入口条件是:AL=’D’;出口条件是:要显示的日期字符串在以BP指出的附加段中。
(2)显示时间子程序完成的功能
显示时间子程序TIME调用DOS下的2CH号功能,将时间传送进寄存器CX和DX中,
然后调用将时间数值转换成ASCII码字符的子程序,最后调用
BIOS下的13H号的显示字符串的功能,将时间显示在矩形框中。
此子程序的入口条件是:AL=’T’;出口条件是:要显示的时间字符串在由BP指向的附加段中。
(3)日期数值转换ASCII码字符子程序完成的功能
BCDASC子程序将CX和DX中的数值逐个转换成与之相对应的ASCII码,再将其送入以PIN为首地址的附加段中。
此子程序的入口条件是:日期在CX和DX中;出口条件;无。
(4)时间数值转换ASCII码字符子程序完成的功能
BCDASC1子程序将CX和DX中的数值逐个转换成与之相对应的ASCII码,再将其送入PIN2为首地址的附加段中。
此函数的入口条件是:时间在CX和DX中;出口条件:无。
(5)退出子程序完成的功能
退出子程序QUIT的功能是退出程序,返回DOS状态。
入口条件AL=’E’;出口条件:无。
3.2.3子程序流程图
(1)SHOWT的流程图如图2所示
N
Y
图2 显示日期SHOWT子程序流程图(2)SHOWD的流程图如图所示
N
Y
图3 显示日期TIME子程序流程图
(4) 时间数值转换成ASCII字符子程序流程图如图4所示
图4 时间转换ASCII码流程图4.源程序代码
CSEG ENDS
END BEGIN
5.调试和运行
5.1调试过程
5.1.1进入调试界面
在DOS环境下的命令提示符中输入命令:DEBUG DTM3.EXE,然后现-横线提示符,之后可以输入DEBUG的多种调试命令,如U反汇编命令,T单步执行命令,D显示内存命令,G执行命令等一系列调试命令,调试界面如图5所示。
图5 调试界面
5.1.2用G命令设置断点
(1)进入主界面
根据U汇编的结果,先从源代码的主程序的起始地址执行到输入字符命令,故将输入字符指令的地址设置为断点。
输入-G=0032,006C,按回车后,显示的界面如图6所示。
图6 提示界面
(2)调试显示日期功能
在键盘上键入大写字母D,查看寄存器的变化,其中AL的值为44H,即键入的是大写
字母D,然后再进行设置断点,这次将断点设置在调用显示日期的下一条指令处,输入命令G=0070,0077,按回车后,显示的界面如图7所示,可知实现了显示时间的功能。
图7 日期显示界面
(3)调试显示时间功能
键入大写字母T,之后,在输入G=0070,0080,按回车之后,显示的界面如图8所示,可知显示时间的功能以实现。
图8 时间显示界面
(4)退出功能调试
退出功能的代码比较简单,就是DOS的I/O输入输出命令中的程序结束,返回DOS 状态的命令,在提示主界面中输入大写字母E后,程序退出。
5.2运行结果
5.2.1运行过程及截图
(1)进入提示界面
在命令提示符界面中,在生成程序所在目录下输入该文件的文件名,DTM3之后,按回车,显示界面如图9所示。
图9 提示界面
(2)显示日期
键入大写字母D,显示日期界面如图10所示。
图10 显示日期界面
(3)显示时间
键入大写字母T,显示时间界面如图11所示。
图11 显示时间界面
(4)退出程序
键入大写字母E,退出后界面如图12所示。
图12 退出程序
6.总结
在本次课程设计中,认识到汇编语言对于显示方面的编程很有用处,而且在显示编程中,用到很多BIOS调用和DOS的相关调用,这是在平时是不经常训练与实践的,这次给补上了。
我选择的时间与日期的显示,就用到了显示的相关知识及色彩的设置,还有字符串的输出等。
虽然它实现了输入大写字母D显示日期。
输入大写字母T和大写字母E退出的功能,但是,在按除了这三个字母之外的键盘上的其他按键时,只是继续显示提示信息而没有提示错误的相关信息。
可以在此基础上对这个程序增加个显示出错信息的功能,将提示出错信息的字符串像存储用户提示信息那样写进内存中,然后当用户按下除了大写字母D、T和E之外的其他字符时就调用具有此功能的子程序或宏。
在编制程序过程中,曾想过将ASCII码转换功能的代码段编制成宏,但是在显示日期和时间时,要多次调用这个宏,而每一次调用宏,都会在这段代码写在宏名出现的地方,这样会造成代码冗余,降低内存的利用率。
考虑到这些之后,就放弃了使用宏,而改用子程序。
子程序虽然没有宏那样具有较好的灵活性和较高的执行速度,但是却具有占用较少的内存的特点,故在此次课程设计的源程序编辑中选择了将ASCII代码的转换编写成了具有此功能的子程序。
对本次汇编语言课程设计做一个总结的话,那就是通过本次汇编语言的课程设计,。