?? 2022.5.12 早八 实验二
实验二 输入输出实验
文章目录
-
- 前言
- 1.1 实验要求
- 1.2 理论分析
- 1.3 汇编语言
- 1.4 实验结果
前言
??本文章是 专栏文章主要是实验内容 ??微机原理技术接口专栏 传送门 ??提示:本文的环境是emu8086仿真系统。
1.1 实验要求
熟悉emu8086模拟系统实现控制台输入输出,实现两位十进制数字猜测游戏(基本要求:输入两位数与预设值进行比较>小于输出<对于输出=并退出)
1.2 理论分析
分别使用输入的两位数DOS 1号输入功能,高位(第一次输入)暂存DH,放在低位(第二次输入)AL,利用AAD指令,将AX寄存器中非压缩型BCD代码转换成真正的二进制数并存储在中AL,之后用CMP将指令与设定值进行比较,然后使用JE、JA判断大小并跳转。
扩展:如果大于或小于,则使用DOS 2号功能输出0A(换行)、0D(回车)实现每次输出都换行。
1.3 汇编语言
??提示:所有实验源代码已经存在Github整理
BGN: MOV AH,1 INT 21H ;调用DOS 1号输入功能 AND AL,15 ;假设输入3D=33H,将高位清零 MOV DH,AL ;暂存第一个数DH MOV AH,1 INT 21H ;调用DOS 1号输入第二个数 AND AL,15 ;高位清零 MOV AH,DH ;第一个数作为高位给AH,第二个数在AL不变 AAD ;AAD指令 AL=AH*0AH AL AH=0.本质上是将军AX非压缩型寄存器BCD代码转换成真正的二进制数并存储在中AL寄存器中 CMP AL,N ;若大于CF=0,小于CF=1,等于CF=1.ZF=1 JE JEND ;零标志位ZF=1转移 MOV DL,'>' JA J1 ;高于或不低于转移,CF=0 MOV DL,'<' J1: MOV AH,2 INT 21H ;调用2号输出> JMP BGN ;猜测结果大/小,继续返回BGN JEND: MOV DL,'=' MOV AH,2 INT 21H MOV AH,4CH INT 21H ;调用DOC 4CH中断程序 N DB 35 ;赋初值,猜数为十进制35
扩展,每次输出都换行
BGN: MOV AH,1 INT 21H ;调用DOS 1号输入功能 AND AL,15 ;假设输入3D=33H,将高位清零 MOV DH,AL ;暂存第一个数DH MOV AH,1 INT 21H ;调用DOS 1号输入第二个数 AND AL,15 ;高位清零 MOV AH,DH ;第一个数作为高位给AH,第二个数在AL不变 AAD ;AAD指令 AL=AH*0AH AL AH=0.本质上是将军AX非压缩型寄存器BCD代码转换成真正的二进制数并存储在中AL寄存器中 CMP AL,N ;若大于CF=0,小于CF=1,等于CF=1.ZF=1 JE JEND ;零标志位ZF=1转移 MOV DL,'>' JA J1 ;高于或不低于转移,CF=0 MOV DL,'<' J1: MOV AH,2 INT 21H ;调用2号输出> MOV DL,0AH INT 21H ;调用2号换行 MOV DL,0DH INT 21H ;调用2号回车 JMP BGN ;猜测结果大/小,继续返回BGN JEND: MOV DL,'=' MOV AH,2 INT 21H MOV AH,4CH INT 21H ;调用DOC 4CH中断程序 N DB 35 ;赋初值,猜数为十进制35
1.4 实验结果
不换行单步运行
单步换行
- 显示输出控制符 可使用控制字符DOS 2号功能,如本实验的扩展要求,通过检查ASCII表,换行和回车的16进制数,保存到DL中,调用DOS INT 21后输出
- 实现类似分支功能的不同指令有哪些? 无条件转移JMP,条件转移JC/JNC,条件转移指令JZ/JNZ(判断CF位),JZ/JNZ(判断ZF位),JO/JNO(判断OF位),JP/JPE、JNP/JPO(判断PF位),JS/JNS(判断SF位),JA/JAE/JB/JBE(判断CF或CF ZF位),JG/JGE/JL/JLE(判断SF OF或SF OF ZF)