微机原理实验报告

2.1显示程序实验

1.实验目的

(1)掌握在PC机上以十六进制形式显示数据的方法。

(2)掌握部分DOS功能调用使用方法。

(3)熟悉Windows集成操作软件Tdpit的操作环境和操作方法

2.实验设备

 PC微机一台、TD-PITD实验系统一套。

3.实验步骤和结果

  (1)编辑源代码

STACK1 SEGMENT STACK

   DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'

MES1 DB 'Show 34H as hex:',0AH,0DH,'$'

SD DB 15H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

      MOV DS,AX

      MOV DX,OFFSET MES

      MOV AH,09H

      INT 21H

      MOV DX,OFFSET MES1

      MOV AH,09H

      INT 21H

      MOV SI,OFFSET SD

      MOV AL,DS:[SI]

      AND AL,0F0H

      MOV CL,4

      SHR AL,CL

      CMP AL,0AH

      JB C2

      ADD AL,07H

C2:ADD AL,30H

    MOV DL,AL

    MOV AH,02H

    INT 21H

    MOV AL,DS:[SI]

    AND AL,0FH

    CMP AL,0AH

    JB C3

    ADD AL,07H

C3:ADD AL,30H

    MOV DL,AL

    MOV AH,02H

    INT 21H

KEY:MOV AH,1

    INT 16H

    JZ KEY

    MOV AX,4C00H

    INT 21H

    CODE ENDS

END START

(2)实验结果图所示:

  

2.2 数据传送实验

1. 实验目的

1. 掌握与数据有关的不同寻址方式。

2. 继续熟悉实验操作软件的环境及使用方法。

2.实验设备

PC 微机一台、TD-PITD 实验系统一套。

3.实验内容

本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏

幕上。参考实验程序如下。

实验程序清单(例程文件名:A2.ASM)

DDATA SEGMENT                     ;定义源数据段

MSR DB "HELLO,WORLD!$"

LEN EQU $- MSR

DDATA ENDS

EXDA SEGMENT                        ;定义附加数据段

MSD  DB LEN DUP(?)

EXDA ENDS

MYSTACK SEGMENT STACK     ;定义堆栈段

DW 20 DUP(?)

MYSTACK ENDS

CODE SEGMENT                         ;定义代码段

ASSUME CS:CODE,DS:DDATA,ES:EXDA

START:MOV AX,DDATA

MOV DS,AX                                  ;装载数据段寄存器

MOV AX,EXDA

MOV ES,AX                                   ;装载附加数据段寄存器

MOV SI,OFFSET MSR                     ;设置 SI

MOV DI,OFFSET MSD                    ;设置 DI

MOV CX,LEN

NEXT: MOV AL,[SI]                         ;开始传输数据

MOV ES:[DI],AL

INC SI

INC DI

DEC CX

JNZ NEXT

PUSH ES

POP DS                                               ;将附加段寄存器指向的段值赋给数据段寄存器

MOV DX,OFFSET MSD

MOV AH,9

INT 21H

KEY: MOV AH,1                                 ;判断是否有按键按下?

INT 16H                                              ;(为观察运行结果,使程序有控制的退出)

JZ KEY

MOV AX,4C00H                                 ;结束程序退出

INT 21H

CODE ENDS

END START

将程序主体部分的寄存器间接寻址方式改为相对寻址方式,则如下所示。

MOV BX,0

MOV CX,LEN

NEXT: MOV AL,MSR[BX]

MOV ES:MSD[BX],AL

INC BX

LOOP NEXT

4.实验步骤

(1) 编辑源代码

将程序源代码编辑完成之后修改文件名为A2.asm保存在目录E:\masm5.0\MYCODE下。

(2) 编译A2.asm文件

进入DOS系统打开MASM5.0所在目录,并编译A2.asm文件,直到编译无错误。如图2-2-2所示。

(3) 连接A2.obj文件

使用LINK命令连接A2.obj文件,生成A2.exe文件。运行A2.exe文件,查看运行结果。如图所示:

