微机原理与接口技术-第七章输入输出接口

news/2024/5/18 22:52:49/文章来源:https://blog.csdn.net/weixin_61426225/article/details/133999827

文章目录

  • I/O接口概述
      • I/O接口的典型结构
      • 基本功能
    • I/O端口的编址
      • 独立编址
      • 统一编址
    • 输入输出指令
      • I/O寻址方式
      • I/O数据传输量
      • I/O保护
    • 16位DOS应用程序
      • DOS平台的源程序框架
      • DOS功能调用
  • 无条件传送和查询传送
    • 无条件传送
      • 三态缓冲器
      • 锁存器
      • 接口电路
    • 查询传送
      • 查询输入端口
      • 查询输出端口
  • 中断控制系统
    • 中断传送
    • 中断源识别
    • 中断优先权排队
    • 中断嵌套
    • IA-32的中断系统
      • 内部中断
      • 外部中断
      • 中断和异常的响应过程
      • 中断描述符和中断向量表
    • 内部中断服务程序
      • 特点
    • 中断控制器
      • 8259A的寄存器
      • 8259A的工作方式
    • 外部中断服务程序

I/O接口概述

I/O接口的典型结构

  • 内部结构
    I/O接口电路实际是比较复杂的,但从应用角度,我们可以简化为3类可编程的寄存器,分别对应3类信号。
  1. 数据寄存器:保存处理器和外设之间交换的数据,可以分为数据输入寄存器和数据输出寄存器
  2. 状态寄存器:保存外设或其接口电路当前的工作状态信息
  3. 控制寄存器:保存处理器控制接口电路和外设操作的有关信息
  • 外部特性
    接口电路位于处理器和外设之间,起着桥梁作用
  1. 面向处理器一侧的信号与处理器总线或系统总线类似,有数据信号、地址信号、控制信号,以方便与处理器连接
  2. 面向外设一侧的信号与外设有关,以便与外设连接,由于外设种类太多,面向外设的一侧也各不相同。

基本功能

  1. 数据缓冲
  2. 信号变换

I/O端口的编址

独立编址

独立编址是将I/O端口单独编排地址,独立于存储器地址。

  • 优点
    1. 不占用存储器空间
    2. 专门的I/O指令比较清晰
  • 缺点:I/O指令功能简单,寻址方式没有存储器丰富
    80x86采用独立编址方式,只使用最低16位地址信号,对应64K个8位I/O端口,这64K地址空间补需要分段管理,只能使用指令输入指令IN,和输出指令OUT访问

统一编址

统一编址是将I/O端口和存储器地址统一编排,共享一个地址空间。

  • 优点
    1. 不需要设计专门的I/O指令和引脚
    2. 具有和存储器寻址一样丰富的寻址方式
  • 缺点
    1. 占用存储地址空间
    2. 通过指令不易辨认是I/O操作

输入输出指令

  • 输入指令IN AL/AX/EAX, i8/DX
  • 输出指令OUT i8/DX, AL/AX/EAX

I/O寻址方式

IA-32处理器的I/O寻址方式只有两种,直接寻址和通过DX间接寻址

  • 直接寻址:由I/O指令直接提供8位I/O地址,只能寻址最低256个I/O地址(00-FFH)
  • 间接寻址:用DX寄存器保存访问的I/O地址,能访问的地址(0000-FFFFH)

I/O数据传输量

IN/OUT指令只允许通过累加寄存器EAX与外设交换数据。8位I/O指令使用AL,16位I/O指令使用AX,32位I/O指令使用EAX

  • IN指令:外设数据进入处理器的AL/AX/EAX
  • OUT指令:处理器数据通过AL/AX/EAX送出
in al, 21h ;从地址为21H的I/O端口读一个字节数据到AL
mov dx, 300h ;DX指向300H端口
out dx, al ;将AL中的字节数据送到地址为300H(DX)的I/O端口

I/O保护

对于输入输出指令INOUTINSOUTS,还有中断标志设置指令CLISTI的执行涉及I/O端口,称之为I/O敏感指令。
标志寄存器EFLAGS有一个IOPL字段,表示程序具有的I/O特权级,只有程序的当前特权级低于或等于I/O特权级,I/O敏感指令才可以执行

16位DOS应用程序

DOS平台的源程序框架

; eg0700.asm in DOSinclude io16.inc	;包含16位输入输出文件.data 	;定义数据段代填....code	;定义代码段
start:mov ax, @datamov ds, ax.....exit 0	;程序正常执行结束.....end start	;汇编结束

eg:输出Hello World

	include io16.inc.data
