输入输出与中断

Posted howbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入输出与中断相关的知识,希望对你有一定的参考价值。

输入输出与中断

技术图片

题目1

问题描述

设有一输入设备,其数据端口的地址为FFE0H,并从端口FFE2H提供状态,当其D0位为1时表明输入数据准备好。试编写采用查询方式进行数据传送的程序段,要求从该设备读取64个字节并输入到从2000H开始的内存中

解答:

data segment
IOEA equ FFE0H
iosA equ FFE0H
data ends
code segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    
   
    mov cx,64
w: 
    mov dx,IOSA  
    in  al,dx
    test al,01h
    jz w
l:  mov dx,IOEA
    in al,dx
    mov [2000h],al
    loop w
    
    mov ah,4ch
    int 21h
code ends 
    end start

题目2

问题描述

如下图,假设LED数码管为共阴管,且段a接数据的最低位,段dp(小数点)接最高位,请编写显示内存单元DS:[1200H]中数据(为1位非压缩BCD码)的程序段。

技术图片
题目2

解答:

程序一

data segment
    IOA equ  83h
    mytab db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH; 共阳极数码管   
    mydata db 00000001b
data ends  
code segment 
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    
    xor bx,bx
    mov bl,mydata;
    mov al,mytab[bx]
     
    mov dx,IOA
    
    out dx,al 
    
    mov ah,4ch
    int 21h;
code ends
    end start

程序2 利用xlat指令

data segment
    IOA equ  83h
    mytab db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH; 共阳极数码管   
    mydata db 00000001b
data ends  
code segment 
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    
    
    lea bx,mytab;
    mov al,mydata
    xlat
     
    mov dx,IOA
    
    out dx,al 
    
    mov ah,4ch
    int 21h;
code ends
    end start

题目3

问题描述

下图所示为一个I/O接口电路。
1)该接口的操作类型是(输入)还是(输出);
2)主机对其I/O的传送控制方式是什么?  查询
3)图中信号IOR当执行什么指令时有效?  IN
4)结合一次数据的I/O过程,写出有关的几条指令。

技术图片
题目3

解答

  1. 输入
  2. 程序传送方式中的查询
  3. IN
  4. 相关指令如下
data segment
    IOA equ 200H
    IOS equ 201H 
data ends  
code segment 
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    
    
w:  
    mov dx,IOS
    in  al,dx
    test al,80h;
    jz w
    
    mov dx,IOA
    in  al,dx
    
    mov ah,4ch
    int 21h;
code ends
    end start

题目4

题目描述

设某系统中CPU的寄存器和存储区的一段内容如下:
(20H)=3CH、(21H)=00H、(22H)=86H、(23H)=0EH、CS=2000H、IP=0010H、SS=1000H、SP=0100H、FLAGS=0240H
这时执行INT 8指令
(1) 程序转向何处执行?
(2) 堆栈栈顶6个内存单元的地址及内容分别是什么?

解答:

  1. 程序转向何处执行

技术图片

  1. 堆栈栈顶6个内存单元的地址及内容分别是什么?

    这个问题主要考察中断时,系统是如何保护现场的

    具体过程如下

技术图片

技术图片

结果如如表4-1
技术图片

题目5

题目描述

什么是中断向量?什么是中断向量表?若某外部可屏蔽中断的类型号为30H,则中断服务程序的入口地址为1020H:3040H,用8086汇编语言编程实现将该中断服务程序的入口地址装入中断向量表中。

解答:

  1. 中断向量是指中断服务程序的入口地址

  2. 中断向量表是存放256个中断向量的存储区域

  3. 装入中断服务子程序

    程序1:基于DOS中断 无需计算中断向量地址
    功能号:AH=25H
    入口参数: AL=中断类型号
               DS=中断服务程序入口地址的段地址
               DX=中段服务程序入口地址的偏移地址
               
    具体程序
    push ds
    ;准备入口参数
    mov dx,3040H
    mov ax,1020H
    mov ds,ax
    ;调用dos中断
    ;设置功能号
    mov ah,25h
    ;设置入口参数
    mov al,30h
    int 21h
    程序2直接装入法
    需要计算向量入口地址

    中断号×4即为中断向量地址,依次装入IP,与CS。

技术图片

可知中断向量地址为 COH
具体程序如下

   ;设置段地址
   push ds
   xor ax,ax
   mov ds,ax
   ;首先装入IP
   mov ax,3040H
   mov [0COH],ax
   ;装入CS
   mov ax,1020H
   mov [0C2],ax

题目6

题目描述

若某8086系统采用单片8259A管理外部中断,其中的一个中断类型号为0DH,则它的中断向量地址指针是多少?这个中断源应接在8259A的哪个输入端上?若该中断服务程序的入口地址为D000H:3200H,则其向量区对应4个单元的数值依次是多少?

解答:

  1. 中断向量指针
技术图片
  1. 8259A中断引脚的确定
技术图片

取低3位,101b=5d,所以对应IR5

以上是关于输入输出与中断的主要内容,如果未能解决你的问题,请参考以下文章

存储中断总线及输入输出系统

输入/输出系统

C++第16课中断与连续

输入输出系统

输入输出系统

输入输出设备IO设备与主机信息传送的控制方式