运行程序后,屏幕显示“HELLO, WORLD!”。说明程序运行正确。下面通过调试查看内存数据来了解数据的传输过程。

(4) DEBUG调试

输入命令E:\masm5.0>debug a2.exe 回车可进入调试系统,首先对a2.exe进行反汇编,如图所示:

从反汇编的程序上可以看出,原字符串存放的段地址为0,13E5,偏移地址为0x0000,复制字符串的母的地址为0x13E6,偏移地址为0x0000,字符串的长度为0x0D。下面通过内存查看命令源地址和目的地址的数据情况,如图所示:

从此图可以直接看出原地址所存放的数据位“HELLO,WORLD!”,目的地址存放的数据全部为0。现将程序运行至13EA:001B处,程序运行到此处时,可完成一个字节的数据传输,查看目的地址的内存数据。如图所示。

输入一个字节后可在目的地址的第一个数据位0x48,其ASCII码为‘H’。同时也可观察AX寄存的低8位为0x48.将程序运行至13EA:001D处,此时程序已经跳出了数据传送的循环,数据的传送工作已将完成。查看目的地址的内存数据,如上图所示。

2.5 分支程序设计实验

1.实验目的

掌握分支程序的设计方法。

2.实验设备

PC 微机一台、TD-PITD 实验系统一套。

3.实验内容及说明

         程序有顺序、循环、分支和子程序四种结构形式,分支结构的示意图如图 2-5-1 所示。本实验要求参考图 2-5-2 流程,通过求无符号字节序列中的最大值和最小值来反映分支程序的结构形式。

          实验可以使用 BH,BL 作为暂存现行的最大值和最小值,且在程序的初始,将 BH 和 BL 初始化为首字节的内容,然后进入循环操作。在循环操作中,依次从字节序列中逐个取出一个字节的内容与 BH,BL 进行比较,若取出的字节内容比 BH 的内容大或比 BL 中的内容小,则修改之。当循环结束操作时,将 BH,BL 分别送屏幕显示。

实验程序如下:

STACK SEGMENT STACK 'STACK'

      DW 256 DUP(?)

STACK ENDS

DATA SEGMENT                               

MSR DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H

DATA ENDS

CODE SEGMENT                                

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

START:MOV AX,DATA

   MOV DS,AX                                                           

   MOV SI,OFFSET MSR                       

   MOV CX,7

   CMP CX,0H

   JZ NEXT0

   MOV BH,[SI]

   MOV BL,[SI]

NEXT1:

   INC SI

   MOV AL,[SI]

   CMP AL,BH

   JNB NEXT2

   CMP AL,BL

   JNA NEXT3

NEXT2: MOV BH,AL

   JMP NEXT5  

NEXT3: MOV BL,AL

NEXT5:DEC CX

   CMP CX,0H

   JNZ NEXT1

NEXT0:RET

CODE ENDS

   END START

4.实验步骤

(1) 运行 Tdpit 集成操作软件,根据实验要求编写程序,在数据段声明 8 个的数据:0D9H,

07H,8BH,0C5H,0EBH,04H,9DH,0F9H。

(2) 对实验程序进行编译、链接。

(3) 使用运行命令运行程序,观察运行结果。

3.1 8255 并行接口实验

1.实验目的

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

2. 掌握 8255 典型应用电路的接法。

2.实验设备

PC 机一台,TD-PITD 实验装置一套。

3.实验内容

1. 基本输入输出实验。编写程序,使 8255 的 A 口为输出,B 口为输入,完成拨动开关

到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。

2. 流水灯显示实验。编写程序,使 8255 的 A 口和 B 口均为输出,数据灯 D7~D0 由左

向右,每次仅亮一个灯,循环显示,D15~D8 与 D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。

4.实验原理

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

8255 实验单元电路图如图 3-1-3 所示:

5.实验步骤

1. 基本输入输出实验

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

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

(2)运行 Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。

(3)运行程序,改变拨动开关,同时观察 LED 灯的显示,验证程序功能。

实验程序清单(T8255-1.ASM)

