最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

8086实验指导书免费

IT圈 admin 33浏览 0评论

2024年3月27日发(作者:泥惜筠)

实验一 系统认识实验

一、实验目的

掌握TDN86/51教学系统的基本操作

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

1. 系统认识实验〔1〕

(1) 程序的输入与修改

从3500H内存单元开始建立0-15共16个数据。

实验步骤

a. 使用串行通讯电缆将实验系统与PC微机相连。

b. 将位于线路板右下角的系统状态选择开关拨至86档,开启实验系统。

c. 在系统软件所在目录下键入MD86↙,选择对应串口号,进入集成操作软件环境,出现

系统提示符“>”。按下F1功能键,进入全屏幕编辑界面,按ALT+F建立新文件〔NEW〕,

即可开始输入源程序。实验程序及流程如下:

STACK SEGMENT STACK ;8088宏汇编程序

DW 64 DUP(?) ;定义堆栈段

STACK ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE

START: MOV DI,3500H ;程序开始设数据区首址

MOV CX,0010H ;字节数送入CX中

MOV AX,0000H

SAHF

A1: MOV [DI],AL ;写入一字节

INC DI ;修改地址指针

INC AX ;修改数据

DAA ;十进制调整

LOOP A1 ;未填完转移

A2: JMP A2

CODE ENDS ;代码段结束

END START ;程序段结束

d. 输入程序后,按F2保存程序〔规定扩展名为*.asm〕,使用ALT+X返回集成软件环境。

e. 按F2,输入源程序名↙〔省略扩展名,系统默认为.asm〕,对源程序进行汇编,生成目

标文件〔*.obj〕及错误信息文件〔*.m〕。假设给出LST文件名则生成相应*.lst文件。

f. 汇编无误后,按F3输入文件名↙对汇编生成的*.obj文件进行连接,连接信息显示于

屏幕上,生成相应*.exe可执行文件。

g. 按F5,输入*.exe可执行文件名↙,填入程序段地址CS:0000↙及偏移地址IP:2000

↙,PC开始将程序从磁盘装入到教学系统内存,提示装载完毕后使用U0000:2000↙命

令进行反汇编,检查程序是否正确装入。

显示信息

>

2000 BF0035 MOV DI,3500

2003 B91000 MOV CX,0010

键入信息

U2000

U↙

U↙

h. 当发现源程序输入错误或需要调整时,在调试界面下可用A命令来修改,如修改2000

句为MOV DI,3500的操作如下:

显示信息

>

0000:2000

0000:2003

(2) 运行程序

系统提供了单步运行、设断点运行、连续运行等方式,具体操作如下:

a. 单步运行:其操作如下表,每运行一条指令后会显示下一条待执行指令并以蓝底白字显

示变化寄存器的内容,重复T↙〔或按F4键〕就可一步一步地运行,直至程序结束。

b. 连续运行:在“>”提示符下键入G=0000:2000↙〔在系统默认段地址CS=0000情况下

也可直接键入G=2000↙〕可连续运行程序,在运行过程中,可通过CTRL+C终止程序运

行,返回监控状态;也可通过CTRL+S暂停程序运行,按任意键继续。

c. 断点运行:在程序中可用B命令定义断点,系统规定至多定义10个断点,例如:

显示信息

>

[0:]

[1:]

>

键入信息

B↙

2009

键入信息

A2000↙

MOV DI,3500

上例中定义了2009地址为断点,每次键入GB=0000:2000↙程序连续运行至断点时,程

序中断并显示当前各寄存器内容。GB是G命令的扩充,表示含断点连续运行程序,断

点仅当系统复位时清除。

(3) 内存单元内容的显示:

使用D=0000:3500↙可查看3500H-350FH单元中的内容是否为0-15共16个数。

(4) 内存单元内容的修改:

假设要修改某一单元内容,可进行如下操作,其中,“空格”键用于向待编辑单元的高

地址方向移动地址,而“-”键则向反方向移动地址;用↙来响应,就退出E命令。

显示信息

>

0000:35000 00_

0000:35001 01_

键入信息

E3500↙

01space

Space

0000:35002 02_

0000:35003 03_

>

2. 系统操作练习〔2〕

将内存3500H单元开始的0-15共16个数据传递到3600H单元开始的数据区中。实验程

序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

开始

CODE SEGMENT

设数据源地址、

ASSUME CS:CODE

目的地址、字节数

START: MOV SI,3500H ;建立源地址指针

MOV DI,3600H ;建立目标地址指针

MOV CX,0008H ;字数送入CX寄存器中

取源数据一字到AX中

A1: MOV AX,[SI] ;取源数据一字送入AX中

〔AX〕送目标地址单元

MOV [DI],AX ;将源数据送入目标地址单元中

修改指针

INC SI ;修正指针

INC SI

N

INC DI

传完否?

INC DI

Y

DEC CX ;修改循环次数

JNZ A1 ;判断是否传送完毕

停机

A2: JMP A2

CODE ENDS ;代码段结束

END START ;程序段结束

实验步骤

(1) 输入程序并检查无误,经汇编、连接后装入系统。

(2) E3500↙,在3500-350F单元中分别送入00、01、02…。

(3) G=0000:2000↙,运行以上程序,按CTRL+C中断,返回监控。

(4) D3600↙ ,显示结果:3600 00 01 02 …。

实验二 数码转换编程及程序调试

一、实验目的

1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。

2. 熟悉键盘使用方法。

3. 熟悉调试程序的方法

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

电脑输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均

用二进制进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、

BCD码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少

的。

电脑与外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。

二进制

ASCII码 ASCII码

键盘 CRT显示

ASCII码 ASCII码

光电机 打印机

BCD码 段码

拨码开关 多段显示

二进制 二进制

数据开关 位显示

图2-1 数码转换关系

表2-1 数码对应关系

十六进制

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

BCD码

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

二进制机

器码

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

ASCII码

共阳

30H

31H

32H

33H

34H

35H

36H

37H

38H

39H

41H

42H

43H

44H

45H

46H

40H

79H

24H

30H

19H

12H

02H

78H

00H

18H

08H

03H

46H

21H

06H

0EH

七段码

共阴

3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

67H

77H

7CH

39H

5EH

79H

71H

1. 将ASCII码表示的十进制数转换为二进制数

十进制表示为:

D

n

10D

n1

10

nn1

D

0

10

D

i

10

i

┅┅┅┅┅┅┅┅┅〔1〕

0

i0

n

Di代表十进制数1,2,3,┅9,0;

上式转换为:

D10

i

i0

n

i

