华 北 电 力 大 学
科 技 学 院
课程名称:微机原理实验指导老师:郭学生姓名:牛玺童班 级:电气学 号:
实 验 报 告
军 11k6 111904010415
实验一 数据转换实验
一、实验目的
(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 程序流程图
开始CX? 代码长度DI ? 起始地址DX? 16进制数AX?DX取低四位0~9?N是AH~FH,再增加7HY转换为ASCII码存结果,修改地址指针DX内容右移四次NCX-1=0?Y结束图1-1-1
- 2 -
1.2 实验程序
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;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。
- 3 -
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.取与存两个“指针”的变化
- 4 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库微机原理实验报告在线全文阅读。
相关推荐: