微机原理与技术接口 实验一 输入输出实验

331 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

🌴 2022.4.27 早十 实验一

实验一 输入输出实验

前言

🎬本文章是 【微机原理技术接口】 专栏的文章,主要是实验内容
🔗微机原理技术接口专栏 传送门
💻提示:本文的环境是emu8086仿真系统。

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 实验结果

在这里插入图片描述

思考内容

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

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