(((

(D

n

10D

n1

)10

D

1

)10D

0

┅┅┅┅┅┅┅┅┅〔2〕

由式〔2〕可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘

10加次位的操作,依次类推,则可求出二进制数的结果。程序流程及参考程序如下:〔规定:

被转换的ASCII码十进制数存放在3500H-3504H单元中,转换结果存在于3510H-3511H单元

中。〕

STACK SEGMENT STACK

开始

DW 64 DUP(?)

STACK ENDS

定义源、目标地址

定义转换位数n

CODE SEGMENT

ASSUME CS:CODE

N-1→CX

START: MOV SI,3500H

MOV DI,3510H

取第一位ASCII码

MOV BX,000AH

MOV CX,0004H

MOV AH,00H

减去30H

MOV AL,[SI]

SUB AL,30H

乘10

A1: IMUL BX

ADD AL,[SI+01]

SUB AL,30H

加一位ASCII码减30H

INC SI

LOOP A1

N

MOV [DI],AX

传完否?

A2: JMP A2

Y

CODE ENDS

存结果并停机

END START

实验步骤

(1) 输入程序并检查无误,经汇编、连接后装入系统。

(2) 在3500-3504H单元存入十进制数12的ASCII码,即E3500↙,并输入30 30

30 31 32。

(3) G=0000:2000↙,运行以上程序,并用CTRL+C来中断程序,返回监控状态。

(4) 用D3510↙查看结果,应为:3510 0C 00。

(5) 反复试几组数,考察程序的正确性。

2. 将十进制数的ASCII码转换为BCD码

设从键盘输入的五位十进制数的ASCII码已存放在3500H起始的内存单元内,把它转

换为BCD码后,再按位分别存入350AH起始的内存单元内。假设输入的不是十进制数的

ASCII码,则对应存放结果的单元内容为“FF”。由表2-1可知,一字节ASCII码取其低四

位即变为BCD码。实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX,0005H ;循环计数器赋初值

MOV DI,3500H ;ASCII码首地址

A1: MOV BL,0FFH ;将错误标志送入BL

MOV AL,[DI] ;送ASCII码至AL

CMP AL,3AH ;比较AL与3AH

JNB A2 ;不低于3AH则转A2

SUB AL,30H ;低于3AH则取ASCII码低4位

JB A2 ;低于30H则转A2

MOV BL,AL ;否则AL内容送入BL,取代FFH

A2: MOV AL,BL ;结果或错误标志送入AL

MOV [DI+0AH],AL

INC DI

LOOP A1

A3: JMP A3

CODE ENDS

END START

实验步骤

(1) 输入程序并检查无误,经汇编,连接后装入系统。

(2) 在3500-3504H单元中存放五位十进制数的ASCII码,即:E3500↙,并输入31 32 33

34 35。

(3) G=0000:2000↙,运行以上程序。

(4) 用D3510↙查看结果,显示结果应为:

0000:350A 00 01 02 03 04 05 CC …

(5) 反复试几组数,考察程序的正确性。

四.思考题

程序2将一个五位十进制数转换为二进制数〔十六位〕时,这个十进制数最小可为多少,

最大可为多少?为什么?

实验三 运算类编程实验

一、实验目的

1.掌握使用运算类指令编程及调试方法。

2.掌握运算类指令对各状态标志位的影响及其测试方法。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对表3-1所示的数

据类型进行算术运算。

表3-1 数据类型算术运算表

数 制

运算符

操作数

二进制

带符号 无符号 组合

+ - + - ×

字节、字、多精度

BCD码

非组合

+ - ×

字节〔二位数字〕 字节〔一位数字〕

1.十进制数的BCD码减法运算

计算下X-Y=Z,其中,X、Y、Z均为BCD码。

实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

X DW ? ;请在此处给X赋值

Y DW ? ;请在此处给X赋值

Z DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AH,00H

SAHF

MOV CX,0002H

MOV SI,OFFSET X

MOV DI,OFFSET Z

A1: MOV AL,[SI]

SBB AL,[SI+02H]

DAS

PUSHF

AND AL,0FH

POPF

地址

存储器

MOV [DI],AL

3500

00

INC DI

3501

04

X

INC SI

3502

02

Y

LOOP A1

3503

01

A2: JMP A2

CODE ENDS

3510 Z

END START

3511

开始

标志寄存器清

0

数据位数→CX

被减数及减数首址→SI

结果首址→DI

[SI] →AL

AL-[SI+2]

DAS调整

标志寄存器内容入栈

AL高4位置0

标志寄存器内容出栈

存结果

修改SI、DI

N

CX=0?

Y

结束

实验步骤

(1) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(2) 用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址DS:XXXX。

用E命令EXXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。

(3) G=0000:2000↙,运行以上程序。

(4) DXXXX:0004↙,显示计算结果:08 02 CC …。

(5) 反复试几组数,考察程序的正确性。

四、思考题

编写两个数值长度不等的BCD码相加的程序。

实验四 分支程序设计实验

一、实验目的

1.掌握分支程序的结构。

2.掌握分支程序的设计、调试方法。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

设计一数据块间的搬移程序。

设计思想:程序要求把内存中一数据区〔称为源数据块〕传送到另一存储区〔成为目的

数据块〕。源数据块和目的数据块在存储中可能有三种情况,如图4-1所示。

00000H

源数

据块

目的数

据块

FFFFFH

00000H

00000H

〔a〕

FFFFFH

〔b〕

图4-1

FFFFFH

〔c〕

对于两个数据块别离的情况,如图4-1(a),数据的传送从数据块的首址开始,或者从数

据块的末址开始均可。但对于有部分重迭的情况,则要加以分析,否则重叠部分会因“搬移”

而遭破坏,可以得到以下结论:

当源数据块首址>目的块首址时,从数据块首地址开始传送数据。

当源数据块首址<目的块首址时,从数据块末地址开始传送数据。

实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX,0010H;取搬家字节数〔16个字节〕

开始

MOV SI,3100H ;取源块首址

MOV DI,3200H ;取目的块首址

SI←源数据块首址

CMP SI,DI ;从首址开始?

DI←目的数据块首址

JA A2 ;是,转移

CX←搬家字节数

ADD SI,CX ;否,以末地址开始搬家

ADD DI,CX

DEC SI

< >

[SI]>[DI]?

DEC DI

A1: MOV AL,[SI];从首址开始搬家

SI←SI+CX-1 [DI] ←[SI]

MOV [DI],AL

DI←DI+CX-1

DEC SI

DEC DI

SI←SI+1

DEC CX

[DI] ←[SI] DI←DI+1

JNE A1

JMP A3

SI←SI-1 CX←CX-1

A2: MOV AL,[SI]

DI←DI-1

MOV [DI],AL

INC SI

CX=0?

INC DI

CX←CX-1

Y

DEC CX

JNE A2

N

A3: JMP A3

CX=0?

CODE ENDS

Y

END START

实验步骤

结束

(1) 按实验流程图设计编写实验程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) 用E命令在以SI为起址的单元中填入16个数。

(4) G=0000:2000↙,运行以上程序。

(5) 用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同。

(6) 试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。

四、思考题

为什么当源数据块首址>目的块首址时,应从数据块首址开始传送数据;而当源数据块

首址<目的块首址时,应从数据块末地址开始传送数据?

N

实验五 循环程序设计

一、实验目的

1.加深对循环结构的理解。

2.掌握循环结构程序设计的方法。

3.熟练掌握调试循环程序的方法。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

1.编制程序使S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。

实验程序及流程如下:

STACK SEGMENT STACK

开始

DW 64 DUP(?)

STACK ENDS

1→DX

2→BL

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,0001H

BL→AL

MOV BL,02H

BL+1→BL

A1: MOV AL,BL

INC BL

AL*BL→AX

MUL BL

DX+AX→DX

ADD DX,AX

CMP AX,00C8H

N

JNA A1

AX>200?

A2: INT 03H

Y

CODE ENDS

END START

结束

实验步骤

(1) 按流程图编制实验程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) G=0000:2000↙,运行以上程序。

(4) RAX↙,显示结果。

2.求某数据区内复数的个数

设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后

一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将

所有数据中但凡符号位为1的数据的个数累加起来,即得区内所包含负数的个数。

实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DI,3000H ;设数据区首址

MOV CL,[DI] ;送数据个数

XOR CH,CH ;CH清0

MOV BL,CH ;BL清0

INC DI ;指针指向第一个数据

A1: MOV AL,[DI]

TEST AL,80H;数据首位是否为1

JE A2

INC BL ;负数个数累加

A2: INC DI

LOOP A1

MOV [DI],BL ;存结果

INT 03H

CODE ENDS

END START

开始

数据区首址送→DI

数据个数→CX

CH、BL置0

DI增1

数据首位=1?

Y

BL+1→BL

N

DI增1

N

CX=0?

Y

存结果

结束

实验步骤

(1) 按流程图编制实验程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) E3000↙输入数据如下:

3000=06〔数据个数〕

3001=12、88、82、90、22、33。

G=0000:2000↙,运行以上程序。

〔4〕 D=3007↙,显示结果03。

(5) 反复试几组数,考察程序的正确性。

四.思考题

修改程序2,使其能分别求出数据区中正数、零和负数的个数。

实验六 子程序设计实验

一、实验目的

开始

1.学习子程序的定义和调用方法。

2.掌握子程序、子程序的嵌套、递归子程序的结构。

3.掌握子程序的程序设计、编制及调用。

数据首址→SI

二、实验设备

TDN86/51教学实验系统一台

序列的字节个数→CX

三、实验内容及步骤

1.求无符号字节序列中的最大值和最小值

设有一字节序列,其存储首址为3000H,字节数为

调用求最大最小值子程序

08H。

利用子程序的方法编程求出该序列中的最大值和最小值。

结束

实验程序及流程如下:

STACK SEGMENT 主程序

DW 64 DUP(?) 子程序

STACK ENDS

子程序入口

CODE SEGMENT

Y

ASSUME CS:CODE

CX=0?

N

START: MOV SI,3000H

MOV CX,0008H

SI、CX、BX入栈

CALL branch

INT 03H

[SI] →AL

branch: JCXZ A4

SI+1→SI

PUSH SI

PUSH CX

N

PUSH BX

AL→BL

AL〈BH

MOV BH,[SI]

MOV BL,BH

N

A1: LODSB

AL→BL

AL〉BH

CMP AL,BH

Y

JBE A2

MOV BH,AL

CX-1→CX

JMP A3

A2: CMP AL,BL

N

JAE A3

CX=0?

MOV BL,AL

Y

A3: LOOP A1

返回

MOV AX,BX

POP BX

POP CX

POP SI

A4: RET

CODE ENDS

END START

实验步骤

(1) 根据流程图编写出相应的程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) E30000↙,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。

(4) G=0000:2000↙,运行以上程序。

(5) RAX↙,显示结果,AX=F9 04,AH中为最大值,AL中为最小值。

程序说明:该程序使用BH和BL暂存现行的最大值和最小值,开始时初始化成首字节

的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL比较,

假设取出的字节内容比BH的内容大或比BL的内容小,则修改之。当循环操作结束时,

将BH送AH,将BL送AL,作为返回值,并恢复BX原先内容。

四、思考题

1.假设求有符号字节型序列中的最大值和最小值,如何修改程序?

2.子程序执行完毕后要返回程序调用,它返回调用程序的什么地方,是靠什么指令、什么

方法返回的?

实验七 存储器扩展实验

一、实验目的

1.学习掌握存储器扩展方法和存储器读/写。 2.了解6264RAM特性。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

〔一〕系统中的存储器扩展单元

1.6264RAM介绍

静态RAM是由MOS管组成的触发器电路,每个触发器可以存放1位信息。只要不掉

电,所存储的信息就不会丧失。因此,静态RAM工作稳定,不需要外加刷新电路,使用方

便。但一般SRAM的每一个触发器是由6个晶体管组成,SRAM芯片的集成度不会太高,

目前较常用的有6216〔2K*8位〕,6264〔8K*8位〕,62256〔32K*8位〕。6264RAM有8192

个存储单元,每个单元为8位字长。6264的引脚如图7-1所示,WE、OE、CE1、CE2的共

同作用决定了芯片的运行方式,如表7-1所示。

A0~A12 地址线

D0~D7

CE1

CE2

WE

OE

双向数据线

片选线1

片选线2

写允许线

读允许线

表7-1 6264运行方式

WE

×

×

H

H

L

L

CE1

H

×

L

L

L

L

CE2

×

L

H

H

H

H

OE

×

×

H

L

H

L

方式

未选中〔掉电〕

未选中〔掉电〕

输出禁止

D0~D7

高阻

高阻

高阻

OUT

IN

IN

2.系统实验单元中的6264线路如图7-1所示

图7-1 6264引脚及实验单元中的6264

〔二〕存储器扩展实验

按图7-2所示实验线路编写程序,将6264直接挂至总线进行存储器扩展。

图7-2 实验线路

实验程序如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

TABLE DB 0AH DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CX,000AH

MOV BX,OFFSET TABLE

MOV SI,0000H

A1: MOV AL,[BX]

PUSH DS

PUSH AX

MOV AX,2000H

MOV DS,AX

POP AX

MOV [SI],AL

POP DS

INC SI

INC BX

LOOP A1

A2: JMP A2

CODE ENDS

END START

;程序装入后用U命令查看此语句可

;知数据段地址,以便于用E命令修

;改变量参数

实验步骤

(1) 按图7-2所示实验线路连接。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。

(3) 用U命令查看程序第一、二句找出原数据区段地址XXXX,用E命令在XXXX:0000

-XXXX:0009中分别放入10个数。

(4) 运行以上程序。

(5) 用D命令检查2000:0000-2000:0009单元内容是否与原数据区放入的10个数一

致。

实验八 中断特性及8259应用编程实验

一、实验目的

1.认识TDN86/51系统的中断特性。

2.掌握8259中断控制器的工作原理。

3.掌握8259可编程中断控制器的应用编程。

4.学习在接口实验单元上构造连接实验电路的方法。

二、实验设备

TDN86/51教学实验系统一台 排线、导线假设干

三、实验内容及步骤

〔一〕系统中的8259A芯片

1.系统中的8259A芯片

系统中的8259A芯片工作于单片方式,但可由用户扩展成级连方式。其线路如图8-1

所示。图中的圈点表示此为排针形式引出脚。〔注:以下线路图中的圈点均为排针形式引出

脚以后不再另作说明。〕

图8-1 系统中的8259A芯片

系统启动时,8259A被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW

来实现的。系统初始化时,规定IRQ0和IRQ4中断源分别提供应实时时钟和与PC微机联

机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有IRQ4中断源处于开启状

态,其他中断源被屏蔽了。中断矢量地址与中断号之间的关系如下表。

中断序号

功能调用

矢量地址

说明

0

08H

20H

|

23H

实时时钟

1

09H

24H

|

27H

可用

2

0AH

28H

|

2BH

可用

3

0BH

2CH

|

2FH

可用

4

0CH

30H

|

33H

串口1

5

0DH

34H

|

37H

可用

6

0EH

38H

|

3BH

可用

7

0FH

3CH

|

3FH

可用

2.接口实验单元中的级联实验用8259A芯片

除系统中的8259A芯片外,在接口实验单元中专门提供了另一片8259A芯片,以便进

行8259连接实验。其线路如图8-2所示。

3. 接口实验单元中的R-S触发器电路,如图8-3所示。

〔二〕实验内容

1.8259应用实验〔1〕

按图8-4所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10

次后,程序退出。实验程序及流程如下:

图8-2 接口实验单元中的级联用8259A芯片线路

图8-3 R-S触发器电路

图8-4 实验〔1〕线路

STACK SEGMENT

IRQ7中断服务处理

DW 64 DUP(?)

STACK ENDS

中断入口

CODE SEGMENT

ASSUME CS:CODE

显示“7”

START: PUSH DS ;保存数据段

MOV AX,0000H

MOV DS,AX ;数据段清零

CX=CX-1

MOV AX,OFFSET IRQ7 ;取中断程序入口地址〔相对地址〕

ADD AX,2000H ;加装载时IP=2000H地址〔绝对地址〕

关中断

MOV SI,003CH ;填8259中断7中断矢量

MOV [SI],AX ;填偏移量矢量

MOV AX,0000H ;段地址CS=0000H

返回

MOV SI,003EH

MOV [SI],AX ;填段地址矢量

CLI ;关中断

POP DS ;弹栈

IN AL,21H ;读8259中断屏蔽字

主程序

AND AL,7FH ;开8259中断7

开始

OUT 21H,AL

MOV CX,000AH

A1: CMP CX,0000H

修改IRQ7

JNZ A2

中断矢量

IN AL,21H ; 读8259中断屏蔽字

OR AL,80H ;开8259中断7

修正IMR,使

OUT 21H,AL

IRQ7中断允许

STI

HLT

A2: STI

CX=000AH

JMP A1

IRQ7:MOV AX,0137H ;中断程序入口

Y

屏蔽IRQ7

INT 10H CX=0?

开中断

MOV AX,0120H

N

INT 10H

停机

开中断

DEC CX

MOV AL,20H

OUT 20H,AL

CLI

IRET

CODE ENDS

END START

实验步骤

(1) 按图8-4连接实验线路。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) G=0000:2000↙,运行以上程序。〔注意:程序中8259中断矢量地址为绝对地址,已

定义为段地址CS=0000H,偏移量地址IP=2000H,故装载时一定按此填入CS和IP

地址,后面实验不再重述。〕

(4) 重复按KK2微动开关,显示屏上应用“7”来响应,直到按10次后,系统处于停机

状态,用CTRL+C返回监控。

2.8259应用实验〔2〕

图8-5 实验〔2〕线路

按图8-5所示实验线路,编写程序,完成下面的要求:

当无中断请求时,执行主程序,延时显示“main”,假设有中断请求,则执行其中断服

务程序,显示该中断号“6”或“7”;假设正在执行较低级的中断服务程序,则允许比它优

先级高的中断被响应〔IRQ6>IRQ7〕。主程序在执行过程中,每显示一个“main”,空一格。

实验程序如下:

STACK SEGMENT STACK ;定义堆栈段

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT ;定义数据段

TABLE DB 4DH,41H,49H,4EH,20H,00H

DATA ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA ;主程序开始

MOV DS,AX ;填数据段地址

PUSH DS ;保存数据段

MOV AX,0000H

MOV DS,AX ;数据段清零

MOV AX,OFFSET IRQ6 ;取中断程序入口地址〔相对地址〕

ADD AX,2000H ;加装载时IP=2000H地址〔绝对地址〕

MOV SI,0038H ;填8259中断6中断矢量

MOV [SI],AX ;填中断6偏移量矢量

MOV AX,0000H ;段地址CS=0000H

MOV SI,003AH

MOV [SI],AX ;填中断6段地址矢量

MOV AX,OFFSET IRQ7 ;取中断程序入口地址〔相对地址〕

ADD AX,2000H ;加装载时IP=2000H地址〔绝对地址〕

MOV SI,003CH ;填8259中断7中断矢量

MOV [SI],AX ;填中断7偏移量矢量

MOV AX,0000H ;段地址CS=0000H

MOV SI,003EH

MOV [SI],AX

POP DS

MOV AL,13H

OUT 20H,AL

MOV AL,08H

OUT 21H,AL

MOV AL,09H

OUT 21H,AL

MOV AL,3DH

OUT 21H,AL

STI

A1: MOV CX,0007H

MOV AX,010DH

INT 10H

A2: MOV AH,06H

MOV BX,OFFSET TABLE

INT 10H

CALL DALLY

LOOP A2

JMP A1

IRQ6: STI

CALL DALLY

MOV AX,0136H

INT 10H

MOV AL,20H

OUT 20H,AL

IRET

IRQ7: STI

CALL DALLY

MOV AX,0137H

INT 10H

MOV AL,20H

OUT 20H,AL

IRET

DALLY: PUSH CX

PUSH AX

MOV CX,0040H

A3: MOV AX,056CH

A4: DEC AX

JNE A4

LOOP A3

POP AX

POP CX

;填中断7段地址矢量

;弹栈

;回车换行

;取数据段中ASCII码存放地址

;调字符串显示“main”

;调延时子程序

;到7次换行

;8259中断6程序入口

;显示“6”

;显示空格

;中断返回

;8259中断7程序入口

;显示“7”

;显示空格

;中断返回

;延时子程序入口

RET ;子程序入口

CODE ENDS

END START ;程序结束

实验步骤

〔1〕 画出以上程序流程图。

〔2〕 按图8-5连接实验电路。

〔3〕 输入程序并检查无误,经汇编,连接后装入系统。

〔4〕 G=0000:2000↙,运行实验程序,则连续显示“main”,先后按动KK1和KK2微动

开关来模拟中断请求信号,记录请求顺序及显示结果。

3.8259级联实验

本程序旨在掌握8259级联方案的硬件连接及编程。

本实验是以系统中的8259作为主片,外接另一8259作为从片,构成8259级联方式的

中断实验线路,如图8-6所示。其中规定主片的IRQ7上连接一片从片,从片上的IRQ7接

外中断申请电路〔R-S单脉冲触发器〕,并规定从片的中断矢量编号为30H~37H,其命令寄

存器组编址为00和01。

图8-6 8259级联实验接线图

实验程序如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: CLI

MOV AL,11H

OUT 20H,AL

MOV AL,08H

OUT 21H,AL

MOV AL,80H

OUT 21H,AL

OUT

PUSH

MOV

MOV

MOV

ADD

MOV

MOV

MOV

MOV

MOV

POP

01H,AL

DS

AX,0000H

DS,AX

AX,OFFSET IRQ7

AX,2000H

SI,00DCH

[SI],AX

AX,0000H

SI,00DEH

[SI],AX

DS

MOV AL,1DH A1: STI

OUT 21H,AL HLT

MOV AL,7DH JMP A1

OUT 21H,AL IRQ7: MOV AX,0137H

MOV AL,11H INT 10H

OUT 00H,AL MOV AX,0120H

MOV AL,30H INT 10H

OUT 01H,AL MOV AL,20H

MOV AL,07H OUT 00H,AL

OUT 01H,AL OUT 00H,AL

MOV AL,09H IRET

OUT 01H,AL CODE ENDS

MOV AL,7FH END START

实验步骤:

〔1〕 画出以上程序流程图。

〔2〕 按图8-6塔接实验线路,其中INTA连接必须在开机上电之后。

〔3〕 输入程序并检查无误,经汇编,连接后装入系统。

〔4〕 G=0000:2000↙,运行实验程序,并通过按动KK1微动开关向从片申请中断,每按

动一次KK1,显示屏上显示一个“7”字符,说明CPU响应了一次中断。

四、思考题

在实验〔2〕中,假设先按动KK2,在按动KK1〔此时尚未显示“7”〕,显示结果会是

什么?为什么?

实验九 8255并行接口应用实验

一、实验目的

1.学习并掌握8255的各种工作方式及其应用。

2.学习在系统接口实验单元上构造实验电路。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

〔一〕系统中的8255芯片

1.系统中的8255芯片

8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C

三个端口以排针形式引出,供8255实验实验,其线路图如图9-1所示,端口地址如表9-1

所示。

图9-1 系统中的8255线路

表9-1 8255端口地址

信号线

IOY3

寄存器

A口、B口、C口

控制寄存器

2.接口实验单元中的开关和发光二极管电路

编址

61H~62H

63H

图9-2 拨动开关和发光二极管电路

〔二〕 8255接口应用实验

1.8255接口应用实验〔1〕

图9-3 实验线路图

按图9-3所示实验线路编写程序,使8255端口A工作在方式0并作为输出口,端口B工作

在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组发光二极管

上,然后通过对8255芯片编程来实现输入/出功能。实验程序如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV AL,82H

OUT 63H,AL

A1: IN AL,61H

OUT 60H,AL

JMP A1

CODE ENDS

END START

实验步骤

(1) 按图接线。

(2) 输入程序并检查无误,经汇编、链接后装入系统。

(3) 运行程序,拨动开关组,观察发光二极管一一对应。

2.8255接口应用实验〔2〕

按图9-4所示接线,编写程序,使8255端口A工作在方式0并作为输出口,端口B工

作于方式1并作为输入口,则端口C的PC2成为选通信号输入段STB

B

,PC0成为中断请求

信号输出端INTR

B

。当B口数据就绪后,通过发STB

B

信号来请求CPU读取端口B数据并

送端口A输出显示。

四、思考题

实验七 存储器扩展实验

一、实验目的

1.学习掌握存储器扩展方法和存储器读/写。

2.了解6264RAM特性。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

实验步骤

(4) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(5) 用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址DS:XXXX。

用E命令EXXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。

(6) G=0000:2000↙,运行以上程序。

(7) DXXXX:0004↙,显示计算结果:08 02 CC …。

(8) 反复试几组数,考察程序的正确性。

四、思考题

2024年3月27日发(作者:泥惜筠)

实验一 系统认识实验

一、实验目的

掌握TDN86/51教学系统的基本操作

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

