微机课本例题

微机期末复习,整理了一些课本例题,看着例题复习能加深概念的理解。希望对大家也有帮助~

8259A中断控制器:

1、在IBM PC机中,从BUF区开始的数据缓存区中放有100个字符的字符串,中断请求信号通过IRQ2输入,每中断一次通过27FH地址端口输出一个字符,字符串全部输出后返回操作系统。

程序源如下:

;主程序

DATA     SEGMENT

       BUF      DB         100        DUP(?)          ;缓冲区

DATA     ENDS

CODE     SEGMENT

       ASSUME       CS:CODE,DS:DATA             ;设置段寄存器

START:

       MOV      AX, DATA

       MOV      DS, AX                                      ;设置DS

;设置中断向量          

       PUSH     DS                                             ;入栈保存DS

       MOV      AX, SEG INTPR                          ;中断向量段地址存入DS

       MOV      DS, AX

       MOV     DX, OFFSET INTPR                    ;中断向量偏移地址存入DX

       MOV      AH, 25H                                    ;DOS调用预置功能号

       MOV      AL, 0AH                                    ;预置中断类型码

       INT        21H                                           ;DOS功能调用

       POP       DS                                             ;DS出栈,恢复中断前断点状态

;开放IRQ2中断

       MOV      DX, 021H                                  ;设置8259A的基本地址

       IN          AL, DX                                       ;将21H端口地址命令内容存入AL中

       AND       AL, 0FBH                                   ;对AL设置OCW1打开IRQ2中断

       OUT       DX, AL                                       ;将AL修改后的内容返回21H端口地址

       MOV      SI, OFFSET BUF                         ;SI指向BUF首地址

       MOV      CX, 100                                     ;设置循环次数

       STI                                                          ;开中断IF=1

NEST:  HLT                                                  ;暂停程序,等待中断

              LOOP     NEXT                                 ;CX!=0,等待下一次中断

;关中断

              MOV      DX, 021H                           ;CX=0,21H端口地址内容送入AL

              IN          AL, DX

              OR         AL, 04H                              ;对AL内容修改(关闭IRQ2中断)

              OUT       DX, AL                                ;修改后的AL返回21H端口

              MOV      AH, 4CH                             ;DOS调用结束程序

              INT        21H

;执行中断服务

INTPR: MOV      AL, [SI]                               ;将SI指向的第一个字符存入AL

              MOV      DX,  27FH                          

              OUT       DX, AL                                ;将AL内容从27FH端口输出

              INC        SI                                       ;SI指向下一个字符

              MOV      DX, 020H                           ;设置OCW2内容,关中断送入20H端口

              MOV      AL, 20H

              OUT       DX, AL

              IRET                                                 ;返回主程序断点处继续执行主程序

CODE     ENDS

       END       START

说明:CPU执行到HLT时,不断进行空操作,直到接收到中断请求INTR,才退出空操作,转到中断服务程序。

         返回指令IRET具有恢复断点和标志的功能,所以在断点返回之前不用开中断。

2、在IBM PC机中,外部中断逻辑控制电路由两片8259A组成。主片端口地址为20H和21H,中断类型码为08H~0FH,从片端口地址为A0H和A1H,中断类型码为70H~77H。连接如下图:

 8259A初始化程序编程:

;主8259A的初始化

MOV        AL, 11H         ;ICW1初始化,边沿、级联

OUT         20H, AL        

MOV        AL, 08H         ;ICW2初始化,IRQ0中断类型码

OUT         21H, AL 

MOV        AL, 04H         ;ICW3初始化,级联

OUT         21H, AL 

MOV        AL, 11H         ;ICW4初始化,特殊全嵌套、普通EOI方式

OUT         21H, AL

;从片8259A初始化

MOV        AL, 11H         ;ICW1初始化,边沿、级联

OUT         0A0H, AL

MOV        AL, 70H         ;ICW2初始化,IRQ0中断类型码

OUT         0A1H, AL

MOV        AL, 02H         ;ICW3初始化,连接主的IRQ2

OUT         0A1H, AL

MOV        AL, 01H         ;ICW4初始化,普通全嵌套方式、普通EOI方式

OUT         0A1H, AL

;级联编程

;读ISR内容

MOV        AL, 0BH         ;OCW3初始化,读取ISR内容

OUT         0A0H, AL

NOP                              ;延时,等待8259A操作结束

IN            AL, 0A0H      ;读取ISR存入AL

;从片发EOI命令

MOV        AL, 20H         ;从片写入EOI命令

OUT         0A0H, AL

;主片发EOI命令

MOV        AL, 20H         ;主片写入EOI命令

OUT         20H, AL

8255A并行接口芯片

例:8255A工作于方式0,作为用查询方式工作的并行打印机的接口。写出打印子程序。

BUSY=1表示打印机在忙。只有当BUSY=0时,才能通过8255A向打印机输出一个字符。

现在,A口传送字符、工作方式0、输出方式。B口未用。C口工作方式0、高位输出、地位输入。

由图可确定8255A各端口地址

设输出字符存放在寄存器CL中,具体子程序如下:

PRINT:PUSH     AX                 ;保护AX

              MOV      AL, 81H         ;设置控制字,方式0、A口输出、C口低位输入

              OUT       0A3H, AL

              MOV      AL, 0DH        ;设置C口位控制字,使PC6为高电平1

              OUT       0A3H, AL

WAITO:IN          AL, 0A2H      ;检测BUSY是否为0

              AND       AL, 04H

              JNZ        WAITO          ;BUSY=1则跳转

              MOV     AL, CL           ;字符送入A端口

              OUT       0A0H, AL

              MOV      AL, 0CH         ;PC6一个负脉冲执行打印操作

              OUT       0A3H, AL

              INC        AL

              OUT       0A3H, AL

              POP       AX

       RET

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值