msg	byte 'Hello, Assembly!', 13, 10, 0	;定义要显示的字符串.code
start:mov ax,@datamov ds,axmov eax, offset msgcall dispmsgexit 0end start

DOS功能调用

DOS利用软件中断方式提供系统功能。IA-32处理器支持256个中断,每个中断用一个中断编号区别,即中断0~中断255号,中断调用指令是INT N,其中N表示调用的中断号。
DOS系统调用一般有如下四个步骤:

  1. 在AH寄存器中设置系统功能调用号
  2. 在指定寄存器中设置入口参数
  3. 用中断调用指令(INT N)执行功能调用
  4. 根据出口参数分析功能调用的执行情况
    1、3这两个步骤是一定需要的,2、4只是某些指令会用到
    DOS功能调用的终端号主要是21H,利用AH寄存器区别各种子功能
    image
    dispmsg子程序
dispmsg	procpush eaxpush ebxpush edxmov ebx, eax
dispm1:	mov al, [ebx] ;取一个字符test al, al	;判断是否结尾(0)jz	dispmsg2mov ah, 2	;AH=2,显示一个字符的DOS功能mov dl, al	;设置入口参数int	21h		;调用DOS(INT 21H)系统功能inc ebxjmp	dispm1
dispm2: pop edxpop ebxpop eaxret
dispmsg	endp

无条件传送和查询传送

I/O接口的主要功能之一就是实现外设和主机的数据传送。数据传送可以通过处理器执行I/O指令完成,分为无条件传送、查询传送、中断传送。外设数据传送还可以以硬件为主加快传输速度,如直接存储器存取(DMA)、使用专门的I/O处理器

无条件传送

有些设备状态很少变化,可以认为总是处于就绪状态,随时可以进行数据传送,这就是无条件传送,有时也称为立即传送或同步传送
用于无条件传送的I/O接口电路十分简单,接口中只考虑数据缓冲,不考虑信号联络

三态缓冲器

三态指的是01高阻值
image

锁存器

在输出接口电路中,一般会安排一个锁存环节(锁存器),以便将数据总线的数据暂时锁存,使较慢的设备有足够的时间进行处理,此时处理器可以利用系统总线完成其他工作。

接口电路

  • 74LS244:为输入端口
  • 74LS273:为输出端口
  • D0~D7:数据总线
  • A0~A15:地址线
  • 74LS06反相驱动器:相当于8个非门

image

mov dx, 8000h ;dx向输入端口
in al, ax 	;从输入端口读取开关状态
not al		;将开关取反
out dx, al	;送入输出端口
call delay	;调用子程序Dalay进行延时

查询传送

查询传送也称为异步传送。当处理器需要与外设交换数据时,首先查询外设的工作状态,只有在外设准备就绪的情况下才进行数据传送。
image

查询输入端口

image

		mov dx, 5001h	;dx指向状态端口
status:	in al, dx		;读取端口的状态test al, 01		;查询状态是否九旬jz status		;D0=0状态未就绪继续查询dec dx			;D0=1状态已就绪,dx指向5000hin al, dx		;从数据端口读数据

查询输出端口

image

  • 8位锁存器:构成数据输出寄存器(数据端口),一侧连接系统的输出总线,一侧连接输出设备
  • 1位三态缓冲器和1位锁存器构成状态寄存器(状态端口):I/O译码地址位5001H

当处理器想要输出数据到外设时,首先应该查询状态端口,图上电路设计D7=0时0,表示外设已经准备就绪可以接收数据。此时处理器可以将数据写入数据端口,写入信号也作为D触发器的控制信号将D触发器置位为1,以便通知外设接收数据。当外设取走数据后~ACK会将D触发器重新置位为0,这时外设就又处于可以接收数据的状态了

		mov dx, 5001h
status:in al, dxtest al, 80hinz statusdec dxmov al, bufout dx, al

中断控制系统

中断传送