1. 系统认识实验〔1〕

(1) 程序的输入与修改

从3500H内存单元开始建立0-15共16个数据。

实验步骤

a. 使用串行通讯电缆将实验系统与PC微机相连。

b. 将位于线路板右下角的系统状态选择开关拨至86档,开启实验系统。

c. 在系统软件所在目录下键入MD86↙,选择对应串口号,进入集成操作软件环境,出现

系统提示符“>”。按下F1功能键,进入全屏幕编辑界面,按ALT+F建立新文件〔NEW〕,

即可开始输入源程序。实验程序及流程如下:

STACK SEGMENT STACK ;8088宏汇编程序

DW 64 DUP(?) ;定义堆栈段

STACK ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE

START: MOV DI,3500H ;程序开始设数据区首址

MOV CX,0010H ;字节数送入CX中

MOV AX,0000H

SAHF

A1: MOV [DI],AL ;写入一字节

INC DI ;修改地址指针

INC AX ;修改数据

DAA ;十进制调整

LOOP A1 ;未填完转移

A2: JMP A2

CODE ENDS ;代码段结束

END START ;程序段结束

d. 输入程序后,按F2保存程序〔规定扩展名为*.asm〕,使用ALT+X返回集成软件环境。

e. 按F2,输入源程序名↙〔省略扩展名,系统默认为.asm〕,对源程序进行汇编,生成目

标文件〔*.obj〕及错误信息文件〔*.m〕。假设给出LST文件名则生成相应*.lst文件。

f. 汇编无误后,按F3输入文件名↙对汇编生成的*.obj文件进行连接,连接信息显示于

屏幕上,生成相应*.exe可执行文件。

g. 按F5,输入*.exe可执行文件名↙,填入程序段地址CS:0000↙及偏移地址IP:2000

↙,PC开始将程序从磁盘装入到教学系统内存,提示装载完毕后使用U0000:2000↙命

令进行反汇编,检查程序是否正确装入。

显示信息

>

2000 BF0035 MOV DI,3500

2003 B91000 MOV CX,0010

键入信息

U2000

U↙

U↙

h. 当发现源程序输入错误或需要调整时,在调试界面下可用A命令来修改,如修改2000

句为MOV DI,3500的操作如下:

显示信息

>

0000:2000

0000:2003

(2) 运行程序

系统提供了单步运行、设断点运行、连续运行等方式,具体操作如下:

a. 单步运行:其操作如下表,每运行一条指令后会显示下一条待执行指令并以蓝底白字显

示变化寄存器的内容,重复T↙〔或按F4键〕就可一步一步地运行,直至程序结束。

b. 连续运行:在“>”提示符下键入G=0000:2000↙〔在系统默认段地址CS=0000情况下

也可直接键入G=2000↙〕可连续运行程序,在运行过程中,可通过CTRL+C终止程序运

行,返回监控状态;也可通过CTRL+S暂停程序运行,按任意键继续。

c. 断点运行:在程序中可用B命令定义断点,系统规定至多定义10个断点,例如:

显示信息

>

[0:]

[1:]

>

键入信息

B↙

2009

键入信息

A2000↙

MOV DI,3500

上例中定义了2009地址为断点,每次键入GB=0000:2000↙程序连续运行至断点时,程

序中断并显示当前各寄存器内容。GB是G命令的扩充,表示含断点连续运行程序,断

点仅当系统复位时清除。

(3) 内存单元内容的显示:

使用D=0000:3500↙可查看3500H-350FH单元中的内容是否为0-15共16个数。

(4) 内存单元内容的修改:

假设要修改某一单元内容,可进行如下操作,其中,“空格”键用于向待编辑单元的高

地址方向移动地址,而“-”键则向反方向移动地址;用↙来响应,就退出E命令。

显示信息

>

0000:35000 00_

0000:35001 01_

键入信息

E3500↙

01space

Space

0000:35002 02_

0000:35003 03_

>

2. 系统操作练习〔2〕

将内存3500H单元开始的0-15共16个数据传递到3600H单元开始的数据区中。实验程

序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

开始

CODE SEGMENT

设数据源地址、

ASSUME CS:CODE

目的地址、字节数

START: MOV SI,3500H ;建立源地址指针

MOV DI,3600H ;建立目标地址指针

MOV CX,0008H ;字数送入CX寄存器中

取源数据一字到AX中

A1: MOV AX,[SI] ;取源数据一字送入AX中

〔AX〕送目标地址单元

MOV [DI],AX ;将源数据送入目标地址单元中

修改指针

INC SI ;修正指针

INC SI

N

INC DI

传完否?

INC DI

Y

DEC CX ;修改循环次数

JNZ A1 ;判断是否传送完毕

停机

A2: JMP A2

CODE ENDS ;代码段结束

END START ;程序段结束

实验步骤

(1) 输入程序并检查无误,经汇编、连接后装入系统。

(2) E3500↙,在3500-350F单元中分别送入00、01、02…。

(3) G=0000:2000↙,运行以上程序,按CTRL+C中断,返回监控。

(4) D3600↙ ,显示结果:3600 00 01 02 …。

实验二 数码转换编程及程序调试

一、实验目的

1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。

2. 熟悉键盘使用方法。

3. 熟悉调试程序的方法

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

电脑输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均

用二进制进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、

BCD码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少

的。

电脑与外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。

二进制

ASCII码 ASCII码

键盘 CRT显示

ASCII码 ASCII码

光电机 打印机

BCD码 段码

拨码开关 多段显示

二进制 二进制

数据开关 位显示

图2-1 数码转换关系

表2-1 数码对应关系

十六进制

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

BCD码

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

二进制机

器码

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

ASCII码

共阳

30H

31H

32H

33H

34H

35H

36H

37H

38H

39H

41H

42H

43H

44H

45H

46H

40H

79H

24H

30H

19H

12H

02H

78H

00H

18H

08H

03H

46H

21H

06H

0EH

七段码

共阴

3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

67H

77H

7CH

39H

5EH

79H

71H

1. 将ASCII码表示的十进制数转换为二进制数

十进制表示为:

D

n

10D

n1

10

nn1

D

0

10

D

i

10

i

┅┅┅┅┅┅┅┅┅〔1〕

0

i0

n

Di代表十进制数1,2,3,┅9,0;

上式转换为:

D10

i

i0

n

i

