武汉理工大学《微机原理与接口技术》课程设计说明书
按要求显示提示语句
图3-3输出程序流程图
提示继续输入 显示在屏幕 DOS调用输出指令 从键盘输入序号,并运用DOS命令将所得结果显示在屏幕上,随后返回输入序号提示语句。
3.3设计程序一
根据题目,尝试编写了一个简单程序。为与最后的程序作比较,将此程序列出,如下:
DATA SEGMENT
n0 db '0000000000000000000000000000000000000000' n1 db'1111111111111111111111111111111111111111' n2 db '2222222222222222222222222222222222222222' n3 db '3333333333333333333333333333333333333333' n4 db '4444444444444444444444444444444444444444' n5 db '5555555555555555555555555555555555555555' n6 db'6666666666666666666666666666666666666666' n7 db '777' n8 db '888'
Errmsg DB 'No! Input 0-8! Q or q , Exit $' ;输出错误信息 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ;段属性说明 START:
MOV AX,DATA ;初始化DS MOV DS,AX LOP:
MOV AH,01H ;输入一个数字 INT 21H
8
武汉理工大学《微机原理与接口技术》课程设计说明书
CMP AL,'Q' ;判断是否输入字符与Q相等,相等跳到EXIT退出 JZ EXIT CMP AL,'q' ;判断是否输入字符与q相等,相等跳到EXIT退出 JZ EXIT CMP AL,'0' ;输入不在0-8范围则退出 JB ERR ;小于0跳转 CMP AL,'8' JA ERR ;大于8跳转 SUB AL,30H ;计算字符串的地址 MOV DH,28H MUL DH MOV BX,AX CALL DISP JMP LOP ERR:
MOV DL,0DH MOV AH,02 INT 21H MOV DX,OFFSET Errmsg MOV AH,9 INT 21H MOV DL,0DH MOV AH,02 INT 21H JMP LOP EXIT:
MOV AH,4CH INT 21
DISP PROC NEAR MOV DL,0DH MOV AH,02 INT 21H MOV DL,0AH MOV AH,02 INT 21H MOV CX,28H LOP1:
MOV DL,[BX] MOV AH,02H INT 21H INC BX LOOP LOP1 MOV DL,0DH MOV AH,02 INT 21H
;28H=40 ;数据放入BX ;输出错误信息后,继续输入序号 ;输出提示错误语句 ;回车和换行 ;返回LOP继续输入序号 ;返回DOS ;回车换行 ;多字符输入 ;28H=40 控制循环次数即输出的信息字符个数 ;循环输出字符串 ;BX打印字符 9
武汉理工大学《微机原理与接口技术》课程设计说明书
MOV DL,0AH MOV AH,02 INT 21H RET
DISP ENDP CODE ENDS
END START ;源程序结束
调试结果如图3-4所示。
图3-4调试结果
出现的问题有:
问题1:开始输入序号时,只能显示在屏幕的第一个空间。 问题2:在输出没有写满40个字符的字符串时,输出是乱码。 问题3:按Q或q退出时,还会显示一串数字再退出。
3.4设计程序二
在程序一调试的基础上,检查程序发现一些问题,在输入不是Q或q或0至8的数字时,没有写输出显示字符的程序;输入是应该是字符串,因为有回车。在此基础上,继续改善设计的程序,设计出程序二,即最终程序。
输入一个序号,首先判断是否是Q或q。如果是,则直接跳出,结束程序。如果不是,就在已设定好的信息库中检索相应信息,并将信息显示在屏幕上,紧接着跳入下一次序号输入界面。如果没有相应的序号所对应的信息,即超出序号范围会自动报错,并跳到下一次序号输入界面。
主体部分程序如下:
BEGIN:
CALL CRLF ;回车换行
10
武汉理工大学《微机原理与接口技术》课程设计说明书
LEA DX,MSG ;输出提示语句Please input a number: MOV AH,09H INT 21H
MOV AH,1 ;输入序号 INT 21H
CMP AL,'Q' ;判断为?Q?退出 JE EXIT
CMP AL,'q' ;判断为?q?退出 JE EXIT
SUB AL,'0' ;小于0跳转ERROR JB ERROR
CMP AL,8 ;大于9跳转ERROR JA ERROR
MOV BX,OFFSET MSG0 ;取第一个字符串的首地址 MUL FORTY
ADD BX,AX ;找到相应字符串的地址 CALL DISPLAY ;调用DISPLAY子程序
定义ERROR程序:提示错误,重新要求输入序号,再次检测。
ERROR:
CALL CRLF ;回车换行
LEA DX,ERRMSG ;提示错误语句 MOV AH,09H INT 21H CALL CRLF
JMP BEGIN ;返回BEGIN程序
定义显示信息程序:将字符信息一个个输出。
DISPLAY PROC NEAR CALL CRLF
LEA DX,MSG9 ;提示语The message is: MOV AH,09H INT 21H
MOV CX,40 ;设置循环次数
DISP1:
MOV DL,[BX] ;输出字符串 MOV AH,2 INT 21H INC BX LOOP DISP1 CALL CRLF JMP BEGIN CALL CRLF
RET ;返回程序
DISPLAY ENDP
11
武汉理工大学《微机原理与接口技术》课程设计说明书
完整程序见附录一。
3.5调试过程
3.5.1调试过程
调试过程主要由编辑、汇编、链接和执行等几个步骤组成。当编辑好汇编语言源程序后,将其保存为.ASM文件。再调用汇编程序对源程序进行翻译,生成.OBJ的目标文件。在汇编过程中,源程序有错误则不能生成目标文件,经过多次修改最终生成无错误目标文件。之后,调用链接程序(LINK)将用户目标程序和库文件进行链接、定位,生成.EXE可执行文件。如果刚开始可执行程序运行之后没有得到预想的结果,又要重新检查源程序的算法错误,重新编辑、汇编、链接和执行,最终得到预期的结果。
3.5.2结果记录
经过多次调试、修改、测试结果,最后基本符合要求。 调试最终结果如图3-5所示。 完整的调试见附录二。
图3-5调试最终结果
12