image

  • 中断请求:中断请求是外设向处理器提出的,对处理器来说它是随机发生的,但处理器的响应只会在每条指令的最后一个时钟周期区采样中断请求的输入引脚,所以外设提出的中断请求必须维持到得到响应
  • 中断响应:中断响应是有一定条件的
    1. 处理器只在每条指令执行完时才会去检测中断输入引脚,才可能响应
    2. 对可屏蔽中断,处理器应处在允许可屏蔽中断响应的状态
    3. 在中断请求时,处理器优先响应优先级更高的中断
    4. 中断请求应保持到响应他为止
    5. 如果遇到处理器正在执行中断返回、开中断等指令,则它必须在执行完现行指令后再接着执行一条其他指令,然后才能响应新的中断。这么做的目的是隔离两个中断
  • 关中断:处理器在响应中断后会关闭中断即不在响应其他中断,如果允许中断服务程序也被中断(中断嵌套),需要用户编程再次打开中断
  • 断点保护:保护断点地址和标志寄存器
  • 中断源识别:微机系统可能有多个发生中断的原因,处理器首先识别出是哪个中断源提出请求
  • 保护现场:一般是保护寄存器
  • 中断服务:处理器执行响应的中断服务程序
  • 恢复现场:恢复原来的工作环境
  • 开中断:处理器响应中断后,一般都会自动关闭中断。如果用户不将它打开,在整个中断过程中处理器不会再响应其他新的中断,至少在中断返回前将中断打开
  • 中断返回IRET指令,相较于RET指令会进行更多的恢复工作,如恢复标志寄存器

中断源识别

中断源识别主要采用中断向量

中断优先权排队

中断优先权排队是系统设计者事先为每个中断源确定优先处理顺序

中断嵌套

当处理器正在为某个中断进行服务时,又有新的中断处理原则:

  1. 新的中断请求优先权低于或等于当前正在服务的中断,则不予处理或待当前中断完成后再处理
  2. 新的中断请求优先权高于或等于当前正在服务的中断,处理器暂停当前工作,先服务级别更高的中断

IA-32的中断系统

IA-32的中断系统采用向量中断机制,能处理255个中断,用中断向量号0~255,其中可屏蔽中断还需要借助外部中断控制器实现优先权管理

内部中断

内部中断是由于处理器内部的执行程序出现异常引起的程序中断,也称异常,例如执行除法指令出现的除法错误异常(向量号0),用于程序调试的异常(向量号1)和断点异常(向量号3)等

  1. 除法错异常
    在执行指令DIV或IDIV时,若除数为0或商超过了寄存器所能表达的范围,则产生一个向量号为0的内部终端,称为除法错异常
; ata
msg	byte 0dh, 0ah,'No divide overflow!',0
; .codecall readuiwmov bl, 1div blmov eax, offset msg ;没有除法错误显示信息call dipmsg
  1. 溢出异常
    在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量号为4的内部中断,称为溢出中断
; .ata
msg byte 0dh, 0ah, 'NO overflow !', 0
; .codecall readuib	;输入一个无符号整数all al, 100		jno noflow		;没有产生溢出,则输出未产生溢出信息into			;有溢出产生溢出中断jmp done		
noflow:mov eax, offset msgcall dispmsg
done:

外部中断

外部中断时由于处理器外部提出中断请求引起的程序中断。相对于处理器来说,外部中断时随机产生的,索引这里外部中断才是真正意义上的中断。外部中断分为两种,一种是可屏蔽中断,另一种是不可屏蔽中断

  • 不屏蔽中断:
    外部通过不可屏蔽中断(NMI)请求信号向处理器提出中断请求,处理器在当前指令执行结束就予以响应,这个终端就是不可屏蔽中断,IA-处理器给不可屏蔽中断分配的向量号是2,主要用于处理系统的意外或故障,如电源掉电、存储器读写错误
  • 可屏蔽中断
    对来自外部可屏蔽中断请求信号,在当前指令结束执行后予以响应,同时输出可屏蔽中断响应信号~INTA
    除了要求当前指令执行结束外,对可屏蔽中断请求,处理器是否响应还取决于中断标志的状态。在IA-处理器中,若IF=1,则处理器是开中断的,可以响应,若IF=0,则处理器是关中断的,不能响应。

中断和异常的响应过程

image

中断描述符和中断向量表

  • 中断描述符保护方式下,每个中断服务程序由一个中断描述符指向,中断描述符中保存着中断服务程序的16位段选择器、32位偏移地址和中断特权层,中断描述符保存在系统的中断描述符表中,由中断描述符表地址寄存器IDTR给出其地址。系统最多有256个中断,每个中断描述符包含8个字节,所以中断描述符表最大2KB(256*8),以中断描述符表所在的地址为基础,中断向量号乘以8就对用其中断描述符

  • 中断向量表实地址方式下使用中断向量表直接保存中断服务程序的入口地址。中断服务程序的地址含有16位段基地址CS(高字部分)和16位偏移地址IP(低字部分),共4个字节,按照低对低、高对高的小端存储方式保存在中断向量表中。中断向量表被处理器固定地安排在以物理地址最低端00000H开始,从中断向量号0依次安排在每个中断服务程序地址,256个中断占用1KB区域,向量号为N的中断服务程序地址要从物理地址=N*4取得
    image