(((

(D

n

10D

n1

)10

D

1

)10D

0

┅┅┅┅┅┅┅┅┅〔2〕

由式〔2〕可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘

10加次位的操作,依次类推,则可求出二进制数的结果。程序流程及参考程序如下:〔规定:

被转换的ASCII码十进制数存放在3500H-3504H单元中,转换结果存在于3510H-3511H单元

中。〕

STACK SEGMENT STACK

开始

DW 64 DUP(?)

STACK ENDS

定义源、目标地址

定义转换位数n

CODE SEGMENT

ASSUME CS:CODE

N-1→CX

START: MOV SI,3500H

MOV DI,3510H

取第一位ASCII码

MOV BX,000AH

MOV CX,0004H

MOV AH,00H

减去30H

MOV AL,[SI]

SUB AL,30H

乘10

A1: IMUL BX

ADD AL,[SI+01]

SUB AL,30H

加一位ASCII码减30H

INC SI

LOOP A1

N

MOV [DI],AX

传完否?

A2: JMP A2

Y

CODE ENDS

存结果并停机

END START

实验步骤

(1) 输入程序并检查无误,经汇编、连接后装入系统。

(2) 在3500-3504H单元存入十进制数12的ASCII码,即E3500↙,并输入30 30

30 31 32。

(3) G=0000:2000↙,运行以上程序,并用CTRL+C来中断程序,返回监控状态。

(4) 用D3510↙查看结果,应为:3510 0C 00。

(5) 反复试几组数,考察程序的正确性。

2. 将十进制数的ASCII码转换为BCD码

设从键盘输入的五位十进制数的ASCII码已存放在3500H起始的内存单元内,把它转

换为BCD码后,再按位分别存入350AH起始的内存单元内。假设输入的不是十进制数的

ASCII码,则对应存放结果的单元内容为“FF”。由表2-1可知,一字节ASCII码取其低四

位即变为BCD码。实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX,0005H ;循环计数器赋初值

MOV DI,3500H ;ASCII码首地址

A1: MOV BL,0FFH ;将错误标志送入BL

MOV AL,[DI] ;送ASCII码至AL

CMP AL,3AH ;比较AL与3AH

JNB A2 ;不低于3AH则转A2

SUB AL,30H ;低于3AH则取ASCII码低4位

JB A2 ;低于30H则转A2

MOV BL,AL ;否则AL内容送入BL,取代FFH

A2: MOV AL,BL ;结果或错误标志送入AL

MOV [DI+0AH],AL

INC DI

LOOP A1

A3: JMP A3

CODE ENDS

END START

实验步骤

(1) 输入程序并检查无误,经汇编,连接后装入系统。

(2) 在3500-3504H单元中存放五位十进制数的ASCII码,即:E3500↙,并输入31 32 33

34 35。

(3) G=0000:2000↙,运行以上程序。

(4) 用D3510↙查看结果,显示结果应为:

0000:350A 00 01 02 03 04 05 CC …

(5) 反复试几组数,考察程序的正确性。

四.思考题

程序2将一个五位十进制数转换为二进制数〔十六位〕时,这个十进制数最小可为多少,

最大可为多少?为什么?

实验三 运算类编程实验

一、实验目的

1.掌握使用运算类指令编程及调试方法。

2.掌握运算类指令对各状态标志位的影响及其测试方法。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对表3-1所示的数

据类型进行算术运算。

表3-1 数据类型算术运算表

数 制

运算符

操作数

二进制

带符号 无符号 组合

+ - + - ×

字节、字、多精度

BCD码

非组合

+ - ×

字节〔二位数字〕 字节〔一位数字〕

1.十进制数的BCD码减法运算

计算下X-Y=Z,其中,X、Y、Z均为BCD码。

实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

X DW ? ;请在此处给X赋值

Y DW ? ;请在此处给X赋值

Z DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AH,00H

SAHF

MOV CX,0002H

MOV SI,OFFSET X

MOV DI,OFFSET Z

A1: MOV AL,[SI]

SBB AL,[SI+02H]

DAS

PUSHF

AND AL,0FH

POPF

地址

存储器

MOV [DI],AL

3500

00

INC DI

3501

04

X

INC SI

3502

02

Y

LOOP A1

3503

01

A2: JMP A2

CODE ENDS

3510 Z

END START

3511

开始

标志寄存器清

0

数据位数→CX

被减数及减数首址→SI

结果首址→DI

[SI] →AL

AL-[SI+2]

DAS调整

标志寄存器内容入栈

AL高4位置0

标志寄存器内容出栈

存结果

修改SI、DI

N

CX=0?

Y

结束

实验步骤

(1) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(2) 用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址DS:XXXX。

用E命令EXXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。

(3) G=0000:2000↙,运行以上程序。

(4) DXXXX:0004↙,显示计算结果:08 02 CC …。

(5) 反复试几组数,考察程序的正确性。

四、思考题

编写两个数值长度不等的BCD码相加的程序。

实验四 分支程序设计实验

一、实验目的

1.掌握分支程序的结构。

2.掌握分支程序的设计、调试方法。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

设计一数据块间的搬移程序。

设计思想:程序要求把内存中一数据区〔称为源数据块〕传送到另一存储区〔成为目的

数据块〕。源数据块和目的数据块在存储中可能有三种情况,如图4-1所示。

00000H

源数

据块

目的数

据块

FFFFFH

00000H

00000H

〔a〕

FFFFFH

〔b〕

图4-1

FFFFFH

〔c〕

对于两个数据块别离的情况,如图4-1(a),数据的传送从数据块的首址开始,或者从数

据块的末址开始均可。但对于有部分重迭的情况,则要加以分析,否则重叠部分会因“搬移”

而遭破坏,可以得到以下结论:

当源数据块首址>目的块首址时,从数据块首地址开始传送数据。

当源数据块首址<目的块首址时,从数据块末地址开始传送数据。

实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX,0010H;取搬家字节数〔16个字节〕

开始

MOV SI,3100H ;取源块首址

MOV DI,3200H ;取目的块首址

SI←源数据块首址

CMP SI,DI ;从首址开始?

DI←目的数据块首址

JA A2 ;是,转移

CX←搬家字节数

ADD SI,CX ;否,以末地址开始搬家

ADD DI,CX

DEC SI

< >

[SI]>[DI]?

DEC DI

A1: MOV AL,[SI];从首址开始搬家

SI←SI+CX-1 [DI] ←[SI]

MOV [DI],AL

DI←DI+CX-1

DEC SI

DEC DI

SI←SI+1

DEC CX

[DI] ←[SI] DI←DI+1

JNE A1

JMP A3

SI←SI-1 CX←CX-1

A2: MOV AL,[SI]

DI←DI-1

MOV [DI],AL

INC SI

CX=0?

INC DI

CX←CX-1

Y

DEC CX

JNE A2

N

A3: JMP A3

CX=0?

CODE ENDS

Y

END START

实验步骤

结束

(1) 按实验流程图设计编写实验程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) 用E命令在以SI为起址的单元中填入16个数。

(4) G=0000:2000↙,运行以上程序。

(5) 用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同。

(6) 试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。

四、思考题

为什么当源数据块首址>目的块首址时,应从数据块首址开始传送数据;而当源数据块

首址<目的块首址时,应从数据块末地址开始传送数据?

N

实验五 循环程序设计

一、实验目的

1.加深对循环结构的理解。

2.掌握循环结构程序设计的方法。

3.熟练掌握调试循环程序的方法。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

1.编制程序使S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。

实验程序及流程如下:

STACK SEGMENT STACK

开始

DW 64 DUP(?)

STACK ENDS

1→DX

2→BL

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,0001H

BL→AL

MOV BL,02H

BL+1→BL

A1: MOV AL,BL

INC BL

AL*BL→AX

MUL BL

DX+AX→DX

ADD DX,AX

CMP AX,00C8H

N

JNA A1

AX>200?

A2: INT 03H

Y

CODE ENDS

END START

结束

实验步骤

(1) 按流程图编制实验程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) G=0000:2000↙,运行以上程序。

(4) RAX↙,显示结果。

2.求某数据区内复数的个数

设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后

一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将

所有数据中但凡符号位为1的数据的个数累加起来,即得区内所包含负数的个数。

实验程序及流程如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DI,3000H ;设数据区首址

MOV CL,[DI] ;送数据个数

XOR CH,CH ;CH清0

MOV BL,CH ;BL清0

INC DI ;指针指向第一个数据

A1: MOV AL,[DI]

TEST AL,80H;数据首位是否为1

JE A2

INC BL ;负数个数累加

A2: INC DI

LOOP A1

MOV [DI],BL ;存结果

INT 03H

CODE ENDS

END START

开始

数据区首址送→DI

数据个数→CX

CH、BL置0

DI增1

数据首位=1?

Y

BL+1→BL

N

DI增1

N

CX=0?

Y

存结果

结束

实验步骤

(1) 按流程图编制实验程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) E3000↙输入数据如下:

3000=06〔数据个数〕

3001=12、88、82、90、22、33。

G=0000:2000↙,运行以上程序。

〔4〕 D=3007↙,显示结果03。

(5) 反复试几组数,考察程序的正确性。

四.思考题

修改程序2,使其能分别求出数据区中正数、零和负数的个数。

实验六 子程序设计实验

一、实验目的

开始

1.学习子程序的定义和调用方法。

2.掌握子程序、子程序的嵌套、递归子程序的结构。

3.掌握子程序的程序设计、编制及调用。

数据首址→SI

二、实验设备

TDN86/51教学实验系统一台

序列的字节个数→CX

三、实验内容及步骤

1.求无符号字节序列中的最大值和最小值

