本文已参与「新人创作礼」活动,一起开启掘金创作之路。
🌴 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 实验结果
思考内容
-
输入输出数据和计算用数据的区别 从键盘上输入和从屏幕上输出的都是字符,返回值实际是ASCII码,与计算用的数据实间相差30H,所以一个数从屏幕上输入时转换成数字-30H,输出时将+30H,或者输入时输出时都进行一次与运算
-
单字符输入输出和串输入输出的不同 单字符的输入使用1号功能键,输出通过2号功能调用,且待显示字符送给DL寄存器;串输入使用0A功能,输出通过9号功能调用,DS:DX指向待显示字符串,且字符串必须以“$”结束