汇编语言8ppt课件.ppt_第1页
汇编语言8ppt课件.ppt_第2页
汇编语言8ppt课件.ppt_第3页
汇编语言8ppt课件.ppt_第4页
汇编语言8ppt课件.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第8章输入输出程序设计8 1I O设备的数据传送8 2程序直接控制I O方式8 3中断传送方式 2 8 1输入输出的基本概念从第2章的图2 1可以看到 计算机的硬件系统由CPU 内存 外设三大部分构成 它们相互之间通过一组信息传递的公共通道 总线联系在一起的 CPU和内存构成了计算机的主机部分 是计算机中的高速设备 而大多数外部设备都是慢速设备 用来把从主机以外采集到的数据送入主机内部 或者把主机内的数据传递到外部 外设中的外部存储器还可以存储大量的数据 那么 CPU作为计算机的核心 它又是如何控制外设的呢 3 8 1 1外设接口接口 用于把CPU来的控制命令转换成外设的控制信号 把外设的工作情况转换成CPU可以读取并处理的状态信号 计算机系统中对外设接口也进行了编号 这个号码称作 外设端口号 每一个端口号对应外设接口中的一个存放字节型数据的元件 称为一个 外设端口 一个外设接口中往往需要多个外设端口 占据多个外设端口号 CPU控制外设就是通过从这些外设端口中读取数据以及向它们发送数据实现的 CPU I O设备 接口 4 大多数外设接口从功能上可以分为控制部件 状态部件和数据部件三大组成部分 控制部件又称为命令部件 专用于接收来自主机的操作命令 并转换成对外设的控制信号 状态部件负责向主机转达外设的当前工作情况 数据部件是内外数据交换的缓冲器 临时存放需要传递的数据 CPU I O设备 控制 状态 数据 5 i o设备的数据传送方式 直接存储器存取方式 DMA 直接控制i O方式 in out指令 中断方法 6 8 2程序直接控制I O方式由于8086采取了独立编址方式 就需要有特殊的指令控制对外设端口的操作 每个外设与一组端口对应 8086系统设计有两条专用指令 IN和OUT 指令格式 INd1 d2 功能 从d2指明的外设端口中读取1字节或2字节数据 送到操作数d1指出的地方 说明 1 8086系统限制d1只能是AL或AX 当外设端口号不超过255时 d2操作数可直接写端口号码 是外设的直接寻址方式 端口号超过255时 必须先把端口号放在DX中 以DX作为d2操作数 这是外设的间接寻址方式 7 2 当d1是AL时 该指令从指定的端口中读1字节数据 当d1是AX时 CPU将从d2对应的端口读1字节数据到AL 从下一个端口号读1字节数据到AH 即总共读取16位数据送到AX中 指令格式 OUTd1 d2 功能 把操作数d2指明的1字节或2字节数据送到d1对应的外设端口中 8 说明 1 d2只能是AL或AX 当外设端口号不超过255时 d1操作数可直接写端口号码 端口号超过255时 必须先把端口号放在DX中 以DX作为d1操作数 2 当d2是AL时 该指令把AL中的8位数据送往d1指定的外设端口 当d2是AX时 该指令把AL中的8位数据送到d1对应的端口 把AH中的8位数据送往下一端口 即把16位数据送到d1对应的端口及下一端口中 9 I O地址分配表 p284 可编程中断逻辑控制器 串口 并口 键盘等硬件分别对应于一个或一组i o端口 10 例8 1 说明下面各指令或程序段的功能 1 MOVDX 61HINAL DX 2 MOVBX 61HMOVAL BX 3 OUT21H AL 4 MOVSI 21HMOV SI AL关于端口地址分配可 参考p284表8 1 I O指令是cpu与外设通信的基本途径 11 解 1 先把立即数61H放到DX中 然后以DX中的61H作为外设端口号 从相应的外设端口读取1字节数据送到AL中 2 先把立即数61H放到BX中 然后以BX中的61H作为偏移地址 以缺省段寄存器DS中的值为段地址 从相应的内存中取出1字节数据送到AL中 3 把AL中的1字节数据送往21H号外设端口 4 先把立即数21H放到SI中 然后以SI中的21H作为偏移地址 以缺省段寄存器DS中的值为段地址 把AL中的1字节数据送到相应的内存中 12 图扬声器与系统总线的连接 i o程序举例计算机系统中的扬声器是一种简单的输出设备 可以随时从CPU接收控制命令 下图是扬声器的连接原理图 13 例8 2 利用无条件数据传送方式 让计算机的扬声器在1秒钟内保持发出500Hz的声音 解 完整的程序如下 delnum 14000staSEGMENTSTACKDW1024DUP 0 staENDScodeSEGMENTASSUMECS code SS sta 14 delayPROCNEAR 时间延迟子程序 以CX中的值作为PUSHAX 循环次数 做若干次的乘法产生时PUSHDX 间延迟的效果del IMULAX 用乘法指令延迟 执行时间较长LOOPdelPOPDXPOPAXRETdelayENDPmain MOVCX 500sou PUSHCX 15 INAL 61H 读出原61H端口的数据ANDAL 11111100B 清最低两位OUT61H AL 送低电位到P1MOVCX delnum 取控制延迟时间的循环次数值CALLdelayINAL 61HORAL 00000010B 置P1位为1OUT61H ALMOVCX delnum 16 CALLdelayPOPCXLOOPsouMOVAX 4C00HINT21HcodeENDSENDmain从这个例子可以看出 对扬声器的控制是不需要任何条件的 程序中在向61H号端口送数据时根本不考虑扬声器是否准备好 是否可接收数据等问题 由端口61H到放大电路构成了扬声器的接口电路 该接口以系统总线上送来的信号驱动薄膜的振动 按无条件方式进行数据传送 17 8 3查询方式输入输出大多数外设不可能像扬声器那样工作 这些外设处理数据的速度和提供数据的速度往往比主机内部速度慢得多 因而CPU与这类设备进行数据传递前必须先判断它们是否 就绪 CPU以查询方式从外设读取一批数据 以及向外设送出一批数据的流程如图8 2所示 18 Y b 查询方式输出操作流程 a 查询方式输入操作流程 打印机是一种可以按查询方式工作的输出外设 它与主机连接的接口部件是打印机适配器 也就是平常所说的 标准并行接口 或 并口 打印机接口中的三大部件齐备 它们各自占据一个外设端口号码 分别是 数据部件 378H 状态部件 379H 控制部件 37AH 状态端口各位的含义如下 D7D6D5D4D3D2D1D0 19 1 D7位 是打印机的 忙 信号 这一位为0表示打印机当前正处于 忙 状态 为1表示打印机不忙 2 D6位 是打印机送回的认可信号 当打印机从接口中正确接收1字节数据后 就送回一个低电位的认可信号 这个信号只维持很短的时间 然后又恢复高电位 3 D5位 缺纸信号 这一位为1表示打印机无纸 因而无法打印 为0时表示正常工作 4 D4位 联机信号 这一位为1表示正处于联机工作状态 为0表示没有联机 这时不能工作 5 D3位 出错信号 为0表示打印机内部出现错误 不能工作 为1则正常 20 21 控制端口各位的含义如下 D7D6D5D4D3D2D1D0 1 D4位 允许中断信号 将该位置1 允许打印机以中断方式工作 为0则不允许 2 D3位 联机命令 置1将设置打印机的联机工作方式 控制打印机时总是把这一位置1 否则打印机不能正常工作 打印机正常打印时这一位需要保持1 3 D2位 初始化信号 正常工作时总是把这一位置1 需要把打印机重新初始化时 则在这一位先清0再置1 并且要维持清0的时间0 05秒以上 初始化又称作打印机复位 复位时可观察到的现象是打印头回到最左边 4 D1位 自动走纸 置1要求打印机在打印完一行后 回车时 自动走纸 清0时则需要向打印机输出换行符 0AH 控制走纸 这一位通常被置为0 5 D0位 选通信号 CPU通过在这一位上先置1再清0 通知打印机从数据部件中取走一字节数据并打印 把图8 2中查询输出的流程稍做修改 可以作为控制打印机以查询方式工作的程序流程 如图8 3所示 22 计数器清0 读状态端口 Ready 送数据到数据端口 送先高后低的STB信号 打印完 计数器加1 取下一数据 N Y Y N 结束 图8 3查询方式控制打印机 23 24 例8 3 控制打印机以查询方式工作 打印26个英文字母 共打印30行 解 staSEGMENTSTACKDB1024DUP 0 staENDSdataSEGMENTprintDB abcdefghijklmnopqrstuvwxyz 0DH 0AHdataENDScodeSEGMENTASSUMECS code SS sta DS data 25 initPROCNEAR 打印机初始化程序MOVDX 37AH 控制寄存器MOVAL 08HOUTDX ALMOVCX 1000init1 LOOPinit1 延迟 维持初始化信号一段时间MOVAL 0CHOUTDX AL 结束初始化 保持联机RETinitENDP 26 start MOVAX dataMOVDS AXMOVCX 30 30行again LEABX print 待打印字符串首地址存放于BX中next MOVDX 379H 状态寄存器wait INAL DXTESTAL 80HJZwait 打印机忙 转去再读状态端口DECDX 378数据端口号MOVAL BX OUTDX AL 送数据到数据端口暂存MOVDX 37AHMOVAL 0DH 27 OUTDX AL 置STB信号为1DECALOUTDX AL 置STB信号为0CMP BX 0AHJZnewlineINCBXJMPnextnewline LOOPagainMOVAX 4C00HINT21HcodeENDSENDstart 28 8 4 1中断的基本概念1 中断CPU暂停正在执行的程序 转去完成另一件工作 完成后再回到原来的程序继续执行的现象称为中断 2 中断源能够导致CPU中断的事件称为中断源 8 4中断方式 29 80X86中断源 中断逻辑 INTN INTO 除法错 单步中断 8259A可编程中断控制器 INTR IR0 IR1 IR7 系统定时器 键盘 非屏蔽中断请求 NMI IMR 21h 30 3 中断源分类内中断 来自CPU内部的中断请求 1 中断指令 2 错误的中断 除法错中断 溢出中断若产生溢出 OF 1 INTO中断发生溢出的算术操作 如 ADDAX BXINTO 31 3 为DEBUG设置的中断 单步中断 每条指今执行后 CPU产生中断 产生的条件 TF 陷井标 1 断点中断 CPU执行到断点处 INT 产生中断 外中断 来自CPU芯片外的中断请求 外中断源分为两类 非屏蔽外中断和可屏蔽外中断 可屏蔽外中断的控制 中断屏蔽寄存器 端口号21H P293 标志寄存器的IF位 1 允许中断 32 4 中断号在计算机系统中 各种中断源都被统一地编排了一个互不相同的号码 用以唯一地标识一个中断源 这个号码称为中断号 5 中断源识别由于中断源有不同的类型 向CPU申请中断的方式也各不相同 当CPU知道有中断请求后 还必须判断出究竟是几号中断请求 CPU确定中断号的过程称为中断源识别 如果中断请求来自CPU内部 CPU内有相应机制可以取到内中断请求的中断号 如果是不可屏蔽外中断请求 系统只安排了唯一的中断号 2号 当中断请求来自CPU的INTR外引脚时 情况就比较复杂了 33 6 中断优先级8088把所有中断源划分为4个等级 以0级为最高 依次降低等级 0级 除单步中断以外的内中断 1级 非屏蔽外中断 2级 可屏蔽外中断 3级 单步中断 34 7 中断服务程序CPU响应某个中断时去执行的程序称为 中断服务程序 或 中断处理程序 8 中断向量把中断服务程序的入口地址的各个字节按照一定的规则排列起来 构成的一个有特定含义的数据组合称为 中断向量 或 中断矢量 中断服务程序的段地址和偏移地址 9 中断向量表把所有这些中断向量集中起来 按照中断号由0到255的顺序 从内存物理地址为0处开始依次存放 构成一张 中断向量表 中断向量地址 35 000000号中断服务程序偏移地址低字节 000010号中断服务程序偏移地址高字节 000020号中断服务程序段地址低字节 000030号中断服务程序段地址高字节 000041号中断服务程序偏移地址低字节 000051号中断服务程序偏移地址高字节 000061号中断服务程序段地址低字节 000071号中断服务程序段地址高字节 000082号中断服务程序偏移地址低字 003FF0FFH号中断服务程序段地址高字节 中断向量表 36 中断向量表地址分配 0 1fhbios中断向量20 3fhdos中断向量40 5fh扩充bios中断向量68 6Fh保留 37 11 中断嵌套在CPU执行一个低级别的中断服务程序时 如果系统中又产生了一个高级别的中断请求 这时系统会暂停低级中断服务 优先处理高级别中断 处理完后再继续低级中断服务 这种高级别中断打断低级别中断服务的现象称为中断嵌套 中断嵌套的典型例子是 在一个中断服务程序中 需要在屏幕上显示一些信息 屏幕显示需要用到后面将要说明的10H号中断调用 因此在中断服务程序中就会写有INT10H指令 这是一条内中断调用指令 是最高级别的中断 在执行到该指令时 系统会转去先进行10H号中断服务 在屏幕上进行显示 10H号中断返回后 再继续原先低级别的中断服务 38 8 4 2中断处理过程不论是软中断还是硬中断 当CPU响应中断时 自动完成下列操作 1 取中断号n 中断源识别 2 把标志寄存器 PSW 的内容入栈 3 当前CS的值入栈 4 当前IP的值入栈 5 把标志寄存器中的IF和TF标志位清0 6 从物理地址4 n处取出4个字节的n号中断的中断向量 设取出的数据依次是b0 b1 b2 b3 把 b1 b0 拼成一个字型数据送到IP中 b3 b2 拼成一个字型数据送到CS中 7 按CS IP的新值继续执行 39 8 4 3与中断有关的指令 中断指令 INTn 功能 产生一次n号中断请求 中断返回指令 IRET 功能 从栈中弹出3个字 第1个弹出的送到IP 第2个到CS 第3个到PSW 指令格式 CLI 功能 把标志寄存器的IF标志位清0 使CPU不响应可屏蔽外中断 指令格式 STI 功能 把标志寄存器的IF标志位置1 允许CPU响应可屏蔽外中断 40 8 4 4中断与子程序的比较 1 都需要相应程序段的支持 2 软件中断与子程序都由特定指令调用 3 发生调用时 系统自动记载返回地址 4 软件中断和子程序都可以带有入口参数和出口参数 5 可以用子程序调用代替软件中断的调用指令 41 INT指令与FAR类型子程序调用的CALL指令之间的主要差别在于是否把标志寄存器入栈 因此 只要能够先把标志寄存器入栈保存 再用CALL指令同样可以进行软件中断服务子程序的调用 比如 下面的方法完全可以代替INT21H指令 MOVBX 0MOVDS BX 中断向量表的段地址MOVBX 84H 21H号中断向量在中断向量表中的偏移地址PUSHFCALLFARPTR BX 以子程序调用的CALL指令去调用21H号中断服务子程序 42 软件中断 硬件中断与子程序三者之间也存在着本质的差别 主要体现在 1 调用方式不同 软件中断由INT指令调用 子程序用CALL指令调用 而硬件中断是由硬件提出申请 不需要任何指令 2 系统保护的值不同 中断调用时 系统会把标志寄存器 CS和IP入栈保存 而子程序调用时 系统只入栈保存IP或者CS和IP 3 返回方式不同 中断返回指令是IRET 而子程序返回指令是RET 并且子程序还有NEAR和FAR两种类型 43 4 共享方式不同 硬件中断的服务程序不能被其它程序共享 而是直接由系统掌握 软件中断的服务程序可以被任何程序以INT指令的形式调用 并且调用者不必关心中断服务程序到底在内存的哪一个地方 也不需要把中断服务程序与调用它的程序拼装到一起 子程序的共享方式比较丰富 但有一点 就是被调用的子程序必须与调者拼装在一起 形成最终的执行文件 5 在内存中存在的时间不同 中断服务程序通常是长期保留在内存中 而子程序是随可执行文件一起进入内存 当可执行文件执行完后 子程序所占用的内存也随之释放 44 8 4 6中断服务程序主程序为中断所做的准备工作和硬件 包括CPU和外设接口 自动完成的动作 1 设置中断和向量 2 设置设备的中断屏蔽位 3 设置CPU的中断允许位IF 开中断 4 外设接口送中断请求给CPU 5 当前指令执行完成后 CPU送响应信号给外设接口 6 CPU接收中断类型号 7 当前的PSW CS和IP保存入栈 8 清除IF TF 9 中断向量送IP和CS 45 编写中断处理子程序的步骤 1 保存寄存器内容 2 如允许中断嵌套 则开中断 STI 3 处理中断 4 关中断 SLI 5 送中断结束命令 EOI 给中断命令寄存器 20h端口 6 恢复寄存器内容 7 返回被中断的程序 IRET 46 关于EOI 20h号端口 最低优先级的中断号 IR0 IR7的优先级顺序 中断结束命令 EOI 1 当前正在请求的中断被清除 所以中断处理后 必须把EOI置1 否则 同级或低级中断不能被相应 EOI 0 表示当前中断请求未被清除 不可处理其它中断 发EOI命令 moval 20hout20h al注 EOI并不表示中断处理的结束 iret才表示结束并返回 47 关于中断欠套 8个可屏蔽的优先级顺序为IR0 IR1 IR7 通过20h端口可以改变默认顺序 20h号端口 最低优先级的中断号 IR0 IR7的优先级顺序00正常01清除由L2 L0指定的中断请求各中断优先级依左循环一个位置各中断优先级依次循环到L2 L0指定的中断优先级最低例如 11100100送到20h端口则 中断优先级顺序为 IR5 IR6 IR7 IR0 IR1 IR2 IR3 IR4再送10100000到20h端口 则中断优先级变为 IR6 IR7 IR0 IR1 IR2 IR3 IR4 IR5例 p299图8 8 48 8 4 6 2修改中断向量的技术 设置中断向量 入口参数 AH 25HAL 中断号DS DX 新的中断服务程序的入口地址调用 INT21H 取中断向量 入口参数 AH 35HAL 中断号出口参数 ES BX 中断向量调用 INT21H 49 扩充和修改中断向量 1 扩充中断向量 1 定义中断处理程序 2 把中断处理程序的段地址和偏移地址存入中断向量表 2 修改中断向量 1 定义中断处理程序 2 保护原中断向量 3 把中断处理程序的段地址和偏移地址存入中断向量表 4 恢复原中断向量 50 8 4 6 3中断编程实例 8088系统中有一个定时器 它每隔约0 05秒向CPU发出一次8号中断请求 这是一个硬中断 不受程序的控制 8号中断服务程序中有一条调用1CH号中断的指令 而1CH号中断是一个可供用户使用的中断 它只由8号中断调用 与硬中断有类似的效果 下面就利用1CH号中断 编写一个响铃程序 51 例8 4 编一段中断处理程序 在主程序运行的过程中 每隔10秒钟响铃一次 同时在屏上显示 Thebellisring 编程如下 DATASEGMENTCOUNTDW1MESSDB Thebellisring 0DH 0AH DATAENDSCODESEGMENTASSUMECS CODE DS DATA ES DATA 52 MAINPROCFARSTART PUSHDSSUBAX AXPUSHAXMOVAX DATAMOVDS AXMOVAL 1CH 取中断向量 MOVAH 35H 入口参数ALINT21H 出口参数ES BXPUSHES 存原中断向量段址PUSHBX 存原中断向量偏移量 53 PUSHDSMOVDX OFFSETRING 新偏移量送DXMOVAX SEGRINGMOVDS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论