设有一字节序列,其存储首址为3000H,字节数为

调用求最大最小值子程序

08H。

利用子程序的方法编程求出该序列中的最大值和最小值。

结束

实验程序及流程如下:

STACK SEGMENT 主程序

DW 64 DUP(?) 子程序

STACK ENDS

子程序入口

CODE SEGMENT

Y

ASSUME CS:CODE

CX=0?

N

START: MOV SI,3000H

MOV CX,0008H

SI、CX、BX入栈

CALL branch

INT 03H

[SI] →AL

branch: JCXZ A4

SI+1→SI

PUSH SI

PUSH CX

N

PUSH BX

AL→BL

AL〈BH

MOV BH,[SI]

MOV BL,BH

N

A1: LODSB

AL→BL

AL〉BH

CMP AL,BH

Y

JBE A2

MOV BH,AL

CX-1→CX

JMP A3

A2: CMP AL,BL

N

JAE A3

CX=0?

MOV BL,AL

Y

A3: LOOP A1

返回

MOV AX,BX

POP BX

POP CX

POP SI

A4: RET

CODE ENDS

END START

实验步骤

(1) 根据流程图编写出相应的程序。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) E30000↙,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。

(4) G=0000:2000↙,运行以上程序。

(5) RAX↙,显示结果,AX=F9 04,AH中为最大值,AL中为最小值。

程序说明:该程序使用BH和BL暂存现行的最大值和最小值,开始时初始化成首字节

的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL比较,

假设取出的字节内容比BH的内容大或比BL的内容小,则修改之。当循环操作结束时,

将BH送AH,将BL送AL,作为返回值,并恢复BX原先内容。

四、思考题

1.假设求有符号字节型序列中的最大值和最小值,如何修改程序?

2.子程序执行完毕后要返回程序调用,它返回调用程序的什么地方,是靠什么指令、什么

方法返回的?

实验七 存储器扩展实验

一、实验目的

1.学习掌握存储器扩展方法和存储器读/写。 2.了解6264RAM特性。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

〔一〕系统中的存储器扩展单元

1.6264RAM介绍

静态RAM是由MOS管组成的触发器电路,每个触发器可以存放1位信息。只要不掉

电,所存储的信息就不会丧失。因此,静态RAM工作稳定,不需要外加刷新电路,使用方

便。但一般SRAM的每一个触发器是由6个晶体管组成,SRAM芯片的集成度不会太高,

目前较常用的有6216〔2K*8位〕,6264〔8K*8位〕,62256〔32K*8位〕。6264RAM有8192

个存储单元,每个单元为8位字长。6264的引脚如图7-1所示,WE、OE、CE1、CE2的共

同作用决定了芯片的运行方式,如表7-1所示。

A0~A12 地址线

D0~D7

CE1

CE2

WE

OE

双向数据线

片选线1

片选线2

写允许线

读允许线

表7-1 6264运行方式

WE

×

×

H

H

L

L

CE1

H

×

L

L

L

L

CE2

×

L

H

H

H

H

OE

×

×

H

L

H

L

方式

未选中〔掉电〕

未选中〔掉电〕

输出禁止

D0~D7

高阻

高阻

高阻

OUT

IN

IN

2.系统实验单元中的6264线路如图7-1所示

图7-1 6264引脚及实验单元中的6264

〔二〕存储器扩展实验

按图7-2所示实验线路编写程序,将6264直接挂至总线进行存储器扩展。

图7-2 实验线路

实验程序如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

TABLE DB 0AH DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CX,000AH

MOV BX,OFFSET TABLE

MOV SI,0000H

A1: MOV AL,[BX]

PUSH DS

PUSH AX

MOV AX,2000H

MOV DS,AX

POP AX

MOV [SI],AL

POP DS

INC SI

INC BX

LOOP A1

A2: JMP A2

CODE ENDS

END START

;程序装入后用U命令查看此语句可

;知数据段地址,以便于用E命令修

;改变量参数

实验步骤

(1) 按图7-2所示实验线路连接。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。

(3) 用U命令查看程序第一、二句找出原数据区段地址XXXX,用E命令在XXXX:0000

-XXXX:0009中分别放入10个数。

(4) 运行以上程序。

(5) 用D命令检查2000:0000-2000:0009单元内容是否与原数据区放入的10个数一

致。

实验八 中断特性及8259应用编程实验

一、实验目的

1.认识TDN86/51系统的中断特性。

2.掌握8259中断控制器的工作原理。

3.掌握8259可编程中断控制器的应用编程。

4.学习在接口实验单元上构造连接实验电路的方法。

二、实验设备

TDN86/51教学实验系统一台 排线、导线假设干

三、实验内容及步骤

〔一〕系统中的8259A芯片

1.系统中的8259A芯片

系统中的8259A芯片工作于单片方式,但可由用户扩展成级连方式。其线路如图8-1

所示。图中的圈点表示此为排针形式引出脚。〔注:以下线路图中的圈点均为排针形式引出

脚以后不再另作说明。〕

图8-1 系统中的8259A芯片

系统启动时,8259A被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW

来实现的。系统初始化时,规定IRQ0和IRQ4中断源分别提供应实时时钟和与PC微机联

机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有IRQ4中断源处于开启状

态,其他中断源被屏蔽了。中断矢量地址与中断号之间的关系如下表。

中断序号

功能调用

矢量地址

说明

0

08H

20H

|

23H

实时时钟

1

09H

24H

|

27H

可用

2

0AH

28H

|

2BH

可用

3

0BH

2CH

|

2FH

可用

4

0CH

30H

|

33H

串口1

5

0DH

34H

|

37H

可用

6

0EH

38H

|

3BH

可用

7

0FH

3CH

|

3FH

可用

2.接口实验单元中的级联实验用8259A芯片

除系统中的8259A芯片外,在接口实验单元中专门提供了另一片8259A芯片,以便进

行8259连接实验。其线路如图8-2所示。

3. 接口实验单元中的R-S触发器电路,如图8-3所示。

〔二〕实验内容

1.8259应用实验〔1〕

按图8-4所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10

次后,程序退出。实验程序及流程如下:

图8-2 接口实验单元中的级联用8259A芯片线路

图8-3 R-S触发器电路

图8-4 实验〔1〕线路

STACK SEGMENT

IRQ7中断服务处理

DW 64 DUP(?)

STACK ENDS

中断入口

CODE SEGMENT

ASSUME CS:CODE

显示“7”

START: PUSH DS ;保存数据段

MOV AX,0000H

MOV DS,AX ;数据段清零

CX=CX-1

MOV AX,OFFSET IRQ7 ;取中断程序入口地址〔相对地址〕

ADD AX,2000H ;加装载时IP=2000H地址〔绝对地址〕

关中断

MOV SI,003CH ;填8259中断7中断矢量

MOV [SI],AX ;填偏移量矢量

MOV AX,0000H ;段地址CS=0000H

返回

MOV SI,003EH

MOV [SI],AX ;填段地址矢量

CLI ;关中断

POP DS ;弹栈

IN AL,21H ;读8259中断屏蔽字

主程序

AND AL,7FH ;开8259中断7

开始

OUT 21H,AL

MOV CX,000AH

A1: CMP CX,0000H

修改IRQ7

JNZ A2

中断矢量

IN AL,21H ; 读8259中断屏蔽字

OR AL,80H ;开8259中断7

修正IMR,使

OUT 21H,AL

IRQ7中断允许

STI

HLT

A2: STI

CX=000AH

JMP A1

IRQ7:MOV AX,0137H ;中断程序入口

Y

屏蔽IRQ7

INT 10H CX=0?

开中断

MOV AX,0120H

N

INT 10H

停机

开中断

DEC CX

MOV AL,20H

OUT 20H,AL

CLI

IRET

CODE ENDS

END START

实验步骤

(1) 按图8-4连接实验线路。

(2) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(3) G=0000:2000↙,运行以上程序。〔注意:程序中8259中断矢量地址为绝对地址,已

定义为段地址CS=0000H,偏移量地址IP=2000H,故装载时一定按此填入CS和IP

