北京邮电大学_微机原理软件实验报告

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

微机原理软件实验报告

学院:信息与通信工程学院班级:XXXXXX

姓名:XXXXX

学号:XXXXXXXX

班内序号:XXXXX

日期:2017年11月30日

目录

微机原理软件实验报告.................................................. 错误!未定义书签。

1. 实验一................................................................................. 错误!未定义书签。

2. 实验二 (7)

3. 实验三 (13)

4. 实验四 (20)

5. 实验五 (30)

6. 总结及结论 (39)

7. 参考文献 (39)

实验一DEBUG的使用

一、实验目的:

1.掌握汇编程序的编辑,编译,连接和执行的全过程;

2.学习和掌握用DEBUG调试程序的方法.

二、实验内容:

2.通过编译,连接形成可执行文件。

3.用DEBUG 将可执行文件调入,并进行调试。

(1)用D 命令观察数据区在内存中的具体内容,记录单元A 和B 的具体地址。

(2)用U 命令对目标代码反汇编,观察反汇编后的结果.注意发现源程序的起始

位置, 并记录这个起始地址。

(3)用T 命令作单步跟踪调试.比较每条指令执行后的结果和原来的理解是否

一致。得出程序运行的结果:它们是写在什么单元,具体内容是什么; 并判断结果是

否正确。

(4)用E 命令修改单元A,B 的内容,重新执行程序,并记录结果。

(5)退出DEBUG。

三、预习题:

1.熟悉常用的DEBUG 命令。

2.阅读并分析程序的功能。

答:程序实现了(A+B)^2的功能。

3.若SS=2000H,SP=FFFFH, 向堆栈中压入4 字节数据后,如何用D 命令显示压入

堆栈的内容?

答:使用指令“d 2000:0000”即可显示压入堆栈的内容,因为SP+1 会溢出,所以变成0000。

四、实验过程

a.

通过masm和link命令使得程序编译链接成功。

b.

进入debug中,用u命令查看反编译结果。得出A的地址为:076A:0000,值为14H,即十进制的20D;B的地址为:076A:0001,值为0FH,即十进制的15D。

Y的偏移地址为0002H,Z的偏移地址为0005H。DATA段基地址为076AH。SUB1子程序段入口地址为003F。

c.

用e命令将A地址和B地址内的值由2AH,32H改为23H,24H,通过d命令重新查看A地址,B地址下的数值,发现改变成功。

d.

利用t命令单步调试,可发现,每一步程序的执行,会与寄存器及存储器的内容的变化是一致的。

e.

退出debug。

五、实验总结

由于之前上《操作系统》时,零散地学过一些汇编相关的内容,所以关于masm、debug 的基本指令的使用还是比较熟悉的,在做实验一的整个过程中也是比较轻松。也希望自己能保持着这种轻松的状态去应对接下来的实验!

实验二分支、循环程序设计

一、实验目的

1.开始独立进行汇编语言程序设计;

2.掌握基本分支,循环程序设计;

3.掌握最简单的DOS 功能调用。

二、实验内容

1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(选做题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。

三、预习题

1.十进制数0 ~ 9 所对应的ASCII 码是什么?如何将十进制数0 ~ 9 在屏幕上显示出来?

答:0~9分别对应ASCII码的30H~39H。因为屏幕上显示的数字是ASCII码,所以为了将十进制数0~9显示在屏幕上,需在原有的十进制数值基础上加上30H即可。

2.如何检验一个数为正,为负或为零?

答:本实验中,判断正、负或零是直接用CMP命令和0比较,然后用je、jg、jl等命令进行判断为正、负或零。

四、实验流程图

五、实验源代码

六、实验过程及解释

本次实验要求统计数据区内正奇数、正偶数、负奇数、负偶数、零的个数,首先将数据区的数值与0比较,按数字的正、负或零的特性分别跳转至处理正数的子程序段、处理负数

的子程序段、处理零的子程序段。其中,在处理正、负数的子程序段,对于正负数进行带符号的除二运算,通过判别余数是否为零判别该数是偶数还是奇数,并且判别后将各个对应的正奇数、正偶数、负奇数、负偶数、零的个数进行统计。程序在统计完所有类型的数的个数后,会向显存中写入数字,将统计好的数值以可视化形式呈现出来。

编译运行程序结果如下:

a.

通过masm和link命令使得程序编译链接成功。

b.

由运行结果可看到与数据区设置的正奇数、正偶数、负奇数、负偶数、零的个数一致。

七、实验总结

这次实验相较于第一次实验而言,程序需要自己独立设计并且首次涉及到了向屏幕打印数据的程序编写。为了充分理解向屏幕打印数据的细节方面,我没有选择中断的调用去打印数据,而是自己往显存中直接写入数据并且在屏幕上呈现。为了编程实现字符向屏幕端的打印,我需要理解显存的数据存储,如一个ASCII码在屏幕端的显示需要两个字节,屏幕通常一行是显示80个字符,也即一行对应160个字节,同时要使得数据呈现时比较美观,还需要自己设计换行等数值的运算,这些都花了我很多时间去调试,不过这也使得我更完整地理解了显存的工作原理,为之后实验打下了基础。

相关文档
最新文档