五、简单分支结构程序实验
5.1 实验类型
实验类型:设计型
5.2 实验目的
1.掌握条件转移指令的使用方法;
2.掌握指令对标志寄存器中各标志位的影响情况;
3.掌握标志位和转移指令之间的关系;
4.初步掌握利用设置断点调试程序的方法.
5.3实验内容
1. 编写一个程序,显示AL寄存器中的两位十六进制数
2. 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
5.4 实验要求
1.仔细阅读汇编语言教材相关内容。
2.熟练掌握DEBUG中的G命令。
3.在DEBUG下执行程序,利用跟踪命令检查指令对标志位的影响情况。
4.掌握对INT指令的跟踪方法。
5.5实验结果
1.第一个程序,显示AL寄存器中的两位十六进制数,这里在AL中写入的是3EH。
流程图:
代码:
DATA SEGMENT
datain db 10 dup(0)
DATA ENDS
STACK SEGMENT PARA STACK
BUF DW 20H DUP (0)
LEN EQU $-BUF
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,SS:STACK,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AL,3EH ;定义程序的入口,把想要显示的数字移入AL寄存器
MOV BL,AL ;将AL暂存在BL中,因为之后要改变AH中的内容
MOV DL,AL ;DL用于显示字符
MOV CL,4 ;CL在位移指令中作位移次数计数器用 这里位移次数为4
SHR DL,CL ;SHR指令将DL顺序CL寄存器指定的位数,把低位移出
CMP DL,9 ;将DL与9比较,如果小于等于9,则本身加30H即为对应的ASCII 码
JBE S1 ;如果小于等于则跳转到S1
ADD DL,7 ;如果大于9,本身加37H即为对应的ASCII 码
S1:
ADD DL,30H ;
MOV AH,2 ;输出DL寄存器的字符到显示器
INT 21H ;显示高位ASCII码
MOV DL,BL ;
AND DL,0FH ;将高位置零
CMP DL,9 ;
JBE S2 ;
ADD DL,7 ;
S2:
ADD DL,30H ;
MOV AH,2 ;
INT 21H ;显示低位ASCII码
MOV AH,4CH ;
INT 21H ;
CODE ENDS ;返回DOS
END START
运行截图:
2.第二个程序程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
流程图:
代码:
DATA SEGMENT
ms_input db 'Please input a char:','$'
ms_output db 'output:','$'
DATA ENDS
STACK SEGMENT PARA STACK
BUF DW 20H DUP (0)
LEN EQU $-BUF
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,SS:STACK,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
CALL DISP_HUI
MOV DX,OFFSET MS_INPUT ;取显示字符串首地址
MOV AH,9
INT 21H
CALL DISP_HUI
MOV AH,1 ;等待输入字符
INT 21H
MOV BL,AL
CMP BL,0DH
JE S ;如果是回车则结束程序
CMP BL,'1'
JB START ;如果是其他字符则等待继续输入
CMP BL,'9'
JBE NEXT1 ;如果是1-9则输出这个数
CMP BL,'A'
JB START ;如果是其他字符则等待继续输入
CMP BL,'Z'
JBE NEXT2 ;如果是A-Z则输出c
CMP BL,'a'
JB START ;如果是其他字符则等待继续输入
CMP BL,'z'
JBE NEXT2 ;如果是a-z则输出c
JMP START ;如果是其他字符则等待继续输入
NEXT1:
CALL DISP_HUI
MOV DX,OFFSET ms_output ;取显示字符串首地址
MOV AH,9
INT 21H
CALL DISP_HUI
MOV DL,BL ;显示这个数
MOV AH,2
INT 21H
CALL S
NEXT2:
CALL DISP_HUI
MOV DX,OFFSET ms_output ;取显示字符串首地址
MOV AH,9
INT 21H
CALL DISP_HUI
MOV DL,63H ;显示c
MOV AH,2
INT 21H
S:
MOV AH,4CH
INT 21H ;返回
DISP_HUI: ;入口参数DL,回车
PUSHF ;标志位入栈
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
POP DX
POP AX
POPF
RET
CODE ENDS
END START
运行截图:
输入其他字符,等待输入
输入1-9,则显示
输入若为A-Z或a-z字符,均显示“c”