微机原理实验3:键盘输入与显示实验

一、实验目的

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

二、实验内容

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

三、程序清单

CRLF    MACRO                           ;建立宏命令,利用INT中断实现回车换行的功能,方便后续直接调用MOV     DL,0DHMOV     AH,02HINT     21H                     ;光标移到第一列MOV     DL,0AHMOV     AH,02HINT     21H                     ;光标移到下一行
ENDMDATA    SEGMENT
MESS    DB      'INPUT HEXNUMBER: $'
ERROR   DB      'INPUT ERROR!',0DH,0AH,'$'
DATA    ENDSSTACK   SEGMENT STACK                   ;栈定义
STA     DB      32 DUP (?)
TOP     DW      ?
STACK   ENDSCODE    SEGMENTASSUME  CS:CODE,DS:DATA,SS:STACK,ES:DATASTART:  MOV     AX,DATA                 ;寄存器和栈初始化MOV     DS,AXMOV     ES,AXMOV     AX,STACKMOV     SS,AXMOV     AX,TOPMOV     SP,AXMOV     AH,09H                  ;9号功能显示字符串以’$’作为其结束标志MOV     DX,OFFSET MESSINT     21H                     ;调用DOS第21H号中断09H号功能显示请输入的提示信息CALL    GETNUM                  ;调键盘输入数据子程序(数据存在DX中)MOV     CX,16                   ;循环次数(二进制位数)MOV     BX,DX
TTT:    ROL     BX,01                   ;循环左移移位MOV     DL,BLAND     DL,01H                  ;屏蔽高 7 位ADD     DL,30HMOV     AH,02HINT     21H                     ;显示某位二进制数LOOP    TTTMOV     AX,4C00HINT     21HGETNUM  PROC    NEAR                    ;键盘接收子程序,数值存DX中XOR     AX,AX
GGG:    MOV     AH,01H;输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。;该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾;AH=01H,过滤掉控制字符,并回显INT     21H                     ;键盘接收键盘码CMP     AL,0DH                  ;判回车键JZ      PPPCMP     AL,20H                  ;判空格键JZ      PPPCMP     AL,30HJB      KKKSUB     AL,30HCMP     AL,0AH                  ;判 0 - 9 数字键JB      GETSCMP     AL,11HJB      KKKSUB     AL,07HCMP     AL,0FH                  ;判 A - F 字母键JBE     GETSCMP     AL,2AHJB      KKKCMP     AL,2FH                  ;判 a - f 字母键JA      KKKSUB     AL,20H
GETS:   MOV     CL,04HSHL     DX,CLADD     DL,AL                   ;十六进制数存 DX 中JMP     GGG
KKK:    PUSH    DXMOV     AH,09MOV     DX,OFFSET ERRORINT     21H                     ;显示输入错误提示信息POP     DX
PPP:    PUSH    DXCRLFPOP     DXRET
GETNUM  ENDP
CODE    ENDSEND     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整个过程相对来说比较复杂,其中使用的判断语句和跳转语句较多,需要静下心来慢慢梳理程序执行流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaWeb】HTTP协议请求响应全解

文章目录一、HTTP简介二、请求报文三、请求方式四、媒体类型五、响应报文一、HTTP简介 HTTP:Hyper Text Transfer Protocol 超文本传输协议。HTTP最大的作用就是确定了请求和响应数据的格式。浏览器发送给服务器的数据:请求报文;服务器返回给…

java heroku_Neo4j Java Rest绑定入门(Heroku部署)

java heroku信不信由你,最近几天是我第一次尝试使用Neo4j的Java Rest Binding 。 我先前在Heroku上的Flavorwocky应用程序使用了Grails Neo4j插件以及其他一些东西,包括工作,嵌入式Neo4j规则。 但是,嵌入式在部署到Heroku时不会起…

【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

文章目录一、Servlet 概述二、Servlet HelloWorld三、Servlet 继承关系四、Servlet 生命周期五、ServletConfig 和 ServletContext六、请求转发与重定向七、获取请求参数一、Servlet 概述 1、Servlet名字 Servlet Server applet Server:服务器 applet:…

微机原理实验4:统计学生成绩

一、实验目的 掌握比较综合性的汇编程序设计流程,以及多分支情况下程序的设计技巧。 二、实验内容 设计程序统计学生数学成绩。分别归类90-99分、80-89分、70-79分、60-69分及60分以下,并将各段的人数及成绩存入对应的内存单元中,并在屏幕…

Spring Boot的Spring Data JPA示例