内部中断服务程序

特点

  1. 与编写子程序类似,都是利用过程定义伪指令PROC和ENDP
  2. 进入中断服务程序后通常要执行STI指令开放可屏蔽中断
  3. 最后执行IRET指令返回
  4. 内部中断服务程序通常采用寄存器传递参数

eg:编写80H号中断服务程序,使其具有显示以0结尾字符串的功能。字符串缓冲区首地址为入口参数,利用DS和DX传递其段地址和偏移地址

;.data
intoff	word	?
intseg	word	?
intmsg	byte	'A Instruction Interrupt!',13,10,0
;.codemov ax,3580h	;获取系统的原80H中断向量表项int 21h			mov intoff,bx	;保存偏移地址mov intseg,es	;保存段基地址push dsmov dx,offset new80hmov ax,seg new80hmov ds,axmov ax,2580h	;设置本程序的80H中断向量表项int 21hpop ds;mov dx, offset intmsg	;设置入口参数DS和DXint 80h			;调用80H中断服务程序,显示字符串;mov dx,intoffmov ax,intsegmov ds,axmov ax,2580hint 21h;80H内部中断服务程序:显示字符串(以0结尾);DS:DX=缓冲区首地址
new80h	proc		;过程定义sti			;开中断push ax		;保护寄存器push bxpush simov si,dx
new1:	mov al,[si]		;获取想要显示的字符cmp al,0		;为0结束jz new2mov bx,0mov ah,0ehint 10hinc sijmp new1
new2:	pop sipop bxpop	axiret		;中断返回
new80h	endp		;中断服务程序结束

image

中断控制器

8259A的寄存器

8259A主要为用户提供了3个8位可读可写的寄存器

  • 中断请求寄存器:保存8个外界中断请求信号IR0~IR7的请求状态。Di位为1表示IRi引脚有中断请求;Di位为0表示IRi引脚无请求
  • 中断服务寄存器:保存正在被8259A服务的中断状态。Di位为1表示IRi中断正在服务中,Di位为0表示IRi中断没有被服务
  • 中断屏蔽寄存器:保存对中断请求信号IR的屏蔽状态。Di位为1表示IRi中断被屏蔽(禁止),Di位为0表示允许IRi中断。IMR对各个中断的屏蔽是相互独立的,对较高优先权的中断请求实现屏蔽,并不影响较低优先权的中断请求

8259A的工作方式

外部中断服务程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_376418.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

err -110 while initial SD card failed enmmm否系解决方案

1.情况表述 之前把 sd卡从小容量换成了大容量 且运行正常 过了一两个月 发现启动失败 报错:mmc0: error -110 whilst initialising SD card 给出报错图片 2.相关解决方案 给出链接 讲的很有道理,但是 我在bash中没有找到对应内核的驱动文件 SD卡…

【JavaScript】JavaScript基础详解(文末送书)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Java 线程池调度周期性任务“异常“探究

背景 在做性能监控需求的过程中,会存在很多监控任务需要定时执行。比如在卡顿监控的实现中,我们需要每50ms 执行一次主线程调用栈的任务,此时由于任务本身可能存在一些耗时,可能需要对任务下次调度的时间做一些调整,避…

有没有人声和背景音乐分离的神器?

做视频剪辑,二次创作的朋友,需要去除视频中的背景音乐,保留人声;或者去除人声,保留背景音乐。随着用户需求的增多,科技的发展,让我们能通过智能的人声分离软件来实现,下面就来看看如…

XPS的锂电池表征技巧-科学指南针

XPS作为一种表面表征手段,这是它一个很大的限制,同时也是它一个很大的优势,正所谓“其术专则其艺必精”。限于笔者专业背景,此次主要讲述XPS在锂离子电池中的应用。 而由于XPS测试是一种表面分析手段,故其在锂离子电池…

Qt中QFile、QByteArray QDataStream和QTextStream区别及示例

在Qt中,QFile、QByteArray、QDataStream和QTextStream是常用的文件和数据处理类。 主要功能和区别 QFile: QFile是用于读写文本和二进制文件以及资源的I/O设备。可以单独使用QFile,或者更方便地与QTextStream或QDataStream一起使用。 通常在…

最新2023版完美可用的聚合支付系统源码,全开源无后门,适合二开