地址,后面实验不再重述。〕

(4) 重复按KK2微动开关,显示屏上应用“7”来响应,直到按10次后,系统处于停机

状态,用CTRL+C返回监控。

2.8259应用实验〔2〕

图8-5 实验〔2〕线路

按图8-5所示实验线路,编写程序,完成下面的要求:

当无中断请求时,执行主程序,延时显示“main”,假设有中断请求,则执行其中断服

务程序,显示该中断号“6”或“7”;假设正在执行较低级的中断服务程序,则允许比它优

先级高的中断被响应〔IRQ6>IRQ7〕。主程序在执行过程中,每显示一个“main”,空一格。

实验程序如下:

STACK SEGMENT STACK ;定义堆栈段

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT ;定义数据段

TABLE DB 4DH,41H,49H,4EH,20H,00H

DATA ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA ;主程序开始

MOV DS,AX ;填数据段地址

PUSH DS ;保存数据段

MOV AX,0000H

MOV DS,AX ;数据段清零

MOV AX,OFFSET IRQ6 ;取中断程序入口地址〔相对地址〕

ADD AX,2000H ;加装载时IP=2000H地址〔绝对地址〕

MOV SI,0038H ;填8259中断6中断矢量

MOV [SI],AX ;填中断6偏移量矢量

MOV AX,0000H ;段地址CS=0000H

MOV SI,003AH

MOV [SI],AX ;填中断6段地址矢量

MOV AX,OFFSET IRQ7 ;取中断程序入口地址〔相对地址〕

ADD AX,2000H ;加装载时IP=2000H地址〔绝对地址〕

MOV SI,003CH ;填8259中断7中断矢量

MOV [SI],AX ;填中断7偏移量矢量

MOV AX,0000H ;段地址CS=0000H

MOV SI,003EH

MOV [SI],AX

POP DS

MOV AL,13H

OUT 20H,AL

MOV AL,08H

OUT 21H,AL

MOV AL,09H

OUT 21H,AL

MOV AL,3DH

OUT 21H,AL

STI

A1: MOV CX,0007H

MOV AX,010DH

INT 10H

A2: MOV AH,06H

MOV BX,OFFSET TABLE

INT 10H

CALL DALLY

LOOP A2

JMP A1

IRQ6: STI

CALL DALLY

MOV AX,0136H

INT 10H

MOV AL,20H

OUT 20H,AL

IRET

IRQ7: STI

CALL DALLY

MOV AX,0137H

INT 10H

MOV AL,20H

OUT 20H,AL

IRET

DALLY: PUSH CX

PUSH AX

MOV CX,0040H

A3: MOV AX,056CH

A4: DEC AX

JNE A4

LOOP A3

POP AX

POP CX

;填中断7段地址矢量

;弹栈

;回车换行

;取数据段中ASCII码存放地址

;调字符串显示“main”

;调延时子程序

;到7次换行

;8259中断6程序入口

;显示“6”

;显示空格

;中断返回

;8259中断7程序入口

;显示“7”

;显示空格

;中断返回

;延时子程序入口

RET ;子程序入口

CODE ENDS

END START ;程序结束

实验步骤

〔1〕 画出以上程序流程图。

〔2〕 按图8-5连接实验电路。

〔3〕 输入程序并检查无误,经汇编,连接后装入系统。

〔4〕 G=0000:2000↙,运行实验程序,则连续显示“main”,先后按动KK1和KK2微动

开关来模拟中断请求信号,记录请求顺序及显示结果。

3.8259级联实验

本程序旨在掌握8259级联方案的硬件连接及编程。

本实验是以系统中的8259作为主片,外接另一8259作为从片,构成8259级联方式的

中断实验线路,如图8-6所示。其中规定主片的IRQ7上连接一片从片,从片上的IRQ7接

外中断申请电路〔R-S单脉冲触发器〕,并规定从片的中断矢量编号为30H~37H,其命令寄

存器组编址为00和01。

图8-6 8259级联实验接线图

实验程序如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: CLI

MOV AL,11H

OUT 20H,AL

MOV AL,08H

OUT 21H,AL

MOV AL,80H

OUT 21H,AL

OUT

PUSH

MOV

MOV

MOV

ADD

MOV

MOV

MOV

MOV

MOV

POP

01H,AL

DS

AX,0000H

DS,AX

AX,OFFSET IRQ7

AX,2000H

SI,00DCH

[SI],AX

AX,0000H

SI,00DEH

[SI],AX

DS

MOV AL,1DH A1: STI

OUT 21H,AL HLT

MOV AL,7DH JMP A1

OUT 21H,AL IRQ7: MOV AX,0137H

MOV AL,11H INT 10H

OUT 00H,AL MOV AX,0120H

MOV AL,30H INT 10H

OUT 01H,AL MOV AL,20H

MOV AL,07H OUT 00H,AL

OUT 01H,AL OUT 00H,AL

MOV AL,09H IRET

OUT 01H,AL CODE ENDS

MOV AL,7FH END START

实验步骤:

〔1〕 画出以上程序流程图。

〔2〕 按图8-6塔接实验线路,其中INTA连接必须在开机上电之后。

〔3〕 输入程序并检查无误,经汇编,连接后装入系统。

〔4〕 G=0000:2000↙,运行实验程序,并通过按动KK1微动开关向从片申请中断,每按

动一次KK1,显示屏上显示一个“7”字符,说明CPU响应了一次中断。

四、思考题

在实验〔2〕中,假设先按动KK2,在按动KK1〔此时尚未显示“7”〕,显示结果会是

什么?为什么?

实验九 8255并行接口应用实验

一、实验目的

1.学习并掌握8255的各种工作方式及其应用。

2.学习在系统接口实验单元上构造实验电路。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

〔一〕系统中的8255芯片

1.系统中的8255芯片

8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C

三个端口以排针形式引出,供8255实验实验,其线路图如图9-1所示,端口地址如表9-1

所示。

图9-1 系统中的8255线路

表9-1 8255端口地址

信号线

IOY3

寄存器

A口、B口、C口

控制寄存器

2.接口实验单元中的开关和发光二极管电路

编址

61H~62H

63H

图9-2 拨动开关和发光二极管电路

〔二〕 8255接口应用实验

1.8255接口应用实验〔1〕

图9-3 实验线路图

按图9-3所示实验线路编写程序,使8255端口A工作在方式0并作为输出口,端口B工作

在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组发光二极管

上,然后通过对8255芯片编程来实现输入/出功能。实验程序如下:

STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV AL,82H

OUT 63H,AL

A1: IN AL,61H

OUT 60H,AL

JMP A1

CODE ENDS

END START

实验步骤

(1) 按图接线。

(2) 输入程序并检查无误,经汇编、链接后装入系统。

(3) 运行程序,拨动开关组,观察发光二极管一一对应。

2.8255接口应用实验〔2〕

按图9-4所示接线,编写程序,使8255端口A工作在方式0并作为输出口,端口B工

作于方式1并作为输入口,则端口C的PC2成为选通信号输入段STB

B

,PC0成为中断请求

信号输出端INTR

B

。当B口数据就绪后,通过发STB

B

信号来请求CPU读取端口B数据并

送端口A输出显示。

四、思考题

实验七 存储器扩展实验

一、实验目的

1.学习掌握存储器扩展方法和存储器读/写。

2.了解6264RAM特性。

二、实验设备

TDN86/51教学实验系统一台

三、实验内容及步骤

实验步骤

(4) 输入实验程序并检查无误,经汇编,连接后装入系统。〔设CS:0000H,IP:2000H〕

(5) 用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址DS:XXXX。

用E命令EXXXX:0000↙给X,Y赋值存入40和12的BCD码:00 04 02 01。

(6) G=0000:2000↙,运行以上程序。

(7) DXXXX:0004↙,显示计算结果:08 02 CC …。

(8) 反复试几组数,考察程序的正确性。

四、思考题

发布评论

评论列表 (0)

  1. 暂无评论