微机原理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大学
科技学院
实
验
报
告
课程名称:微机原理实验
实验一数据转换实验
一、实验目的
(1)初步掌握在PC机上建立、汇编、链接和运行8086/88汇编语言程序的过程。
(2)通过对两个验证性试验的阅读、调试、掌握不同进制数及编码相互转换的程序设计方法。
(3)完成程序设计题,加深对数码转换的理解,了解简单程序设计方法。
二、实验内容
1.十六进制数转换为ASCII码
设二字节十六进制数存放于其实地址为3500H的内存单元中,把他们转换成ASCII码后,再分别存入起始地址为350A的四个内存单元中。从书上ASCII码表中可知十六进制数加30H即可得到0H~9H的ASCII码,而要得到AH~FH 的ASCII码,则需再加7H。
请根据所给流程图理清思路,总结出对应的若干要点。将流程图与参考程序相互。根据分析的结果将运行时内存的变化列写出来。
学习并使用MASM或WAVE仿真软件分析程序运行过程中相关寄存器及相应内存的变化情况来验证自己的猜想,以巩固命令的学习,提高编程能力。
图1-1-1
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV CX,0004H;根据转换个数设定循环次数
;(两字节十六进制数如6B2C对应有四个用十六进制表示的ASCII码表示,即四个字节)
MOV DI,3500H;指向该两字节十六进制数起始地址,此时在调试窗口修改内存字节
MOV DX,[DI];将地址3500H中的内容(6B2C)给DX
A1: MOV AX,DX;第一次时DX=6B2C,
;因为想顺序取C、2、6、B,所以需要一个中间变量AND AX,000FH;取低四位,第一次取到C,
CMP AL,0AH;判断AL属于0~9,还是A~F
JB A2;如果是0~9,则跳转到A2
ADD AL,07H;若属于A~F,再加上07H后也是再加上30H即得到转换。
A2: ADD AL,30H;0~9的ASCII码对应的十六进制比其
;本身(注意:亦是十六进制)大30H
MOV [DI+0AH],AL;将转码后的C,即43H给350A
INC DI;将DI指向下一字节,用于存储转码后的值,第一次自增后要存‘2’
PUSH CX;功能是接下来要用到CX作为一个中间变量,
;而刚才已经使用并且接下来还会用到CX的值,
;也可以不用CX,用其他不用的寄存器或者直接立即数形式的。
MOV CL,04H;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。
SHR DX,CL;右移四位,如第一次转码后,DX=6B2C,
;为下一次取低四位的2做好前提,将0010b移到低四位POP CX;执行完后,CX又用于计数
LOOP A1;每一次转码后,执行完此句后,CX的值都要变化,
;分别是3,2,1,0;正好四次。
MOV AH,4CH
INT 21H
CODES ENDS
END START
1.3 实验过程与心得
1.3.1 编程要点
1.数据在内存空间中的存储情况要清晰;
图1-1-2 图1-1-3
如上图所示图1-2为处理前的存储情况,通过调试中的内存修改来实现并检查,图1-3为最后期待的转码结果,通过查询内存来检查。
2.基本功能的实现:分两种情况去转码。
中间涉及到比较选择语句,可以通过标志位来理解学习JB的实现条件是由于标志位的变化。
3.取与存两个“指针”的变化
(1)取时通过一个中间变量取经过右移四位后的低字节来依次选择C、2、B、6;使用软件时,看AX经过“AND AX,000FH”后是否取到了这些数。
(2)每一次转码后存储时将指针在存储空间305A不断移动。每次存储后,可查询内存。
(3)每一次循环过后,CX都要变化,也可同时学习PUSH、POP 功能。
1.3.2 软件使用简介
1.W A VE软件
它可以将内存的变化及寄存器的变化实时展示出来,红色数据是新变化的值。
查找内存时可通过右键转到地址即可,但需要输入物理地址。如此时偏移地址为3500H,而通过观察DI赋值前一状态ds为20H,则通过计算可知在3700H输入2C,3701H输入6B即可,双击修改。可以与硬件连接做接口实验,但没有人机对话功能。
在使用之前需要建立新项目。过程简介如下:选择8086仿真--右击模块文件--新建项目--假如已编ASM文件(最好一个文件夹中)--保存项目--全部编译--单步执行(F8)--观查内存变化。
2.MASM软件
它可以通过DEBUG调试窗口来进行观察,但需要有不同的命令输入去修改内存,查询内存,并且更新情况也不如W A VE直白,若有其他未考虑的某值变化,不宜观测。单步跟踪(“t”)是先执行上
一条语句,并显示执行后的状态,即显示上一语句执行后的状态。而末尾的命令语句还未执行。
它不需要计算物理地址。如找3500H时,直接输入“d ds:3500”即可查询。另外,标志位的查询尽管每次单步跟踪都显示,但是需要先记住各个符号代表的意思。修改内存较W A VE繁琐,需要输入e 3500,然后会提示修改,但一次只能改一个字节的内容。其余命令可以在左侧DEBUG调试里双击在右侧得到。另外,状态的显示没有记录。
MASM有人机对话功能,但在使用时,无法调试查看内存变化。
过程简介:编程--保存(.asm)--编译成目标文件--生成可执行文件--DEBUG调试。
1.3.3 使用过程
1.将二字节十六进制数存放于起始地址为3500H的内存单元中
图1-1-4