汇编实验 下载本文

实验一 系统认识实验

1 实验目的

掌握TD系列微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。 2 实验设备

PC机一台,TD-PITE实验装臵一套。 3 实验内容

编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。 4 实验步骤

1). 运行Wmd86软件,进入Wmd86集成开发环境。

2). 根据程序设计使用语言的不同,通过在?设臵?下拉列表来选择需要使用的语言和寄存器类型,这里我们设臵成?汇编语言?和?16位寄存器?,如图1、图2所示。设臵选择后,下次再启动软件,语言环境保持这次的修改不变。本课程选择16位寄存器。

图1 语言环境设置界面

图2寄存器设置界面

3). 语言和寄存器选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图3所示。默认文件名为Wmd861。

图3 新建文件界面

4). 编写实验程序,如图4所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。

图4 程序编辑界面

5). 点击,编译文件,若程序编译无误,则可以继续点击进行链接,链接无误后方可以加载程序。编译、链接后输出如图5所示的输出信息。

图5 编译输出信息界面

6). 连接PC与实验系统的通讯电缆,打开实验系统电源。

7). 编译、链接都正确并且上下位机通讯成功后,就可以下载程序,联机调试了。可以通过端口列表中的?端口测试来检查通讯是否正常。点击下载程序。为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。下载成功后,在输出区的结果窗中会显示“加载成功!”,表示程序已正确下载。起始运行语句下会有一条绿色的背景。如图6所示。

图6 加载成功显示界面

8). 将输出区切换到调试窗口,使用D0000:3000命令查看内存3000H起始地址的数据,如图7所示。存储器在初始状态时,默认数据为CC。

图7 内存地址单元数据显示

9). 点击按钮运行程序,待程序运行停止后,通过D0000:3000命令来观察程序运行结果。如图8所示。

图8 运行程序后数据变化显示

10). 也可以通过设臵断点,断点显示如图9所示,然后运行程序,当遇到断点时程序会停下来,然后观察数据。可以使用E0000:3000来改变该地址单元的数据,如图10所示,输入11后,按空格键,可以接着输入第二个数,如22,结束输入按,回车键。

图9 断点设臵显示

图10 修改内存单元数据显示界面

5 操作练习

编写程序,将内存3500H单元开始的8个数据复制到3600H单元开始的数据区中。通过调试验证程序功能,使用E命令修改3500H单元开始的数据,运行程序后使用D命令查看3600H单元开始的数据。

实验二 分支程序设计实验

1 实验目的

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

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

PC机一台,TD-PITE实验装臵一套。 3 实验内容

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

设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。 4 实验步骤

1). 编写实验程序,经编译、链接无误后装入系统。 2). 用E命令在以SI为起始地址的单元中填入16个数。 3). 运行程序,待程序运行停止。

4). 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。

5). 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。

实验三 循环程序设计实验

1 实验目的

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

2). 掌握循环结构程序设计的方法以及调试方法。 2 实验设备

PC机一台,TD-PITE实验装臵一套。 3 实验内容

1)计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。

2)求某数据区内负数的个数 设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。 4 实验步骤

(1)编写实验程序,编译、链接无误后装入系统。 (2)运行程序,待程序运行停止。

(3)运算结果存储在寄存器中,查看结果是否正确。 (4)可以改变条件来验证程序功能是否正确。

实验四

实验五 8259中断控制实验

1 实验目的

1). 掌握8259中断控制器的工作原理。 2). 学习8259的应用编程方法。 3). 掌握8259级联方式的使用方法。 2 实验设备

PC机一台,TD-PITE实验装臵一套。 3 实验内容及步骤

1). 中断控制器8259简介

在Intel 386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A是一致的,操作方法也相同。从片的INT连接到主片的IR2信号上构成两片8259的级联。 在TD-PITE实验系统中,将主控制器的IR6、IR7以及从控制器的IR1开放出来供实验使用,主片8259的IR4供系统串口使用。

