从键盘输入数据并显示实验报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从键盘输入数据并显示实验报告

一、实验目的与内容

1、实验目的

掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。

2、实验内容

编写程序,将键盘接收到的四位十六进制数按“Enter”回车键转化为二进制数,再显示在屏幕上, 按“空格键”结束!。若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。

二、实验设备(环境)

1、实验设备(含芯片名称、功能简介)

微型计算机一台

2、实验环境

TPC-ZK-II集成环境

3、使用语言

汇编语言

三、实验原理(实验所用到的知识点及相关内容)

1.在TPC-ZK-II集成环境下输入汇编程序,编译、连接,生成.exe文件。

2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。

3.输入不同的数据,可得到不同的结果。

4、参考流程图

四、实验步骤(包括步骤、代码、实验截图及其必要说明)

编写程序,将键盘接收到的 4 位 16 进制数转换为等值的二进制数,再显示在荧光屏上。

分析:整个程序分为 3 个部分:键盘输入、转换、显示,可以分别用子程序来完成。

1. 输入。输入可以利用字符串输入。这时需要在主程序中先开辟一段输入缓冲区。

字符串输入 ( 0AH 功能 ),入口参数 DS : DX = 缓冲区的首地址,( DS :DX ) = 限制最多输入的字符数,功能号 AH = 0AH,类型号 21H。

出口参数 ( DS : DX+1 ) =实际键入的字符 ( 不含回车符 ),从( DS : DX+2 ) 开始顺序存放键入的字符串,回车符 0DH为串尾最后一字符。

实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。

注意事项:应按要求先定义缓冲区,再调用。

数据缓冲区的设置如下:

DATA SEGMENT ; 定义缓冲区

MARK DB ?

MESS DB 'input:$' ;输入字符串提示

ERROR DB 0DH,0AH,'input error!',0DH,0AH,'$' ;输入错误提示

DATA ENDS

从键盘输入‘ ABCD ’, 回车,内存的存放结果 :

子程序如下:

INPUT PROC

LEA DX, stri

MOV AH, 09H ; 调显示功能

INT 21H

LEA DX , max

MOV AH , 0AH

INT 21H ; 调 0A输入功能

RET

INPUT ENDP

2. 转换。由于在缓冲区中存放的是输入字符的 ASCII 码,比如

1→31H, A→41H ,a→61H,所以首先需要将它们转换成对应的数字的大小。

如何转换?

数字和字母的 ASCII 码是一个有序序列,数字 0~9 : 30H ~ 39H,大写字母 A~Z : 41H ~ 5AH,小写字母 a~z : 61H ~ 7AH。对于每个字符,先减去 30H,数字 0~9 就转换完了;如果判断是否大于

09H,是则减去 07H,大写字母 A~F转换完毕,如果是小写字母 a~f,还要减去20H。利用一个循环就可以将 4 个字符转换成相应的二进制数。

现在,在数据缓冲区中存放的是输入的 16进制数每一位的值,占用了 4 个字节,每个字节只用到低四位。如:输入为 ABCD,则缓冲区中存放的是: 0AH,0BH,0CH,0DH。实验要求将输入的 4 位 16 进制数转换成等值的二进制数,也就是一个字,所以还要将这 4 个字节进行组合。

组合方法如下:

将DX左移四位,腾出第四位的空间存放一位十六进制数,将此过程循环四次,就可将输入的四个十六进制数全部存放到DX中。程序如下:

MOV CL,04H

SHL DX,CL ;左移四位,第四位0补齐

XOR AH,AH ;AH清零

ADD DX,AX ;把输入的数据放入DX中

3. 显示。用“以二进制的形式显示 BX寄存器的内容”程序段来实现。程序如下:

MOV BX,DX ;把DX的数据放入BX中

SHOW: ROL BX,1 ;循环左移一位

MOV DL,BL

AND DL,01H ;屏蔽掉高7位

ADD DL,30H ;将二进制码转换为ASCLL码输出(按ASCLL码进行输出的)

MOV AH,02H ;字符数出

INT 21H ;显示二进制对应的ASCLL字符

LOOP SHOW

完整代码如下:

CRLF MACRO

MOV AH,02H ;显示器输出

MOV DL,0DH ;换行

INT 21H

MOV AH,02H

MOV DL,0AH ;回车

INT 21H

ENDM

DATA SEGMENT

MARK DB ?

MESS DB 'input:$'

ERROR DB 0DH,0AH,'input error!',0DH,0AH,'$'

DATA ENDS

STACK1 SEGMENT

STA DW 32 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1

START: MOV AX,DATA

MOV DS,AX

HEAD: CRLF ;输出换行回车

MOV MARK,0

MOV AH,09H ;字符串显示

LEA DX,MESS

INT 21H

CALL GETNUM

CMP MARK,01H

JE HEAD ;输入错误,跳转到HEAD重新输入

MOV CX,0010H ;循环次数为16

MOV BX,DX ;把DX的数据放入BX中

SHOW: ROL BX,1 ;循环左移一位

MOV DL,BL

AND DL,01H ;屏蔽掉高7位

ADD DL,30H ;将二进制码转换为ASCLL码输出(按ASCLL进行输出的) MOV AH,02H ;字符数出

INT 21H ;显示二进制对应的ASCLL字符

LOOP SHOW

JMP HEAD

FINI: MOV AX,4C00H ;终止当前程序,返回调用程序

INT 21H

GETNUM PROC NEAR

XOR DX,DX ;清零

GO: MOV AH,01H

INT 21H ;键盘输入

CMP AL,0DH

JE HCHH ;输入为回车,则进行转换

CMP AL,20H

相关文档
最新文档