IOY0 EQU 3000H              ;片选 IOY0 对应的端口始地址

MY8255_A EQU IOY0+00H*2     ;8255 的 A 口地址

MY8255_B EQU IOY0+01H*2     ;8255 的 B 口地址

MY8255_C EQU IOY0+02H*2     ;8255 的 C 口地址

MY8255_MODE EQU IOY0+03H*2  ;8255 的控制寄存器地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,MY8255_MODE   ;初始化 8255 工作方式

MOV AL,82H                  ;工作方式 0,A 口输出,B 口输入

OUT DX,AL

LOOP1: MOV DX,MY8255_B      ;读 B 口

IN AL,DX

MOV DX,MY8255_A             ;写 A 口

OUT DX,AL

MOV AH,1                   ;判断是否有按键按下

INT 16H

JZ LOOP1                   ;无按键则跳回继续循环,有则退出

QUIT: MOV AX,4C00H         ;结束程序退出

INT 21H

CODE ENDS

END START

2. 流水灯显示实验

使 8255 的 A 口和 B 口均为输出,数据灯 D7~D0 由左向右,每次仅亮一个灯,循环显

示,D15~D8 与 D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。实验接线图如图 3-1-5 所示。实验步骤如下所述:

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

(2)运行 Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。

(3)运行程序,观察 LED 灯的显示,验证程序功能。

(4)自己改变流水灯的方式,编写程序。

实验程序清单(T8255-2.ASM)

IOY0 EQU 3000H                    ;片选 IOY0 对应的端口始地址

MY8255_A EQU IOY0+00H*2           ;8255 的 A 口地址

MY8255_B EQU IOY0+01H*2           ;8255 的 B 口地址

MY8255_C EQU IOY0+02H*2            ;8255 的 C 口地址

MY8255_MODE EQU IOY0+03H*2        ;8255 的控制寄存器地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

LA DB ?                           ;定义数据变量

LB DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV DX,MY8255_MODE                ;定义 8255 工作方式

MOV AL,80H                        ;工作方式 0,A 口和 B 口为输出

OUT DX,AL

MOV DX,MY8255_A                   ;写 A 口发出的起始数据

MOV AL,80H

OUT DX,AL

MOV LA,AL

MOV DX,MY8255_B                   ;写 B 口发出的起始数据

MOV AL,01H

OUT DX,AL

MOV LB,AL

LOOP1: CALL DALLY

MOV AL,LA                        ;将 A 口起始数据右移再写入 A 口

ROR AL,1

MOV LA,AL

MOV DX,MY8255_A

OUT DX,AL

MOV AL,LB                     ;将 B 口起始数据左移再写入 B 口

ROL AL,1

MOV LB,AL

MOV DX,MY8255_B

OUT DX,AL

MOV AH,1                      ;判断是否有按键按下

INT 16H

JZ LOOP1                      ;无按键则跳回继续循环,有则退出

QUIT: MOV AX,4C00H            ;结束程序退出

INT 21H

DALLY PROC NEAR               ;软件延时子程序

PUSH CX

PUSH AX

MOV CX,0FFFH

D1: MOV AX,0FFFFH

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY ENDP

CODE ENDS

END START

上课实验内容:

;实验A3-1

;实验程序清单(T8255-3.ASM)

IOY0 EQU 3000H

MY8255_A EQU IOY0+00H*2

MY8255_B EQU IOY0+01H*2

MY8255_C EQU IOY0+02H*2

MY8255_MODE EQU IOY0+03H*2

STACK1 SEGMENT STACK

   DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

LA DB ?

LB DB ?

DATA ENDS

CODE SEGMENT

   ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

   MOV DS,AX

   MOV DX,MY8255_MODE

   MOV AL,80H

   OUT DX,AL

   MOV DX,MY8255_A

   MOV AL,01H

   OUT DX,AL

   MOV LA,AL

   MOV DX,MY8255_B

   MOV AL,08H

   OUT DX,AL

   MOV LB,AL

QUIT:MOV AX,4C00H

   INT 21H

CODE ENDS

   END START

相关推荐