北邮微机原理实验报告

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

微原软件实验报告

班级:

序号:

学号:

姓名:

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

一.实验目的:

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

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

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

二.实验内容:

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

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

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

三.预习题:

1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在

屏幕上显示出来?

答:0—9对应的ASCII码是30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,将十进制数转换成相应的ASCII码并调用字符显示功能即能实现十进制数在屏幕上的显示。

2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?

答:将该数与0字符(ASCII码为30H)比较,根据比较的结果转入不同的分支。四.流程图:

开始

初始化CX,BX,AH,DH,

DL

[BX] 0?[BX]=0?

DH++

DH 记录等于

零的个数

BX++BX++CX--

AH++

AH 记录小于

零的个数

DL++

DL 记录大于

零的个数

CX 0?将AH,DH,DL 中的数转成ASCII 码并存

显示

结束

YES YES NO

YES

NO NO CX 是待处理的数的

个数,BX 是这串数

的首地址

五.代码:

六.运行结果:

七.总结:

第一次在DOS窗口下用汇编编程,一些基本的操作和以前的高级语言迥然不同,如建立文件,编译,链接,调试,这些操作都是要在DOS窗口中键入语言指令来完成的,不像高级语言的编译器只要按下相关的键就好了,用语言指令能更加明白编译,调试这些操作真正的含义。

更重要的是调试指令,通过这些指令,可以直接看到寄存器,内存中真真切切的变化,对硬件的工作机制特别是cpu的指令运行,内存的数据存储与读取,整个程序运行的本质过程有了更加透彻的了解和认识。

在本次实验中,主要对顺序结构,分支结构以及循环结构有了初步的运用,程序编写的关键是流程图,当对题目有了分析并且设计出了条理清晰,步骤较为详细的流程图之后,只要对照图写就很快:顺序执行下来的地方用顺序结构,有判断的地方用分支结构,有循环执行的地方用循环结构,整个程序的框架就构建完成,剩下的就是变量、寄存器以及内存空间的读写了。

实验三代码转换程序设计

一.实验目的:

1.掌握几种最基本的代码转换方法;

2.运用子程序进行程序设计.

二.实验内容:

1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.

2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.

3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.

4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.

三.预习题:

1.如何将输入的两个字符(0 -- 9)变为十进制或二进制数?

答:因为输入的字符是以ASCCII码(8位二进制)表示的,所以分别对两个字符做减30H 的操作,再将先输入的字符作为十位,后输入的字符为个位即可得到相应十进制的二位数。

2.如何将选出的最小值(二进制或十进制)变为ASCII 码再进行显示?

答:将选出的十进制最小值加上30H即变成了对应的ASCII码,将这个值的十位和个位先后存储在DL中,先后两次使用AH=02H功能输出整个两位十进制数。

但是其实在数的存储和输出时不需要进行ASCII码与十进制数的转换,直接对ASII码的大小比较即可。

3.你觉得采用二进制运算还是十进制运算更适合于这个实验?

答:正如上面题中所说,直接用二进制运算对于这个实验来说更加方便和简单。四.流程图:

开始

输入二位数的十位

将键盘输入的数存入BH 是否在0~9?

YES

输入二位数的个位

是否在0~9?

将键盘输入的数存入BL 按下回车?

比较最后输入的二位数与MIN 的大

BX MIN?将MIN 中的数打印显示NO

更新MIN 的值即MIN=BX

结束

NO

提示输入错

NO

按下空格?

比较BX 与MIN 的大小

BX MIN ?

更新MIN 的值即MIN=BX

NO

NO

YES

NO

YES

YES

YES

YES

五.模块层次图:

输入模块

检验模块

显示模块

比较模块

主程序循环

七.运行结果:

结果说明:第一次运行,输入正确,按下回车就会显示输入数字中的最小值。

第二次运行,输入了不是0~9的字符$则提示输入错误,重新输入,再次输入时输入了一个三位数,又会提示输入错误。

八.总结:

本次实验和上个实验一样还是要比较数之间的大小关系,只不过这次要求更高:待比较的对象都是从键盘输入,且每次的比较的两个对象不是固定的,比较完成后需要

将比较的两个对象之一写入固定的变量中。

分析完程序要求后还是写流程图,写的过程中就会发现功能其实是要多次调用的,如输入模块,检验模块。比较大小及更新最小值的部分在一次循环中只需要执行一次,

可以不用子程序的形式,不过为了程序看起来更加有层次感和模块化,我将比

较和显示也分别写成了子程序的形式,这样主程序看起来就更加简洁明了。这次对子程序的使用让我更加清楚了子程序的实质,其实它就是一段在别处封装好的具有一定功能实现的代码段,当call它的时候就转到子程序所在的地址执行,遇到

RET时再返回到调用的断点处,这是与转移指令有本质区别的地方,转移指令

是“一去不回”,而子程序是“有去有回”。

实验四子程序设计

相关文档
最新文档