最新2023版完美可用的聚合易支付系统源码,全开源无后门,真正安全可用。 更新日志: 1.新增微信公众号消息提醒功能 2.重构转账付款功能,支持通过插件扩展 3.商户后台新增代付功能 4.后台新增付款记录列表 5.支付宝插件新增预…

嵌入式养成计划-46----QT--简易版网络聊天室实现--QT如何连接数据库

一百一十九、简易版网络聊天室实现 119.1 QT实现连接TCP协议 119.1.1 基于TCP的通信流程 119.1.2 QT中实现服务器过程 使用QTcpServer实例化一个服务器对象设置监听状态,通过listen()函数,可以监听特定的主机,也可以监听所有客户端&#x…

C++23:多维视图(std::mdspan)

C23:多维视图(std::mdspan) 介绍 在 C23 中,std::mdspan 是一个非拥有的多维视图,用于表示连续对象序列。这个连续对象序列可以是一个简单的 C 数组、带有大小的指针、std::array、std::vector 或 std::string。 这…

外汇天眼:如何快速玩转外汇市场?这个技巧你必须知道!

在外汇市场中,决定交易成功与否的关键在于投资者的技能和知识扎不扎实,这对投资者获取利润至关重要。然而对于投资者来说,外汇交易市场又是一个复杂且多变的市场,要在外汇市场中获得成功并不容易,需要深入地了解、不断…

部署Vue项目到githubPage中

上传Vue项目到githubPage 例如: 看我发布的地址 前提条件 1. github上有一个仓库并且仓库下有两个分支(main 和 gh-pages) 1.1 main分支保存你的vue项目源码(react或者其他框架的都行) 1.2 gh-pages分支保存的是你项目打包之后的代码(如Vue项目打包完之后是个dist包,…

【Javascrpt】比较,逻辑运算符

目录 比较运算符 逻辑运算符 &&(与) ||(或) 两真(||左侧为真,||右侧为真) 两假(||左侧为假,右侧为假) 一真一假(||一侧为假,另一侧为…

数据集的特征提取

1、 特征提取 1.1、 将任意数据(如文本或图像)转换为可用于机器学习的数字特征 注:特征值化是为了计算机更好的去理解数据 字典特征提取(特征离散化)文本特征提取图像特征提取(深度学习将介绍) 2 特征提取API sklear…

物联网AI MicroPython传感器学习 之 GC7219点阵屏驱动模块

学物联网,来万物简单IoT物联网!! 一、产品简介 LED-8 * 32点阵屏显示板由 4 块单色 8x8 共阴红色点阵单元组成,通过 SPI 菊花链模式将多块显示屏连接后可以组成更大的分辨率显示屏幕,任意组合分辨率。可用于简单仪表显…

1、VMware虚拟机及网络配置

一、VMware虚拟网络编辑器 1、选择NAT模式并配置子网 2、进入NAT设置,配置网关 3、宿主机网络适配器设置 二、创建虚拟机 在这里插入图片描述 三、开启虚拟机,安装操作系统 在该网段内配置静态ip,指定网关为前面NAT配置的网关地址…

Java8 BiConsumer<T, U> 函数接口浅析分享(含示例,来戳!)

文章目录 Java8 BiConsumer<T, U> 函数接口浅析分享&#xff08;含示例&#xff0c;来戳&#xff01;&#xff09;源码accept 方法示例示例一示例二 andThen 方法示例示例一示例二 示例相关代码类dohandler 方法student.javaStudentScore.javaStudentScoreDto.java Java8…

运行报错(三)git bash报错fatal: detected dubious ownership in repository at

报错现象 在运行git 命令时&#xff0c;出现报错 “fatal: detected dubious ownership in repository at” 报错原因 文件夹的所有者和现在的用户不一致 栗子&#xff1a; 文件夹的所有者是root&#xff0c;而当前用户是admin 解决方案 方法一、 将文件夹的所有者替换成ad…

【JAVA学习一:基础语法】

记录学习过程和代码编写&#xff0c;小白纯属记录。 目录 一、运算符 二、数组 三、面向对象 一、运算符 赋值运算符 public class Demo01 { public static void main(String[] args){ System.out.println(11); System.out.println(1-1); System.out.printl…

【Javascript】运算符(赋值,算术,自增,自减)

目录 赋值 算术 单个变量&#xff1a; 多个变量&#xff1a; 在字符串&#xff0c;数组中充当连接符 自符串与字符串 数组与数组 数组与字符串 自增与自减 前置 自增 自减 后置 自增 自减 赋值 var a 1;算术 单个变量&#xff1a; var a 1;a 1;console.l…

【WCA-KELM预测】基于水循环算法优化核极限学习机回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…