微机原理与接口技术实验指导书12级用

微机原理及接口技术

实 验 指 导 书

贵阳学院电子与通信工程学院

 2013

实验一 清零程序

一、实验目的

掌握8088汇编语言程序设计和调试方法,熟悉键盘操作。

二、实验内容

把RAM区(数据段)内4000H~40FFH单元的内容清零。

三、实验步骤

   1、画出程序流程框图。

      2、编写汇编源程序。

      3、将源程序编译为可执行文件。

4、使用DEBUG用连续或单步方式运行程序,检查4000~40FFH内容执行程序前后的变化。

四、数据记录

      1、程序流程图。

      2、源程序。

      3、实验结果。

五、思考

假使4000H~40FFH中内容改成FF,如何修改程序?

附:参考程序框图

参考程序

DATA SEGMENT

ORG 4000H

DB 256 DUP(?)

DATA  ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

       MOV DS,AX

    MOV BX,4000H

MOV AX,0000H

MOV CX,0080H

L1:  MOV [BX],AX

INC BX

INC BX

LOOP L1

       MOV AH,4CH

       INT 21H

CODE ENDS

    END START

实验二 数据区移动

一、实验目的

掌握RAM中的数据操作。

二、实验内容

把(数据段)4100H源RAM区首址内的16字节数据传送到(数据段)4200H目标RAM区。

程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数据块在存储器中可能有三种情况,如下图:

对于两个数据块分离的情况,如图(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。可以得出如下结论:当源数据首址 > 目的块首址时,从数据块首址开始传送数据。当源数据块首址 < 目的块首址时,从数据块末地址开始传送数据。

三、实验步骤

   1、画出程序流程框图。

      2、编写汇编源程序。

      3、将源程序编译为可执行文件。

4、使用DEBUG用连续或单步方式运行程序,检查4200~420FH内容执行程序前后的变化。

四、数据记录

      1、程序流程图。

      2、源程序。

      3、实验结果。

五、思考

      采用串操作指令实现程序。

附:参考程序框图

参考程序

DATA SEGMENT

    ORG 4100H

    STRING1 DB 16 DUP(7)

    ORG 4200H

    STRING2 DB 16 DUP(6)

DATA ENDS

CODE SEGMENT

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

START: MOV AX,DATA

    MOV DS,AX

    MOV ES,AX

MOV CX,0010H

MOV SI,4100H

MOV DI,4200H

CMP SI,DI

JA A42

ADD SI,CX

ADD DI,CX

A41: DEC SI

DEC DI

MOV AL, [SI]

MOV [DI],AL

LOOP A41

JMP EXIT

A42: MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

LOOP A42

EXIT MOV AH,4CH

INT 21H

CODE ENDS

END START


实验三 基于虚拟平台的并行接口综合应用

一、  实验目的

了解数字接口芯片基本原理,掌握8255A的使用方法、熟悉PROTEUS仿真平台的使用。

二、  实验内容

   由8255A的A口输入开关量,经过CPU处理后送8255A的B口。由B口接的LED显示开关量。

三、实验步骤

   1、搭建实验仿真用电路。

      2、编写汇编源程序。

      3、将源程序编译。

4、运行程序改变开关量的输入,观查LED显示。

四、数据记录

      1、电路原理图。

      2、程序流程图。

3、实验结果。

 

第二篇:微机原理与接口技术实验指导书1_[1]...

微机原理与接口技术

实验指导书

编者:王亭岭

华北水利水电学院

电气学院自动化教研室

二零##年三月


  

实验一  标志寄存器应用... 1

实验二  指令寻址方式练习... 4

实验三  分支结构程序设计... 6

实验四  循环结构程序设计... 7

实验五  子程序结构程序设计... 8

实验六  DOS系统功能调用程序设计... 12

实验七  BIOS中断调用程序设计... 14

实验八  定时器中断程序设计... 16


实验一  标志寄存器应用

一、实验目的与要求

1.掌握汇编程序的编译过程;

2.掌握8086的标志寄存器的特点。

二、实验内容

练习识别8086标志寄存器的各种标志位。PC机中状态位的表示如下:

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

       DATA  SEGMENT

           A  DW        123

           B  DW        456

        SUM  DW        ?

       DATA  ENDS

      CODE  SEGMENT     

              ASSUME    CS:CODE , DS:DATA

     START:   MOV       AX , DATA

              MOV       DS , AX

              MOV       AX , A

              SUB       AX , B

              MOV       SUM , AX

              MOV      AH,4CH

              INT        21H      

       CODE  ENDS

              END       START

五、实验步骤

步骤一、用鼠标单击开始菜单,单击运行。如下图所示:

步骤二、在运行窗口中键入cmd,回车进入命令提示符。如下图所示:

步骤三、在命令提示符中编译汇编源程序并连接*.obj文件。如下图所示:

1.C:\>D:  回车

2.D:\ >CD  MASM  回车

3.D:\MASM>MASM  SY1.ASM  回车

4.D:\MASM>LINK  SY1.OBJ  回车

步骤四、在命令提示行中运行并调试汇编程序。如下图所示:

1.D:\MASM>SY1.EXE  回车

2.D:\MASM>DEBUG  SY1.EXE  回车

六、实验结论

1.程序运行后变量SUM的值是多少?

2.程序运行前后标志寄存器的各标志位有何变化?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验二  指令寻址方式练习

一、实验目的与要求

1.掌握汇编语言调试工具(DEBUG)的基本使用方法;

2.掌握8086的寻址方式。

二、实验内容

练习识别8086相关指令的寻址方式。

DEBUG的命令及其功能:

其中<…>表示输入的内容;[…]表示为可选项。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

       DSEG  SEGMENT

       ARRAY  DB        11,56,78,8,76,90,96,33,21,06

       COUNT  DW        $ - ARRAY

       RELUST  DB        ?

       DSEG  ENDS

       SSEG  SEGMENT   PARA  STACK 'STACK'

        SDAT  DB        50 DUP (?)

         TOP  EQU       LENGTH  SDAT

       SSEG  ENDS

       CSEG  SEGMENT

              ASSUME    CS:CSEG , DS:DSEG , SS:SSEG      

      START:  MOV       AX , DSEG

              MOV       DS , AX

              MOV       AX , SSEG

              MOV       SS , AX

              MOV       AX ,TOP

              MOV       SP , AX

              MOV       BX , OFFSET ARRAY

              MOV       CX , COUNT

              DEC       CX

              MOV       AL , [BX]

      AGAIN:  INC       BX

              CMP       AL , [BX]

              JAE       NEXT

              MOV       AL , [BX]

       NEXT:  DEC       CX

              JNZ       AGAIN

              MOV      RELUST, AL

              MOV      AH, 4CH

              INT       21H      

       CSEG  ENDS

              END       START

五、实验步骤

1.D:\MASM>MASM  SY2.ASM

2.D:\MASM>LINK  SY2.OBJ

3.D:\MASM>SY2.EXE

4.D:\MASM>DEBUG  SY2.EXE

六、实验结论

1.指出参考程序中带下划线的指令中源操作数的寻址方式?

2.程序运行后AL中的值是多少?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验三  分支结构程序设计

一、实验目的与要求

学习并掌握汇编语言分支结构程序设计的方法。

二、实验内容

比较两个无符号数的大小,把大数存入MAX单元。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

       DSEG  SEGMENT

    NUMBER  DB        60H,66H

        MAX  DB        ?

       DSEG  ENDS

       CSEG  SEGMENT

              ASSUME    CS:CSEG,DS:DSEG

      START:  MOV       AX,DSEG

              MOV       DS,AX

              MOV       AL,NUMBER

              CMP       AL,NUMBER+1

              JNC       BRANCH

              MOV       AL,NUMBER+1

   BRANCH:  MOV       MAX,AL

              MOV       AH,4CH

              INT       21H

       CSEG  ENDS

              END       START

五、实验步骤

1.D:\MASM>MASM  SY3.ASM

2.D:\MASM>LINK  SY3.OBJ

3.D:\MASM>SY3.EXE

4.D:\MASM>DEBUG  SY3.EXE

六、实验结论

1.说明指令JNC的功能?

2.程序运行后变量MAX的值是多少?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验四  循环结构程序设计

一、实验目的与要求

学习并掌握汇编语言循环结构程序设计的方法。

二、实验内容

统计字符串STRING中空格的个数。源程序见实验参考程序。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

       DSEG  SEGMENT

      STRING  DB        'Where there is a will,there is a way. $'

      RESULT  DW        ?

       DSEG  ENDS

       CSEG  SEGMENT

              ASSUME    DS:DSEG,CS:CSEG

      START:  MOV       AX,DSEG

              MOV       DS,AX

              MOV       BX,OFFSET STRING

              MOV       DX,0

      NEXT:  MOV       AL,[BX]

              CMP       AL,'$'

              JZ        FIN

              CMP       AL,20H

              JNZ       CONT

              INC       DX

      CONT:  INC       BX

              JMP       NEXT

        FIN:  MOV       RESULT,DX

              MOV       AH,4CH

              INT       21H

       CSEG  ENDS

END       START

五、实验步骤

1.D:\MASM>MASM  SY4.ASM

2.D:\MASM>LINK  SY4.OBJ

3.D:\MASM>SY4.EXE

4.D:\MASM>DEBUG  SY4.EXE

六、实验结论

1.指出参考程序中循环体执行的次数?

2.程序运行后变量RESULT的值是多少?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验五  子程序结构程序设计

一、实验目的与要求

学习并掌握汇编语言子程序结构程序设计的方法。

二、实验内容

利用堆栈,采用递归子程序的方法,编程实现求N!。掌握汇编语言子程序结构程序设计的方法。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

图5-1  求阶乘示意图

DSEG   SEGMENT

      N      DW       5                 ;此变量要送人AX中,应定义为字类型

     RLT     DW       ?                 ;存放运算后的结果

DSEG   ENDS

SSEG   SEGMENT  STACK  ‘STACK’   ;声明组合类型后,系统自动为SS及SP

          DW   100  DUP  (?)         ;分配值

SSEG   ENDS

CSEG  SEGMENT

       ASSUME    CS :CSEG,DS:DSEG,SS:SSEG

START: MOV      AX, DSEG

             MOV      DS, AX

MOV      AX, N

CALL     REC               ;调用求阶乘递归子程序

BRK: MOV      RLT,AX          ;运算后的结果送人RLT中

MOV      AH, 4CH

INT      21H

REC    PROC    NEAR

         PUSH    DX            ;递归调用时DX(5、4、3、2)依次压入堆栈

         MOV    DX,  AX           

         CMP     AX,1

         JZ       EXIT

         DEC     AX

         CALL    REC           ;递归调用

AMD: MUL    DX             ;AX * DX→DXAX

EXIT: POP     DX

         RET

REC    ENDP

CSEG    ENDS

         END    START

五、实验步骤

1.D:\MASM>MASM  SY5.ASM

2.D:\MASM>LINK  SY5.OBJ

3.D:\MASM>SY5.EXE

4.D:\MASM>DEBUG  SY5.EXE

六、实验结论

1.说明利用堆栈实现参数传递的好处?

2.程序运行后变量SUM的值是多少?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验六  DOS系统功能调用程序设计

一、实验目的与要求

1.掌握DOS系统功能调用的方法;

2.正确使用功能调用中相关的入口参数和出口参数。

二、实验内容

接收键盘输入并在屏幕上显示。如果是“ESC”键,则退出程序(参考程序1);输出MESS中的字符串。按“ESC”键退出程序(参考程序2)。运行可执行文件并加以调试。分析运行结果。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

1.实验参考程序1:

       CSEG  SEGMENT

              ASSUME   CS:CSEG

      START:  MOV      AH , 1

     START1:  INT       21H

              CMP       AL , 1BH

              JZ         OVER

              JMP       START1

      OVER:  MOV      AH , 4CH

              INT       21H

       CSEG  ENDS

              END       START

2.实验参考程序2:

DSEG  SEGMENT

        MESS  DB        'HuaBeiShuiYuan!$'          ;显示信息

     DSEG  ENDS

     CSEG  SEGMENT

           ASSUME    CS: CSEG,  DS:DSEG

START:  MOV     AX,  DSEG

             MOV     DS,  AX                

             LEA     DX,  MESS

             MOV    AH,  9

             INT     21H

MOV    AH ,  07H       ;功能号为07H的功能是键盘输入无回显

     INPUT:  INT     21H

             CMP     AL ,  1BH       ;“ESC”键的ASCII是1BH

             JZ       EXIT            ;按“ESC”键退出程序

             JMP     INPUT

      EXIT:  MOV    AH ,  4CH

             INT     21H

CSEG  ENDS

       END    START

五、实验步骤

1.D:\MASM>MASM  SY6.ASM

2.D:\MASM>LINK  SY6.OBJ

3.D:\MASM>SY6.EXE

4.D:\MASM>DEBUG  SY6.EXE

六、实验结论

1.说明参考程序所完成的功能?

2.什么是DOS系统功能调用?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验七  BIOS中断调用程序设计

一、实验目的与要求

1.掌握BIOS中断调用的方法;

2.正确使用功能调用中相关的入口参数和出口参数。

二、实验内容

采用BIOS功能调用在屏幕上用多种属性显示字符串。运行可执行文件并加以调试。分析运行结果。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

ROW=5                      ;常量定义,显示信息的行号

COLUM=10                  ;显示信息的列号

ESCKEY=1BH                ;ESC键的ASCII码值

    DSEG  SEGMENT

        MESS  DB        'HuaBeiShuiYuan!'          ;显示信息

    MESS_LEN  =         $ - OFFSET  MESS        ;显示信息的长度

      COLORB  DB        07H,01H,0FH,70H,74H     ;颜色属性

      COLORE  LABEL     BYTE

     DSEG  ENDS

     CSEG  SEGMENT

             ASSUME    CS: CSEG, DS:DSEG, ES:DSEG

      START:  MOV       DI,  OFFSET COLORB-1   ;颜色指针初值

     NEXTC:  MOV       AX,  DSEG

              MOV       DS,  AX                  ;设置数据段段值

              MOV       ES,  AX                  ; ES指向数据段

              INC        DI                        ;调整颜色指针

              CMP       DI,  OFFSET COLORE      ;是否超过指定的颜色

              JNZ       NEXTE                     ;没有超过则跳转

              MOV       DI,  OFFSET COLORB      ;超过则重新指定为第一种颜色

     NEXTE:  MOV       BL,  [DI]                  ;取颜色

              MOV       SI,  OFFSET  MESS        ;取显示信息指针

              MOV       CX,  MESS_LEN           ;取显示信息长度

              MOV       DH,  ROW                ;设置显示开始行号

              MOV       DL,  COLUM              ;设置显示开始列号

              CALL      ECHO                     ;调用显示子程序

              MOV       AH,  0                    ; 0号功能为从键盘读字符

              INT       16H                        ;执行INT 16H的0号功能

              CMP       AL,  ESCKEY              ;是否为“ESC”键

              JNZ       NEXTC                     ;不是,继续循环

              MOV       AH,  4CH                 ;结束程序,返回DOS

              INT       21H      

;子程序入口参数包括:DS:SI = 字符串首地址

; CX = 字符串长度,BL = 属性,DH = 显示开始行号,DL=显示开始列号

       ECHO  PROC    NEAR                     

              JCXZ     ECHO2                      ;如果字符串长度为0,则结束

              MOV      BH,  0

              MOV      AH,  2                     ;设置光标位置

              INT      10H

              MOV      AL,  20H                   ;用指定属性写一空格

              MOV      AH,  9

              INT      10H

              MOV      AH,  0EH

       ECHO1: MOV      AL,  [SI]

              INC      SI

              INT      10H                         ;逐个显示字符

CALL    DELAY                      ;调用延时子程序

              LOOP     ECHO1

       ECHO2: RET

       ECHO  ENDP

DELAY  PROC  NEAR                         ;延时子程序

              PUSH   BX

              PUSH   CX

              MOV   BX,  500

       WAIT0: MOV   CX,  0FFFFH

       WAIT1: LOOP   WAIT1

              DEC   BX

              JNZ   WAIT0

              POP   CX

              POP   BX

              RET

     DELAY  ENDP

       CSEG  ENDS

              END    START

五、实验步骤

1.D:\MASM>MASM  SY7.ASM

2.D:\MASM>LINK  SY7.OBJ

3.D:\MASM>SY7.EXE

4.D:\MASM>DEBUG  SY7.EXE

六、实验结论

1.说明参考程序所完成的功能?

2.什么是BIOS中断调用?

3.分析实验结果及所遇到的问题,并说明解决的方法。

实验八  定时器中断程序设计

一、实验目的与要求

1.掌握中断的基本概念;

2.会将定时器中断子程序的入口地址写入中断向量表中;

3.理解简单的多任务操作。

二、实验内容

将自编的显示系统时间的中断服务子程序驻留在内存中,通过定时器中断(向量号为1CH)定时调用中断服务子程序来显示系统时间,同时可以在命令提示符下运行并调试其他程序,实现多任务操作。运行可执行文件并加以调试。分析运行结果。

三、实验设备

微型计算机(80x86系列)。

四、实验参考程序

CODE  SEGMENT

        ASSUME    CS:CODE, DS:CODE

START: JMP   GOSET

OLDCUR  DW        ?

OLD1C  DW        2 DUP(?)

NEWINT1C: PUSHF

        CALL   DWORD PTR CS:OLD1C   ;OLD1C中为1CH的中断向量

        PUSH   AX

        PUSH   BX

        PUSH   CX

        PUSH   DX

        XOR    BH,  BH           ;BH清零

        MOV   AH,  3             ;INT 10H的3号功能为读光标位置,

        INT    10H                 ;BH=页号,返回参数DH/DL=行/列

        MOV   CS:OLDCUR,  DX   ;光标位置保存在OLDCUR单元中

        MOV   AH,  2           ;INT 10H的2号功能为置光标位置, BH=页号

            XOR   BH,  BH            ;清零,表明为0页

            MOV   DX,  0146H       ; DH/DL=行/列,设置显示的时间在1行/70列

            INT    10H

            MOV  AH,  2             ;INT 1AH的2号功能为读电池供电时钟时间

       INT    1AH               ;出口参数:CH:CL:DH=时:分:秒

       PUSH  DX

         PUSH  CX

          POP   BX                 ;CX压入堆栈的值弹出给BX

          PUSH  BX

          CALL  SHOWBYTE        ;此处调用为显示小时

          CALL  SHOWCOLON       ;显示':'

          POP   BX

          XCHG  BH,  BL           ;BL中为分钟值

          CALL  SHOWBYTE        ;此处调用为显示分钟

          CALL  SHOWCOLON      ;显示':'

          POP    BX                ;DX压入堆栈的值弹出给BX                  

          CALL  SHOWBYTE        ;BL中为秒值

          MOV   DX,  CS:OLDCUR  ;恢复保存在OLDCUR单元中的光标位置

          MOV   AH,  2

          XOR   BH,  BH

       INT    10H

       POP    DX

       POP    CX

       POP    BX

       POP    AX

       IRET                      ;中断返回指令

SHOWBYTE  PROC   NEAR           ;将BX中的值转换为ASCII码后显示在屏幕上

        PUSH   BX

        MOV   CL,  4

        MOV   AL,  BH           ;BH中的值可以是当前时:分:秒

        SHR    AL,  CL

        ADD   AL,  30H          ;计算ASCII码

        CALL   SHOW            ;在光标位置显示字符和属性

        CALL   CURMOVE        ;子程序的功能为读当前光标并后移

        POP     BX

        MOV    AL,  BH

        AND    AL,  0FH

        ADD    AL,  30H

        CALL   SHOW

        CALL   CURMOVE

        RET

SHOWBYTE  ENDP

SHOWCOLON  PROC   NEAR           ;显示':'

         MOV    AL,':'

         CALL   SHOW

         CALL   CURMOVE

         RET

SHOWCOLON  ENDP

CURMOVE  PROC   NEAR            ;读当前光标并后移

         PUSH    AX

         PUSH    BX

         PUSH    CX

         PUSH    DX

         MOV    AH,  3           ;INT 10H的3号功能为读光标位置

         MOV    BH,  0

         INT     10H

         INC     DL               ;列增1,光标后移

         MOV   AH,  2            ;INT 10H的2号功能为置光标位置

         INT    10H

         POP    DX

         POP    CX

         POP    BX

         POP    AX

         RET

CURMOVE   ENDP

SHOW   PROC    NEAR        ;子程序的功能为在光标位置显示字符和属性

        PUSH    AX

        PUSH    BX

        PUSH    CX

        MOV    AH,  09H     ;INT 10H的9号功能为在光标位置显示字符和属性

        MOV    BX,  1FH     ; 1FH为属性值, 显示的字符为白底蓝字

        MOV    CX,  1       ; BH=显示页,AL/BL=字符/属性,CX=字符重复次数

        INT     10H         

        POP     CX

        POP     BX

        POP     AX

        RET

SHOW  ENDP

GOSET:  PUSH    CS

       POP     DS             ;DS指向代码段

       MOV    AX,  351CH    ;取中断向量,AH=35H的功能为获取中断向量,

       INT     21H            ;入口:AL=中断类型号,出口:ES:BX=中断向量

       MOV    OLD1C,  BX   ;中断向量(CS:IP)保存在OLD1C单元中

       MOV    BX,  ES

       MOV    OLD1C+2,  BX         ;中断向量的高16位

       MOV    DX,  OFFSET NEWINT1C   ;NEWINT1C为中断程序的入口地址

       MOV    AX,  251CH           ; AH=25H的功能为设置中断向量

       INT     21H                   ; 出口参数DS:DX=中断向量

       MOV    DX,  OFFSET GOSET 

       SUB     DX,  OFFSET START   ;计算代码段相对偏移量

       MOV    AX,  3100H           ;AH=31H的功能为程序终止并驻留

       INT     21H                   ;AL=返回码,DX=驻留区大小

CODE  ENDS

END   START

五、实验步骤

1.D:\MASM>MASM  SY8.ASM

2.D:\MASM>LINK  SY8.OBJ

3.D:\MASM>SY8.EXE

4.D:\MASM>DEBUG  SY8.EXE

六、实验结论

1.说明参考程序所完成的功能?

2.什么是中断向量表?

3.分析实验结果及所遇到的问题,并说明解决的方法。

相关推荐