实验1(显示程序实验).doc
《实验1(显示程序实验).doc》由会员分享,可在线阅读,更多相关《实验1(显示程序实验).doc(3页珍藏版)》请在冰点文库上搜索。
![实验1(显示程序实验).doc](https://file1.bingdoc.com/fileroot1/2023-5/7/0c2b99f3-ff38-4be5-baf7-6f68ff83d121/0c2b99f3-ff38-4be5-baf7-6f68ff83d1211.gif)
实验1:
显示程序实验
一、实验目的
1、掌握在PC机上以16进制数据形式显示数据的方法。
2、掌握部分DOS功能调用的使用方法。
3、熟悉TDDEBUG集成软件的使用。
二、实验原理分析
一般来说,从键盘上输入的数都是以ASCII码的形式存放在内存中。
另外,数据区中以字符形式定义的数(用单引号括起来的数),在内存中也是以其对应的ASCII码存放的。
1、数据显示
输入到内存的数据或字符是以ASCII码形式保存,若再显示在屏幕上,则还原成源数据或字符。
例如:
数字“7”,存放在内存中是“37H”(即:
7的16进制ASCII码),直接显示在屏幕上时也是数字“7”(一般通过DOS功能调用)。
数字型数据“0~9”转换成ASCII码后,对应的16进制值分别为“30H~39H”。
字符型数据“A~Z”转换成ASCII码后,对应的16进制值分别为“41H~5AH”;字符型数据“a~z”转换成ASCII码后,对应的16进制值分别为“61H~7AH”。
从转换后的16进制ASCII码值来分析,16进制值的“0~9”可以视为对应的ASCII码值“30H~39H”减去30H后得到;16进制值的“A~F”可以视为对应的ASCII码值“41H~46H”37H(减去30H、再减去7H)后得到。
即:
0H=30H﹣30HAH=41H﹣37H
1H=31H﹣30HBH=42H﹣37H
2H=32H﹣30HCH=43H﹣37H
DH=44H﹣37H
EH=45H﹣37H
FH=46H﹣37H
8H=38H﹣30H
9H=39H﹣30H
换句话说:
如果内存中存放的是任一ASCII码值,则显示在屏幕后就是其对应的字符值。
2、关于DOS功能调用
微机系统中的系统软件为用户提供了多种功能调用服务,即用户在进行汇编程序设计时,无需再对这些功能进行汇编编程设计,而直接在自己的用户程序中来调用这些功能程序。
一般有二种功能调用,
(1)DOS功能调用,也称高级调用;
(2)BIOS功能调用,也称低级调用。
用户程序在调用这些功能服务程序时,使用软中断指令:
“INTn”。
所有DOS系统功能调用使用软中断指令“INT21H”来实现,即:
MOVAH[];[]为功能号
INT21H
(1)键盘输入
从键盘上输入的所有内容都作为ASCII字符对待(控制键除外)。
①进行单字符输入时,使用1、7和8功能号。
其中7、8号无回显功能;1号有回显功能(即键盘输入的内容同时也显示在屏幕上)。
MOVAH,1
INT21H
②进行字符串输入时,使用0AH功能号。
MOVAH,0A
INT21H
(2)显示器输出
要将一个字符串送到显示器显示,可调用DOS功能的2、6、9号功能实现。
其中,功能2、6用于显示单个字符,功能9显示一个字符串。
例如:
MOVDL,<要显示的字符>;要显示的字符必须放在DL中
MOVAH,2;功能号送AH
INT21;执行系统功能调用
(3)返回到DOS
程序执行完后将控制权交给DOS系统,称为返回DOS。
使用如下程序段:
MOVAH,4CH;功能号送AH
INT21H;返回DOS
三、实验内容说明
一般来说,很多程序需要显示运行状态和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求编写程序,其功能是将指定数据区的数据以十六进制形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中的数据主要是指字符型的数据(如“A、B、…Z”或“a、b、…z”)和数值型的数据(如“0、1、…9”)等。
这些数据可以通过键盘输入,也可以在数据区中定义,但在内存中均以对应的ASCII码存放,送到屏幕显示后就还原为原数据字符。
例如:
“7”存入内存后为“37H”,送屏幕显示时还原为“7”;
“A”存入内存后为“41H”,送屏幕显示时还原为“A”;
“ab…”存入内存后为“61H、62H…”,送屏幕显示时还原为“ab…”。
1、实验分析提示:
本实验要求数据存入内存后在送屏幕显示时,显示其对应的16进制的ASCII码值。
即,数据“7”存入内存后,送屏幕显示时应显示“37”;
数据“A”存入内存后,送屏幕显示时应显示“41”;
数据“ab…”存入内存后,送屏幕显示时应显示“6162…”。
数据写入内存后,其ASCII码值为8位二进制值(也可以2位16进制值表示),可以分为高4位和低4位二个部分。
通过编写程序,如果能实现在屏幕上先显示数据的ASCII码高4位的16进制值,再显示数据的ASCII码低4位的16进制值,就能达到实验的目的。
如:
“7”,对应二进制ASCII码值为01100111B,高4位为0110,低4位为0111。
(或“7”,对应16进制ASCII码值为37H,高4位为3,低4位为7)。
任何一个数据的ASCII码高4位(或低4位)的16进制值范围为“0~F”,
显示“0~9”值时,在内存中存放“30H~39H”的ASCII码值。
显示“A、B、C、D、E、F”等值时,在内存中存放“41H、42H、43H、44H、45H、46H”的ASCII码值。
2、程序编写提示:
任何数据写入内存后,先分别取其对应的ASCII高4位和低4位的16进制值
(1)若所取的值在0~9的范围时,将该值加上30H。
即:
取值“0”,对应0H+30H=30H;
取值“1”,对应1H+30H=31H;
…
取值“9”,对应9H+30H=39H;
再存入内存中,然后送屏幕显示。
(2)若所取的值在A~F的范围时,将该值先加7D,再加30H。
即:
取值“A”,对应(10+7)D=17D=11H,11H+30H=41H;
取值“B”,对应(11+7)D=18D=12H,12H+30H=42H;
…
取值“F”,对应(15+7)D=22D=16H,16H+30H=46H;
再存入内存中,然后送屏幕显示。
3、实验参考流程图
见实验指导书P35页图3-1-1,显示程序实验流程图。