四川大学微机原理实验报告..

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

微机原理实验报告

学院:

专业班级:

姓名

学号

实验一 汇编语言编程基础

1.3汇编语言程序上机操作和调试训练

一.功能说明

运用8086汇编语言,编辑多字节非压缩型BCD 数除法的简单程序,文件名取为*.ASM 。

运用MASM ﹒EXE 文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ 文件。

运用LINK.EXE 文件进行连接,形成*.EXE 文件。

仔细阅读和体会DEBUG 调试方法,掌握各种命令的使用方法。

运用DEBUG 。EXE 文件进行调试,使用单步执行命令—T 两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D ,观察存储器数据段内数值。

再使用连续执行命令—G ,执行程序,检查结果是否正确,若不正确可使用DEBUG 的设置断点,单步执行等功能发现错误所在并加以改正。

二.程序流程图

三.程序代码

修改后的程序代码如下: DATA SEGMENT

A D

B 9,6,8,7,5 B DB 5

C DB 5 DUP (0) N EQU 5 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX

CLD

LEA SI,A

LEA DI,C

MOV CX,N

MOV AH,0

LP1: LODSB

AAD

DIV B

STOSB

LOOP LP1

MOV CX,N

LEA DI,C

LP2: MOV DL,[DI]

ADD DL,30H

MOV AH,2

INT 21H

INC DI

LOOP LP2

MOV AH,4CH

INT 21H

CODE ENDS

END START

四.实验感想和收获

通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。

在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。

尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

实验二设计汇编语言程序

一.功能说明

练习1.实验题目:编程计算下列表达式:A=90,B=-70,C=5,Y均为有符号数,计算Y=2×(A+B)+(A×C)÷5

要编写一些稍微复杂的程序,我们会遇到一段程序被反复执行,这样,我们会用到LOOP 指令。使用该指令时,需在CX中装入循环次数。

练习2.码转换程序设计

编制程序,把十进制数15786转化成二进制数。

提示:15786=1×10×10×10×10+5×10³+7×10²+8×10+6,循环CX=5

练习3.编制程序,从键盘输入最多5个数,求他们的和,存入SUM。

练习4.用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

提示:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。

对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。每一遍的排序由若干次邻元素的排序组成。

4遍排序中,邻元素的排序依次为4,3,2,1遍。完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。

外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DEC CX)

实验要求:

1.编制程序,从键盘输入300,250,280,240,260这五个数,并思考如何输入任意五个

数,五个数可以有一位数,二位数,三位数,四位数,五位数,混合输入比较大小;

2.对这组数用冒泡法进行排序,并输出原始数据及排序后数据,两两数据之间用空格分隔;

3.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化,以及会用调试命

令查看程序运算中寄存器中的值;

4.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;

5.用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即

输出263);

6.用移位指令将平均值以二进制串的形式输出。

7.设计程序要有模块化的思想,用子程序实现不同的功能;

所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在电脑屏幕上。

二.程序流程图

相关文档
最新文档