1.简介 在本文中,我们将演示如何利用功能强大的Spring Data JPA API与本课程中的数据库(内存中的H2数据库)进行交互。 Spring Data JPA提供了一组非常强大且高度抽象的接口,用于与任何基础数据库进行交互。 数据库可以是MySQL&am…

C语言实现01字符转比特流

记一个小功能的实现过程,程序中在循环体里使用语句 int num fwrite(&wrByte,1,i/8,pfw);代替了判断语句,不知道是判断每够8比特写入一次的效率高还是直接用上面的语句效率高,有待验证。 int main(int argc, char** argv) {FILE* pfrNU…

为什么写路径这事有点复杂?动态Web工程内编写路径【JavaWeb】

文章目录一、为什么要写路径?二、为什么写路径这事有点复杂?三、准则四、写路径的步骤五、动态获取上下文路径一、为什么要写路径? 整个系统要根据功能拆分成许许多多独立的资源资源之间既要完成自身的功能又要和其他资源配合写路径就是为了从…

Windows编程初步(一)

第一节:安装帮助文档 使用C语言进行Windows开发,必然使用到WindowsSDK。Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集。里面提供的工具异常全面丰富,很少有人能全部了解,在开发Wi…

2022大学生免费(24元)申请个人软著专利(微信小程序)

文章目录一、发放的软著证书二、申请流程概览三、官网提交申请四、纸质材料打印五、纸质材料邮寄六、模板及代码统计工具点击查看《再易江南》微信小程序 一、发放的软著证书 挂号信封 软著证书 点击查看《再易江南》微信小程序 二、申请流程概览 一般情况下,按照文…

微信小程序错误 Cloud API isn‘t enabled, please call wx.cloud.init first 解决

Cloud API isnt enabled, please call wx.cloud.init first 这个错误的意思就是云环境还没有初始化就调用其它的云api了,因此需要先初始化,也就是让我们先 wx.cloud.init() 进行初始化,最简单的办法就是直接在最前面初始化,代码如…

Windows编程初步(二)

第二节:简单的Windows程序(二) 下面为这个程序增加一个菜单项: 首先设计用户菜单。在工作区里找到资源视图。点击Menu左边的号,双击出现的IDC_WIN_STEP1菜单。 图7 资源视图中的菜单 将help右边的虚框拖入左侧File菜…

kryo java_优化Java序列化– Java,XML,JSON,Kryo,POF

kryo java也许我很天真,但是我一直认为Java序列化肯定是将Java对象序列化为二进制形式的最快,最有效的方法。 毕竟Java是第7个主要发行版,所以这不是新技术,而且由于每个JDK似乎都比上一个快,因此我错误地认为序列化现…

Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3

题目描述: 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 能被5整除的数字中所有偶数的和; A2 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2n3-n4…; A3 被5除后…

Windows编程之互动与动画

第五节: 考虑屏幕左侧一台坦克,向水平方向发射一枚炮弹,穿越屏幕。 很自然地,这场景中有坦克和炮弹两个对象,各自有各自坐标,坦克坐标是固定的,而炮弹坐标是变化的。因此有两个结构体类型:Tank…

创新设计模式:工厂模式

以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族。 下一个模式是Factory模式 。 当涉及到Java时,工厂模式是最常用的模式之一。 那么,工厂模式到底是什么呢? 工厂模式处理创建对象而未指定确切的类或…

Java福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb shgsfdk dHyscvnm”。大侦探很快就明白了

题目描述: 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面…

Windows编程之网络之邮件槽通讯

第6节 使用邮件槽传输数据 网络通讯的理论很复杂,可是初学者不考虑性能的话,可以使用很简单的模式。一般而言网络通讯有两种模式,点对点模式或者广播模式。点对点模式就像一对一辅导,双方都能听清楚对方说什么,并作出…

java 批量处理 示例_Java异常处理教程(包含示例和最佳实践)

java 批量处理 示例异常是可能在程序执行期间发生的错误事件,它会破坏其正常流程。 Java提供了一种健壮且面向对象的方式来处理异常情况,称为Java异常处理 。 我们将在本教程中研究以下主题。 Java异常处理概述 异常处理关键字 异常层次 有用的异常方…

Java德才论宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之 小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若

题目描述: 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之&#xff0c…

Windows编程之多媒体

一、语音接口的使用: 第一步,安装MSSpeech SDK。 MSSpeech SDK可从网络课堂安装,也可在微软公司直接下载,安装完毕后具有了语音处理能力。 安装过程全选默认即可。 安装完毕后,在开始菜单中会增加MS Speech SDK 5.1&#xff0…