预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验二分支程序的设计 实验目的 学习提示信息的显示及键盘输入字符的方法。 掌握分支程序的设计方法。 实验内容 在提示信息下,从键盘输入原码表示的二位十六进制有符号数。当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。 程序代码 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS1 DB'INPUTDATA:',0DH,0AH,'$' MESS2 DB'THISDATAIS+',0DH,0AH,'$' MESS3 DB'THISDATAIS-',0DH,0AH,'$' MESS4 DB'THISDATAISZERO',0DH,0AH,'$' DATABUF DB3 ACTLEN DB? STRING DB3DUP(?) DATA ENDS SSEG SEGMENT PARASTACK'STACK' DB 50DUP(0) SSEG ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSEG,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,SSEG MOV SS,AX MOV DX,OFFSETMESS1 MOV AH,09H INT 21H MOV AH,0AH MOV DX,OFFSETDATABUF INT 21H CRLF MOV AL,STRING CMP AL,38H JAE NEGATIVE CMP AL,30H JNZ POSITIVE MOV AL,STRING[1] CMP AL,30H JNZ POSITIVE MOV DX,OFFSETMESS4 MOV AH,09H INT 21H JMP RR NEGATIVE: MOV DX,OFFSETMESS3 MOV AH,09H INT 21H JMP RR POSITIVE: MOV DX,OFFSETMESS2 MOV AH,09H INT 21H JMP RR RR: MOV AX,4C00H INT 21H CODE ENDS END START 调试过程 将代码编译链接成EXE文件,然后进入DEBUG进行调试。 利用U指令反汇编程序,结果如下图: 观察代码段地址范围,在信息提示输入的地方设置断点,即标号18的地方,运行程序,结果如下图: 输入45,经过反汇编,第一条分支结束后的代码段标号是2B,所以把第二个断点设在2B处,运行程序,结果如下图,可以看到在此处分支选择判断正确,不进入NEGATIVE分支。继续在第二个分支结束的时候设置断点以查看分支选择是否正确,断点设在2F处,运行程序,结果如下图,可以看到程序进入第二个分支选择,因为45是正数,高位不为零。程序运行结果显示“THISDATAIS+”,结果正确。 下面将指令IP修改为0000,继续调试。 标号18的地方设断点,输入40,标号2B的地方设断点,运行程序,结果如下图: 由结果可以看出,分支选择判断正确,在32的地方设断点,运行程序查看,输出结果正确。 继续调试,输入90,在2B的地方设断点,直接进入第一个选择分支“NEGATIVE”,结果显示“THISDATAIS-”,正确,如下图所示。 继续调试,输入00,依次在18、2B、32、36、3D五个地方设断点,查看程序运行情况,结果如下图: 由结果可以看到,程序在每个分支选择处都判断正确,并最终输出正确显示:THISDATAISZERO。 习题回答 1.在DEBUG跟踪某条分支的时候,断点应该下在什么位置?如何查看标志位的变化情况? 答:断点应该下在分支结束后第一条指令前以查看每次分支选择是否正确。 用DEBUG命令中的-R命令可以查看标志位的情况。 2.从键盘输入的数字在键盘缓冲区是怎样分布的?用图简单地示意,用哪几条相关的DEBUG命令查看? 答:输入的数字以ASCII码形式存在键盘缓冲区,先输入的在低位地址。 在程序执行到输入字符以后设置断点,用DEBUG命令中的D0000命令查看DS段可以看到数据情况。 例如: 3.若输入的是非法字符而不是十六进制数,此程序会得到什么结果?如何改进? 答:若输入非法字符,显示结果不确定,可能为正,也可能为负。 例如: 改进方法:在本程序前加入一个分支,判断输入的数是否在十六进制数的范围,若在所限定范围之外输出提示“ERROR”,若在范围内再继续向下运行程序。