微机原理实验指导书

更新时间:2023-11-08 08:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

辽东学院自编教材

微机原理 实验指导书

蔡杰 编

(电子信息工程专业用)

信息技术学院 2012.6

内容提要

本实验指导书包括汇编语言的软件设计实验。共安排七个实验,内容涉及8086/8088寻址方式和指令系统练习、顺序、分支、循环三种结构的程序实现,DOS功能调用等。

前 言

本实验指导书注重理论联系实际,培养学生解决实际问题的能力,达到学以致用,为今后的专业课程的学习打下坚实的基础。在编写中难免有不当之处,恳请各位学者赐教,也希望各位同仁提出定贵的意见。

谢谢。

目 录

实验一实验二实验三实验四实验五实验六实验七

调试 ......................................... 1 简单汇编语言设计 ................................... 9 汇编语言程序调试 .................................. 11 计算学生平均成绩 .................................. 14 数学表达式计算 .................................... 18 查表运算 .......................................... 20 分支结构程序设计 .................................. 22 DEBUG 实验一 DEBUG 调试

实验类型: 实验课时: 指导教师: 时 间: 2012 年 月 日 课 次: 第 节 教学周次: 第 周 实验分室: 实验台号: 实 验 员:

一、 实验目的

1. 练习使用DEBUG,调试简单汇编程序。

二、 实验要求

1. 掌握DEBUG的使用,调试程序。 2. 读懂程序中各条指令,说明程序功能。

DEBUG命令是在命令提示符”_”下由键盘键入的。每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键(ENTER)。命令及参数的输入可以是大小写的结合。Crtl+Break键可中止命令的执行。Crtl+NumLoek键可暂停屏幕卷动,按任一键继续。所用的操作数均为十六进制数,不必写H。

各种DEBUG命令 1.汇编命令A

格式: (1)A<段寄存器名>:<偏移地址> (2)A <段地址>:<偏移地址> (3)A<偏移地址> (4)A

功能:汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。键人该命令后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。每当输入一行语句后按“ENTER\键,输入的语句有效。若输入的语句中有错,DEBUG会显示“^Error\,要求用户重新输入,直到显示下一地址时用户直接键入回车键返回到提示符”_”。其中(1)用指定段寄存器内容作段地址;(3)用CS内谷作段地址;(4)以cs:100作地址。以后命令中提及的各种地址形式,均指(1)、(2)、(3)中A命令后的地址形式。 2.比较命令C

1

10B INC AL 10D DEC CX 10E JNZ 108 110 INT 3

上述程序段中每行是一条指令,行首的数字表示这条指令变成机器码后存放在代码段中的段内偏移地址。这些地址是十六进制数,在DEBUG中只接收十六进制数且不用加“H”标注。指令中的其它数值也都如此。

第一条指令的段内偏移地址100H是DEBUG默认的,由于第一条指令的机器码是3字节,占3个存储单元,所以第二条指令的机器码自动从偏移地址103H开始存放,以后各条指令存放的起始地址也都在输入前一条指令后自动产生。

程序中的10E条(倒数第2条)是条件转移指令,表示若上一条指令的执行结果不为零(即CX-1≠0)则转回去执行108条。在DEBUG中转移的目标也要用偏移地址来指明,这和后面介绍的汇编语言规定不一样,正式的汇编语言中,转移目标用符号地址(例如用字母等符号代表某条指令的地址)。

最后一条指令INT3是一条中断指令,常用作程序举例的结束。CPU执行到这条指令就返回到DOS程序,现在即返回到DEBUG执行,于是用户可以用DEBUG的各种命令检查用户程序的执行结果。实验中经常用“断点”方法分段执行用户程序,就是通过INT3来实现的。

2. 用U命令对此程序作反汇编,在显示屏上逐行阅读程序,并将机器语言和助记符对照,体会机器码和指令助记符(尤其是指令中的立即数)之间的对应关系。

3. 分别用G、P及T命令执行此程序,并随时用D及R命令检查有关内存单元及寄存器内容。 4. 用W命令将程序存于磁盘。

5. 用L命令将程序取回并反汇编检查程序是否复原。

7

四、 实验结果及分析

本次 实验 成绩 项目及比例 实验操作 (50%) 报告书写 (30%) 出勤和课堂纪律 (10%) 课堂提问 (10%) 得分 成绩合计 教师签字:

批改日期: 8

实验二 简单汇编语言设计

实验类型: 实验课时: 指导教师: 时 间: 2012 年 月 日 课 次: 第 节 教学周次: 第 周 实验分室: 实验台号: 实 验 员:

一、 实验目的

1. 巩固DEBUG及宏汇编的使用。 2. 加深对指令的理解。

二、 实验要求

1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。请编一程序将AX的内容和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH、0BH、0CH、0DH、0EH。在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么? 程序清单如下: MOV AX,BX MOV AX,0304H MOV AX,[0304H] MOV AX,[BX] MOV AX,0001[BX] MOV AX,[BX][SI] MOV AX,0001[BX][SI] HLT

3.设(AX)=0002H,编一个程序段将AX的内容乘10,要求用移位的方法完成。

9

三、 思想描述

实验内容1

将两个寄存器的内容进行交换时,必须有一个中间寄存器才能进行内容的交换,如果用堆栈做为中间存储单元,必须遵循先进后出的原则。

实验内容2

1.其中数据寄存器中的段地址为进入DEBUG状态后系统自动分配的段地址。

2. SI和BX的初值 可在DEBUG状态下,用R命令装入,也可以在程序中用指令来完成。 用T命令程序执行执行,可进行单步跟踪执行,每执行一条指令就可以看到各寄存器的状态。也可用R命令直接调出寄存器,来检验各寄存器内容是否正确。

3.在执行程序前,可用E命令将偏移地址300H~304H送入0AH,0BH,0CH,0DH、0EH。

实验内容3

用移位的方法完成某些乘法运算,是较为常见的方法,操作数左作一位为操作数乘2运算。

四、 程序实现

实验操作 (50%) 报告书写 (30%) 批改日期: 出勤和课堂纪律 (10%) 课堂提问 (10%) 本次 实验 成绩 项目及比例 得分 成绩合计 教师签字: 10

实验三 汇编语言程序调试

实验类型: 实验课时: 指导教师: 时 间: 2012 年 月 日 课 次: 第 节 教学周次: 第 周 实验分室: 实验台号: 实 验 员:

一、实验目的

1. 巩固DEBUG及宏汇编的使用 2. 了解汇编语言程序上机过程。 3. 加深对运算指令的理解。

二、实验要求

1. 参照程序样例,实现简单汇编过程。 2. 使用DEBUG对程序简单调试。

三、实验内容

1. 用文本编辑工具输入下段源文件,并存入磁盘。 NAME MY_PROGRAM ;程序模块名 DATA SEGMENT ;数据段开始

BUFFER1 DB 0,1,2,3,4,5,6,7,8,9

DB 0AH,0BH,0CH,0DH,0EH,0FH

BUFFER2 DB 10H DUP(0)

MESS DB ?HAVE DONE?,13,10,?$? DATA ENDS ;数据段结束 STACK SEGMENT PARA STACK

DB 100 DUP(?)

STACK ENDS ;堆栈段结束 CODE SEGMENT ;代码段开始

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

11

START: MOV AX,DATA

MOV DS,AX ;建立用户数据段 MOV ES,AX LEA SI,BUFFER1 LEA DI,BUFFER2 MOV CX,10H

NEXT: MOV AL, [SI ]

MOV [DI ],AL INC SI INC DI DEC CX JNZ NEXT

LEA DX,MESS ;指向提示字符串 MOV AH,9 ;显示字符串的功能号 INT 21H ;DOS功能调用

MOV AH,4CH ;退出用户程序的功能号 INT 21H ;DOS功能调用 CODE ENDS ;代码段结束

END START ;整个源程序结束,并指明第一条执行语句

2. 用宏汇编软件MASM,或TASM对此程序进行汇编,产生OBJ,LST等文件。在显示屏上阅读这些文件。

3. 用连接软件LINK,或TLINK产生EXE文件。

4. 进入DEBUG,用L命令将程序装入内存,并用断点及单步等方法执行程序、观察执行结果。

12

四、实验结果及分析

项目及比例 实验操作 (50%) 报告书写 (30%) 批改日期: 出勤和课堂纪律 (10%) 课堂提问 (10%) 本次 实验 成绩 得分 成绩合计 教师签字: 13

实验四 计算学生平均成绩

