四川大学微机原理实验报告..
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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等),所有数据结果能清晰地显示在电脑屏幕上。
二.程序流程图