我是靠谱客的博主 喜悦康乃馨,最近开发中收集的这篇文章主要介绍微机原理实验3:键盘输入与显示实验一、实验目的二、实验内容三、程序清单五、实验结果分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、实验目的

了解移位指令的使用方法。
掌握子程序的调用方法,了解子程序的入口参数和出口参数。

二、实验内容

将键盘接收的四位十六进制数转换为二进制数,并显示在屏幕上。

三、程序清单

CRLF    MACRO                           ;建立宏命令,利用INT中断实现回车换行的功能,方便后续直接调用
        MOV     DL,0DH
        MOV     AH,02H
        INT     21H                     ;光标移到第一列
        MOV     DL,0AH
        MOV     AH,02H
        INT     21H                     ;光标移到下一行
ENDM

DATA    SEGMENT
MESS    DB      'INPUT HEXNUMBER: $'
ERROR   DB      'INPUT ERROR!',0DH,0AH,'$'
DATA    ENDS

STACK   SEGMENT STACK                   ;栈定义
STA     DB      32 DUP (?)
TOP     DW      ?
STACK   ENDS

CODE    SEGMENT
        ASSUME  CS:CODE,DS:DATA,SS:STACK,ES:DATA

START:  MOV     AX,DATA                 ;寄存器和栈初始化
        MOV     DS,AX
        MOV     ES,AX
        MOV     AX,STACK
        MOV     SS,AX
        MOV     AX,TOP
        MOV     SP,AX
        MOV     AH,09H                  ;9号功能显示字符串以’$’作为其结束标志
        MOV     DX,OFFSET MESS
        INT     21H                     ;调用DOS第21H号中断09H号功能显示请输入的提示信息
        CALL    GETNUM                  ;调键盘输入数据子程序(数据存在DX中)
        MOV     CX,16                   ;循环次数(二进制位数)
        MOV     BX,DX
TTT:    ROL     BX,01                   ;循环左移移位
        MOV     DL,BL
        AND     DL,01H                  ;屏蔽高 7 位
        ADD     DL,30H
        MOV     AH,02H
        INT     21H                     ;显示某位二进制数
        LOOP    TTT
        MOV     AX,4C00H
        INT     21H

GETNUM  PROC    NEAR                    ;键盘接收子程序,数值存DX中
        XOR     AX,AX
GGG:    MOV     AH,01H
        ;输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。
        ;该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾
        ;AH=01H,过滤掉控制字符,并回显
        INT     21H                     ;键盘接收键盘码
        CMP     AL,0DH                  ;判回车键
        JZ      PPP
        CMP     AL,20H                  ;判空格键
        JZ      PPP
        CMP     AL,30H
        JB      KKK
        SUB     AL,30H
        CMP     AL,0AH                  ;判 0 - 9 数字键
        JB      GETS
        CMP     AL,11H
        JB      KKK
        SUB     AL,07H
        CMP     AL,0FH                  ;判 A - F 字母键
        JBE     GETS
        CMP     AL,2AH
        JB      KKK
        CMP     AL,2FH                  ;判 a - f 字母键
        JA      KKK
        SUB     AL,20H
GETS:   MOV     CL,04H
        SHL     DX,CL
        ADD     DL,AL                   ;十六进制数存 DX 中
        JMP     GGG
KKK:    PUSH    DX
        MOV     AH,09
        MOV     DX,OFFSET ERROR
        INT     21H                     ;显示输入错误提示信息
        POP     DX
PPP:    PUSH    DX
        CRLF
        POP     DX
        RET
GETNUM  ENDP
CODE    ENDS
        END     START

四、实验过程
1.用编辑器建立源文件D101-3.ASM
在这里插入图片描述
2.用汇编程序MASM.EXE对源文件进行汇编,产生目标文件,再用连接程序LINK产生可执行文件
在这里插入图片描述
3.使用调试工具DEBUG进行程序调试
先用U命令反汇编,以便了解指令地址。显示结果如下,具体调试结果见第五部分。
在这里插入图片描述

五、实验结果分析

1.程序调试及结果
使用G命令执行到0770:0019处,寄存器和栈已经初始化完毕,查看数据区内存信息和在屏幕输出的提示信息如下
在这里插入图片描述
继续执行进入到键盘输入数据GETNUM子程序中,对该子程序进行测试,输入空格键,此时因为INT 21H中断从而不能单步执行,因此直接在DOSBox中运行D101-3.exe程序,按下空格键,程序直接跳转到标号PPP处,将DX压入栈,而DX中此时为MESS处地址,因此全为0。
在这里插入图片描述
同理,如果按下“3+空格”输出会是什么样?显而易见,最后2位应为11,如下
在这里插入图片描述
当然,如果输入类似‘.’‘/’等ASCII码值小于30H的字符,则会显示输入错误!
在这里插入图片描述
如果输入除AF、af之外的字母,显然这些字母不能够表示十六进制数,因此同样会报错!
在这里插入图片描述
输入正确的四个十六进制数,例如“1234H”,在GETNUM子程序返回之前断下,即使用-G 73命令,然后键入1234,则可观察到输入内容已经被存入DX寄存器中,如下
在这里插入图片描述
最后通过16次循环右移,从高位到低位依次取出DX中值的每一位(比特),加上30H转化为01字符后调用21H号中断的2号功能在屏幕上打印出来,例如0x1234= ‭0001001000110100‬B,如下图。‬‬
在这里插入图片描述
至此,整个实验完成。

2.分析总结

首先,本次实验的重点在于了解移位指令的使用方法、掌握子程序调用方法。通常来说,移位指令比较简单易懂,包括循环移位指令;而子程序的入口和出口参数一般通过寄存器来实现,入口参数就是在调用子程序之前对该寄存器进行赋值从而达到传参的目的,出口参数就是子程序最后返回前用来存放返回结果的寄存器,也比较好理解。

而我认为本次实验的核心在于DOS系统21H号中断,即字符功能调用类(Character-Oriented Function)09H号功能,输出一个字符串到标准输出设备上,如果输出操作被重定向,那么将无法判断磁盘已满;入口参数为AH=09H,DS:DX=待输出字符的地址,待显示的字符串以’$’作为其结束标志,无出口参数。此外,在GETNUM子程序中,如何判断输入的字符是回车、空格、数字09、字母af、A~F整个过程相对来说比较复杂,其中使用的判断语句和跳转语句较多,需要静下心来慢慢梳理程序执行流程。

最后

以上就是喜悦康乃馨为你收集整理的微机原理实验3:键盘输入与显示实验一、实验目的二、实验内容三、程序清单五、实验结果分析的全部内容,希望文章能够帮你解决微机原理实验3:键盘输入与显示实验一、实验目的二、实验内容三、程序清单五、实验结果分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(88)

评论列表共有 0 条评论

立即
投稿
返回
顶部