实验类型: 实验课时: 指导教师: 时 间: 2012 年 月 日 课 次: 第 节 教学周次: 第 周 实验分室: 实验台号: 实 验 员:

一、实验目的

1. 2.

熟悉汇编语言程序的使用,掌握数值的四则运算方法。 掌握数据的显示输出方法。

二、实验要求

编写程序,计算20个分数的平均值,并以十进制表示将结果显示在屏幕上,显示格式的要求如下:第一行显20个分数;第二行显示AVERAGE SCORE=平均分数。

三、思想描述

1. 自己编写算法,将求得的平均分数的十进制值,转换成二进制表示。其算法是平均分数二进

制的低4位>9则加6。对于高4位,将其值乘以16再与4位十进制调整的结果相加,即得到最终结果。乘法可以用多次加法实现。

2. 显示字符串信息用DOS功能调用INT21H,功能号为09H。

3. 显示平均数结果时,用DOS功能调用INT21H,功能号为02H。每位数必须将其转换成相应的

ASCII码。

4. 参考程序流程框图

14

CL=0? Y 显示20个分数的数据 AL+16H 求20个分数的数据 DAA 求得平均分的二进制值 CL =CL-1 平均分数的低4位十进 制调整,结果送AL 显示平均分数结果 平均分数高4位=>CL 返回DOS

四、程序实现

******************************AVGSCORE.ASM****************************** DATA SEGMENT

MES1 DB 92,85,74,81,70,68,65,78,54,43 DB 94,100,83,88,79,83,79,69,62,60 MES2 DW 92,85,74,81,70,68,65,78,54,43 DW 94,100,83,88,79,83,79,69,62,60

;--------------------------------------------------------------------------- MES3 DB ?AVERAGE SCORE=?,?$? DATA ENDS

; --------------------------------------------------------------------------- CODE SEGMENT

ASSUME CS:CODE,DS:DATA

;--------------------------------------------------------------------------- START: MOV AX,DATA MOV DS,AX

MOV DX,OFFSET MES1 MOV AH,09H

15

INT 21H ;显示提示信息

;--------------------------------------------------------------------------- MOV BX,OFFSET MES2 MOV CL,20 MOV AX,0000

NEXT: ADD AX,WORD PTR[BX] ;将各分数累加求和 ADD BX,02 LOOP NEXT MOV CL,20

DIV CL ;求得平均分数和二进制值 MOV DL,AL

;--------------------------------------------------------------------------- AND AL,0F0H ;平均分数的十进制调整 MOV CL,04 ROR AL,CL

MOV CL,AL ;平均分数高四位进进制值送入CL MOV AL,DL AND AL.0FH CMP AL,09 JBE HAD

ADD AL,06 ; 平均分数的低4位十进调整 HAD: MOV BL,16H ; 平均分数高位十进制调整 NT: ADD AL,BL DAA

MOV BH,AL ;平均分数十进制值送入BH LOOP NT

;--------------------------------------------------------------------------- MOV DX,OFFSET MES3 MOV AH,09H

INT 21H ; 屏幕显示平均分数提示符 MOV AL,BH AND AL,0F0H COM CH,04 ROR AL,CH ADD AL,30H MOV DL,AL MOV AH,02

INT 21H ; 显示平均分数高位

;--------------------------------------------------------------------------- MOV AL,BH AND AL,OFH ADD AL,30H MOV DL,AL MOV AH,02

16

实验七 分支结构程序设计

实验类型: 实验课时: 指导教师: 时 间: 2012 年 月 日 课 次: 第 节 教学周次: 第 周 实验分室: 实验台号: 实 验 员:

一、实验目的

1.掌握多分支结构程序设计的方法;

2.掌握无符数和带符号数比较大小转移指令的区别。

二、实验内容

1.在数据区中定义三个带符号字节变量。 2.编写程序将其中的最大数找出送到MAX单元中。

三、思想描述

该题目要求掌握多分支程序设计方法。 为了实现指定功能,应从以下几个方面考虑: (1) 确定编程的算法思想。

(2) 确定带符号数比较大小转移应选择哪一组条件转移指令。

22

四、程序实现

实验操作 (50%) 报告书写 (30%) 批改日期: 出勤和课堂纪律 (10%) 课堂提问 (10%) 本次 实验 成绩 项目及比例 得分 成绩合计 教师签字:

23

本文来源:https://www.bwwdw.com/article/pp32.html

Top