表4 ICU寄存器列表 寄存器 口地址 ICW1(主) ICW10020H (从) (只写) 00A0H ICW2(主) ICW20021H (从) (只写) 00A1H ICW3(主) (只0021H 写) ICW3(从) (只00A1H 写) ICW4(主) ICW40021H (从) (只写) 00A1H OCW1(主) OCW10021H (从) (读/写) 00A1H OCW2(主) OCW20020H (从) (只写) 00A0H 功能描述 初始化命令字1: 决定中断请求信号为电平触发还是边沿触发。 初始化命令字2: 包含了8259的基址中断向量号,基址中断向量是IR0的向量号,基址加1就是IR1的向量号,依此类推。 初始化命令字3: 用于识别从8259设备连接到主控制器的IR信号,内部的从8259连接到主8259的IR2信号上。 初始化命令字3: 表明内部从控制器级联到主片的IR2信号上。 初始化命令字4: 选择特殊全嵌套或全嵌套模式,使能中断自动结束方式。 操作命令字1: 中断屏蔽操作寄存器,可屏蔽相应的中断信号。 操作命令字2: 改变中断优先级和发送中断结束命令。 OCW3(主) OCW30020H (从) (只写) 00A0H IRR(主) IRR0020H (从) (只读) 00A0H ISR(主) ISR0020H (从) (只读) 00A0H POLL(主) POLL0020H (从) (只读) 0021H 00A0H 00A1H 操作命令字3: 使能特殊屏蔽方式,设臵中断查询方式,允许读出中断请求寄存器和当前中断服务寄存器。 中断请求: 指出挂起的中断请求。 当前中断服务: 指出当前正在被服务的中断请求。 查询状态字: 表明连接到8259上的设备是否需要服务,如果有中断请求,该字表明当前优先级最高的中断请求。 在对8259进行编程时,首先必须进行初始化。一般先使用CLI指令将所有的可屏蔽中断禁止,然后写入初始化命令字。8259有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。

在初始化主片8259时,写入初始化命令字的顺序是:ICW1、ICW2、ICW3、然后是ICW4,初始化从片8259的顺序与初始化主片8259的顺序是相同的。 系统启动时,主片8259已被初始化,且4号中断源(IR4)提供给与PC联机的串口通信使用,其它中断源被屏蔽。中断矢量地址与中断号之间的关系如下表所示: 主片中0 1 2 3 4 5 6 7 断序号 功能调08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 用 矢量地20H~24H~28H~2CH~30H~34H~38H~3CH~址 23H 27H 2BH 2FH 33H 37H 3BH 3FH 说明 未开放 未开放 未开放 未开放 串口 未开放 可用 可用 从片中0 1 2 3 4 5 6 7 断序号 功能调30H 31H 32H 33H 34H 35H 36H 37H 用 矢量地C0H~C4H~C8H~CCH~D0H~D4H~D8H~DCH~址 C3H C7H CBH CFH D3H D7H DBH DFH 说明 未开放 可用 未开放 未开放 未开放 未开放 未开放 未开放 2). 8259单中断实验

系统总线单次脉冲单元MIR7KK1+主8259实验接线图如下图所示,单次脉

冲输出与主片8259的IR7相连,每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符’7’。

图8259单中断实验接线图

3)参考程序: CODE SEGMENT ASSUME CS:CODE START: PUSH DS

MOV AX, 0000H MOV DS, AX

MOV AX, OFFSET MIR7 ;取中断入口地址 MOV SI, 003CH ;中断矢量地址 MOV [SI], AX ;填IRQ7的偏移矢量 MOV AX, CS ;段地址 MOV SI, 003EH

MOV [SI], AX ;填IRQ7的段地址矢量 CLI POP DS

;初始化主片8259 MOV AL, 11H

OUT 20H, AL ;ICW1 MOV AL, 08H

OUT 21H, AL ;ICW2 MOV AL, 04H

OUT 21H, AL ;ICW3 MOV AL, 01H

OUT 21H, AL ;ICW4 MOV AL, 6FH ;OCW1 OUT 21H, AL STI

AA1: NOP

JMP AA1 MIR7: STI

CALL DELAY MOV AX, 0137H

INT 10H ;显示字符7 MOV AX, 0120H INT 10H MOV AL, 20H

OUT 20H, AL ;中断结束命令 IRET

DELAY: PUSH CX

MOV CX, 0F00H AA0: PUSH AX

POP AX LOOP AA0 POP CX RET CODE ENDS END START 4实验步骤

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

(2)编写实验程序,经编译、链接无误后装入系统。

(3)运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符说明响应了中断。

7’,‘实验六 8255 并行接口实验

1 实验目的

1). 学习并掌握8255的工作方式及其应用。 2). 掌握8255典型应用电路的接法。

3). 掌握程序固化及脱机运行程序的方法。 2 实验设备

PC机一台,TD-PITE实验装置一套。 3 实验内容

1). 基本输入输出实验。编写程序,使8255的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。

2). 流水灯显示实验。编写程序,使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。 4 实验原理

8255内部结构及外部引脚

并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图4.31所示,8255工作方式控制字和C口按位臵位/复位控制字格式如

图所示。

8255控制字8255实验单元电路图如图所示:

5 实验步骤

1). 基本输入输出实验 本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。具体实验步骤如下述:

(1)实验接线图如下图所示,按图连接实验线路图。

(2)编写实验程序,经编译、连接无误后装入系统。

