四川大学微机原理实验报告 联系客服

发布时间 : 星期三 文章四川大学微机原理实验报告更新完毕开始阅读234a767cdd36a32d72758156

微机原理实验报告

学 院: 专业班级: 姓 名 学 号

实验一 汇编语言编程基础

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

一.功能说明

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

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

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

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

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

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

二.程序流程图

设置被除数、商的地址指针 设置单位除法次数计数器

取被除数一位作十进制调整

作字节除法、存商 N 被除数各位已除完? Y 显示运算结果

结束 三.程序代码

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

A DB 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×103+7×102+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 2 3 4 本遍排序前 第一次排序后 240,260 260,300 280,300 280,300 第二次排序后 240,260 260,300 280,300 第三次排序后 300,260 280,300 第四次排序后 260,300 300,250,280,250,300,280,250,280,300,250,280,240,250,280,240,240,260 260,300 280,300 280,300 250,280,240,250,280,240,250,240,280,250,240,260,250,240,260,250,240,260,240,250,260,240,250,260,240,250,260, 实验要求:

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

数,五个数可以有一位数,二位数,三位数,四位数,五位数,混合输入比较大小; 2. 对这组数用冒泡法进行排序,并输出原始数据及排序后数据,两两数据之间用空格分隔; 3. 利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化,以及会用调试命

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

4. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值; 5. 用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即

输出263);

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

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

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

二.程序流程图