🌴 2022.4.27 早十 实验一

实验一 输入输出实验

1.1 实验要求

熟悉emu8086仿真系统,实现控制台输入输出,设计并单步调试实现一位十进制数的加法运算(屏幕效果为3+2=5,红色为输入其他为自动输出)

1.2 理论分析

调用DOS中AH=1输入字符,存入AL,返回值是ASCII码,所以要借用与运算将高位清零,例如字符3的ASCII码为33H,和FH与运算得到3H

调用DOS中AH=2输出字符,重点注意DL=要输出的字符,AL=DL。这会修改第一次在控制台输入的被加数,所以暂存在DH中

加数2即32H没有做与运算,因为如果这里做了与运算,计算完之后,在最后输出时输出的是05H对应的字符♣,还需要再和FH与运算一次才是35H即5

1.3 汇编语言

💻提示:所有实验源码已在Github整理

MOV AH,1    ;AH=1控制台输入,返回值是AL=字符的ASCII
INT 21H ;调用DOS
AND AL,15 ;与运算,将高位清零,假设输入3D=33H,将高位清零
MOV DH,AL ;AL存到DH,Note:AL=DL,05行AL的值变为'+'所以要借用DH暂存
MOV DL,'+' ;DL=要输出的ASCII
MOV AH,2 ;AH=2控制台输出
INT 21H
MOV AH,1
INT 21H ;为什么第二次没有做ADN?因为如果这里与运算后,最后还要与15,避免重复操作
ADD DH,AL ;为什么是DH+AL而不是AL+DH,原因和第四行相同,下一行DL的值变为'='
MOV DL,'='
MOV AH,2
INT 21H
MOV DL,DH
INT 21H ;12行AH=2所以14行不需要重复定义
HLT ;停机指令
;Note:AL=DL!!!

1.4 实验结果

微机原理与接口技术01

思考内容

  1. 输入输出数据和计算用数据的区别
    从键盘上输入和从屏幕上输出的都是字符,返回值实际是ASCII码,与计算用的数据实间相差30H,所以一个数从屏幕上输入时转换成数字-30H,输出时将+30H,或者输入时输出时都进行一次与运算

  2. 单字符输入输出和串输入输出的不同
    单字符的输入使用1号功能键,输出通过2号功能调用,且待显示字符送给DL寄存器;串输入使用0A功能,输出通过9号功能调用,DS:DX指向待显示字符串,且字符串必须以“$”结束