(3)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。 (4)点击?调试?下拉菜单中的?固化程序?项,将程序固化到系统存储器中。

(5)将短路跳线JDBG的短路块短接到RUN端,然后按复位按键,观察程序是否正常运行;关闭实验箱电源,稍等后再次打开电源,看固化的程序是否运行,验证程序功能。

(6)实验完毕后,请将短路跳线JDBG的短路块短接到DBG端。 实验程序清单(A82551.ASM) SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE

START: MOV DX, 0646H

MOV AL, 90H OUT DX, AL

AA1: MOV DX, 0640H

IN AL, DX CALL DELAY MOV DX, 0642H OUT DX, AL JMP AA1

DELAY: PUSH CX

MOV CX, 0F00H

AA2: PUSH AX

POP AX LOOP AA2 POP CX RET

CODE ENDS END START

2. 流水灯显示实验

使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。 实验接线图如图所示。

实验步骤如下所述:

(1)按图4.35连接实验线路图。

(2)编写实验程序,经编译、链接无误后装入系统。 (3)运行程序,观察LED灯的显示,验证程序功能。 (4)自己改变流水灯的方式,编写程序。 (5)固化程序并脱机运行。

实验七 8254定时/计数器应用实验

1 实验目的

1). 掌握8254的工作方式及应用编程。 2). 掌握8254典型应用电路的接法。 2 实验设备

PC机一台,TD-PITE实验装臵一套。 3 实验内容

1). 计数应用实验。编写程序,应用8254的计数功能,使用单次脉冲模拟计数,使每当按动‘KK1+’5次后,产生一次计数中断,并在屏幕上显示一个字符‘M’。

2). 定时应用实验。编写程序,应用8254的定时功能,产生一个1s的方波。 4 实验原理

8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。

8254具有以下基本功能:

(1)有3个独立的16位计数器。

(2)每个计数器可按二进制或十进制(BCD)计数。 (3)每个计数器可编程工作于6种不同工作方式。

(4)8254每个计数器允许的最高计数频率为10MHz(8253为2MHz)。 (5)8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。

(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。 计数初值公式为: n=fCLKi÷fOUTi

其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。

8254的内部结构框图和引脚图

它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方

式如下述:

(1)方式0:计数到0结束输出正跃变信号方式。 (2)方式1:硬件可重触发单稳方式。 (3)方式2:频率发生器方式。 (4)方式3:方波发生器。

(5)方式4:软件触发选通方式。 (6)方式5:硬件触发选通方式。 8254的控制字有两个:

一个用来设置计数器的工作方式,称为方式控制字; 另一个用来设置读回命令,称为读回控制字。 这两个控制字共用一个地址,由标识位来区分。 控制字格式如表所示。

8254实验单元电路图如下图所示:

5 实验步骤

1). 计数应用实验 编写程序,将8254的计数器0设置为方式3,计数值为十进制数4,用单次脉冲KK1+作为CLK0时钟,OUT0连接MIR7,每当KK1+按动5次后产生中断请求,在屏幕上显示字符?M?。 实验步骤:

(1)实验接线如图所示。

(2)编写实验程序,经编译、链接无误后装入系统。

(3)运行程序,按动KK1+产生单次脉冲,观察实验现象。 (4)改变计数值,验证8254的计数功能。 实验程序清单 A8254 EQU 06C0H B8254 EQU 06C2H C8254 EQU 06C4H CON8254 EQU 06C6H SSTACK SEGMENT STACK

DW 32 DUP(?) SSTACK ENDS CODE SEGMENT

ASSUME CS:CODE, SS:SSTACK START: PUSH DS MOV AX, 0000H MOV DS, AX

MOV AX, OFFSET IRQ7 ;取中断入口地址 MOV SI, 003CH ;中断矢量地址 MOV [SI], AX ;填IRQ7的偏移矢量 MOV AX, CS ;段地址 MOV SI, 003EH

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

POP DS ;初始化主片8259 MOV AL, 11H

OUT 20H, AL ;ICW1 MOV AL, 08H

OUT 21H, AL ;ICW2 MOV AL, 04H

OUT 21H, AL ;ICW3 MOV AL, 01H

OUT 21H, AL ;ICW4 MOV AL, 6FH ;OCW1 OUT 21H, AL ;8254 MOV DX, CON8254

MOV AL, 10H ;计数器0,方式0 OUT DX, AL MOV DX, A8254 MOV AL, 04H OUT DX, AL STI

AA1: JMP AA1

IRQ7: MOV DX, A8254 MOV AL, 04H

OUT DX, AL MOV AX, 014DH

INT 10H ;显示字符M MOV AX, 0120H INT 10H

MOV AL, 20H

OUT 20H, AL ;中断结束命令 IRET CODE ENDS END START