汇编输入输出及中断_第1页
汇编输入输出及中断_第2页
汇编输入输出及中断_第3页
汇编输入输出及中断_第4页
汇编输入输出及中断_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

输入输出和中断程序设计 中断系统端口输入输出 输入过程输入设备把数据送到接口 由CPU执行输入程序把接口中的数据读入CPU 再根据需要放入存储器或寄存器中 处理程序完成对数据的处理并将处理结果放入指定的寄存器或存储器中 输出过程CPU执行输出程序 将存储器或寄存器中等待输出的内容送到输出接口中 然后启动输出设备 将接口中的数据通过输出设备输出 输入 输出的基本条件连接CPU与外设的接口电路和相应的软件 驱动程序 输入输出 微机端口 通过总线与CPU相连的芯片除了存储器外 还有以下3种芯片 1 各种接口卡上的接口芯片 独立显卡等 2 主板上接口芯片 CPU通过它们对部分外设进行访问 USB 键盘 鼠标接口 3 其它芯片 用来存储相关的系统信息 或进行相关的输入输出处理 CMOS BIOS 这些芯片都有一组可以被CPU读写的寄存器这些寄存器叫做端口 这些寄存器在物理上处于不同的芯片中 但它们都是与CPU的总线相连 CPU通过控制线向它们所在的芯片发出端口读写命令 端口 每个接口由一组寄存器组成 这些寄存器都分配有一个称为I O端口的地址编码 计算机的CPU和内存就是通过这些端口和外部设备进行通信的 I O接口部件中一般有三种寄存器 1 用作数据缓冲的数据寄存器 2 用来保存设备和接口的状态信息 供CPU对外设进行测试的状态寄存器 3 用来保存CPU发出的命令 以控制接口和设备操作的控制寄存器 这些寄存器都分配有各自的端口号 CPU就是通过不同的端口号来选择各种外部设备的 端口地址 端口编址 I O端口编址一般分两种方法 1 将I O与内存单元统一编址 其优点是节省了输入 输出指令 但缺点是占用了内存单元的有效地址空间 2 将I O独立编址 在80 x86微机中 I O端口编址在一个独立的地址空间中 端口的读写 CPU访问端口 在访问端口时 CPU通过端口地址 端口号 来定位端口 因为端口所在的芯片和CPU通过总线相连 所以端口地址和内存地址一样 通过地址总线来传送 对端口的读写不能用mov push pop等指令 端口的读写指令只要两条 in和out 分别用于从端口读取数据和向端口写入数据 1 端口读写命令IN和OUT 例 INAL 20H 端口 CPUOUT20H AL CPU 端口在IN和OUT指令中 只能用AX或AL寄存器来存放从端口读入的数据或者要发到端口中的数据 访问8位端口时用AL访问16位端口时用AX 端口的读写 2 对0 255的端口进行读写inal 20h 从20h端口读取一个字节out20h al 向20h端口写入一个字节 3 对256 65535的端口进行读写时 端口号放在dx中movdx 3f8h 将端口号3f8h送入dxinal dx 从3f8h端口读入一个字节outdx al 向3f8h端口写入一个字节 端口的读写 4 inal 60h指令的CPU执行过程 CPU通过地址线将地址信息60h发出 CPU通过控制线发出端口读命令 选中端口所在的芯片 并通知它 将要从中读取数据 端口所在的芯片将60h端口中的数据通过数据线送入CPU 端口的读写 对CMOSRAM的读写来体会对端口的访问CMOSRAM芯片有一个128个存储单元的RAM存储器 其中0 0DH单元用来保存时间信息 其余大部分单元用于存放系统配置信息 供系统启动时BIOS程序读取 CMOSRAM芯片内部有2个端口 端口地址为70h和71h 70h为地址端口 存放CPU要访问的CMOS单元地址 71h为数据端口 存放从选定的CMOS单元中读写的数据 CMOSRAM芯片的读写 对CMOSRAM的读写来体会对端口的访问 CMOSRAM芯片的读写 其中0 0DH单元用来保存时间信息 其余大部分单元用于存放系统配置信息 供系统启动时BIOS程序读取 1个128个存储单元的RAM存储器 2个端口 端口地址为70h和71h 70h为地址端口 存放CPU要访问的CMOS单元地址 71h为数据端口 存放从选定的CMOS单元中读写的数据 CMOSRAM芯片 例 读CMOS的2号单元数据 要分2步 将2送端口70h 从71h读出2号单元的内容MOVAL 2OUT70H AL 将2送端口70hINAL 71H 从71h读出2号单元数据到AL寄存器中 例1 将CMOS中用BCD码表示的月份 以十进制的形式显示到屏幕上 在CMOSRAM中 存放着当前的时间 年 月 日 时 分 秒这6个信息的长度都是1个字节 存放单元为 秒 0分 2时 4日 7月 8年 9这些数据是以BCD码存放的 例2 将CMOS中的时间信息存于MSG开始的内存空间leasi msgmovdl 0jj moval dl 从CMOS中地址为0到9的单元内容读出out70h al 向70H端口写入要访问的单元地址inal 71h 从数据端口71H取出指定单元的数据mov si alincsiincdlcmpdl 09hjnajj 中断 中断信息任何一个通用的CPU都具备有一种能力 可以检测到从CPU外部发送来或者内部产生的一种特殊信息 并且可以立即对接收到的信息进行处理 这种特殊的信息称为 中断信息中断CPU不再接着向下执行指令 而是转去处理这个特殊信息 中断 中断信息任何一个通用的CPU都具备有一种能力 可以检测到从CPU外部发送来或者内部产生的一种特殊信息 并且可以立即对接收到的信息进行处理 这种特殊的信息称为 中断信息中断CPU不再接着向下执行指令 而是转去处理这个特殊信息 中断 当CPU的内部有下面情况发生时 将产生中断信息 1 除法错误 比如div指令产生除法溢出 2 单步执行 3 into溢出中断 4 int指令对于不同的信息要进行不同的处理 在处理前 CPU首先要知道 所接收到的中断信息的来源 所以中断信息中必须包含识别来源的编码 即中断类型码 1 除法错误 0 2 单步执行 1 3 执行into指令 4 4 执行int指令 指令格式intn n即为提供给cpu的中断类型码 中断处理中断处理程序就是对中断信息进行处理的一段指令 CPU要执行某个中断处理程序必须获得该程序的入口地址 因此必须在中断信息 中断类型号 与中断处理程序入口地址间建立某种联系 中断向量表中断向量表保存在内存中 CPU用中断类型码 通过查找中断向量表 就可以得到中断处理程序的入口地址 中断向量表即中断类型号 4开始的4个单元存放着该类型号所对应的中断处理程序的入口地址 CS IP 类型0中断处理程序入口IP类型0中断处理程序入口CS类型1中断处理程序入口IP类型1中断处理程序入口CS类型2中断处理程序入口IP类型2中断处理程序入口CS 00000H00001H00002H00003H00004H00005H00006H00007H00008H00009H0000AH0000BH 3 中断过程中断指令INTn 1 取中断类型号n 2 标志寄存器内容入栈 保护标志寄存器内容 3 当前CS IP入栈 4 禁止外部中断 5 取 n 4 IP n 4 2 CS 6 转去中断处理程序中断返回指令IRET 中断处理程序的最后一条指令 4 中断处理程序与子程序相同点 都必须保存返回的断点CS IP不同点 中断处理程序需要保存标志寄存器内容 中断处理程序不允许再产生中断 中断可以驻留内存 不依赖于调用它的程序 5 用户中断的设置 1 编写中断子程序 2 将程序传送到指定空间 0 200H这个空间一般情况下为空 3 设置中断向量表 这个过程可以直接向中断向量表写数据 也可以由DOS的AH 25 INT21H来完成 6 BIOS和DOS的装载过程 1 开机后 CPU加电 初始化 CS 0FFFFH IP 0 自动从0FFFFH 0单元开始执行程序 0FFFFH 0处有一跳转指令 转去执行BIOS中的硬件自检和初始化程序 2 初始化程序将BIOS所支持的中断例行程序的入口地址登记在中断向量表中 程序是固化在ROM中 3 硬件系统检测和初始化完成后 调用INT19H进行操作系统的引导 4 DOS启动后 将DOS中断例行程序装入内存 并建立中断向量 例 编写 安装中断7ch的中断例程 求一个字数据的平方 AX中是要计算的数 0 200H这个空间一般情况下为空 例 编写 安装中断7ch的中断例程 求一个字数据的平方 AX中是要计算的数codesegmentassumecs codestart 将中断程序传送到0 200处movax csmovds axmovsi offsetsqr 设置DS SI指向源地址movax 0moves axmovdi 200h 设置ES DI指向目的地址movcx offsetsqrend offsetsqr 设置CX为传输长度cldrepmovsb 设置中断向量表 将程序的入口地址保存到7CH表项中movax 0moves axmovwordptres 7ch 4 200hmovwordptres 7ch 4 2 0movax 4c00hint21h 求平方的功能中断程序sqr mulaxiretsqrend nopcodeendsendstart 例4调用7CH中断求ax的平方codesegmentassumecs codestart movax 3456int7chmovah 4chint21hcodeendsendstart BIOS功能调用 BIOS功能调用 课本P 241 BIOS BasicInput OutputSystem BIOS是一组固化到计算机主板上的ROM芯片上的程序 它保存着计算机最重要的基本输入输出的程序 系统设置信息 开机后自检程序和系统自启动程序 其主要功能是为计算机提供最底层的 最直接的硬件设置和控制 主要以中断处理程序的形式提供I O设备的处理程序和常用例行程序 表8 4BIOS中断调用表 用户程序和操作系统关系示意图 BIOS中断程序处于DOS功能调用和硬件环境之间 和DOS功能调用相比其优点是效率高 缺点是编程相对复杂 DOS系统功能调用 DOS系统功能调用和BIOS中断调用DOS操作系统或ROM BIOS程序提供的一组子程序 用 INTN 指令调用 DOS系统功能调用 DOS操作系统提供 主要用于I O设备管理 目录及文件管理BIOS中断调用 ROM提供 主要用于系统加电自检 引导装入初始化程序等 这些子程序给用户编程带来了方便 直接调用相应的功能即可 DOS系统功能调用的步骤及实例最常用的 INT21H21H为子程序的总入口 进入后可调用各种功能步骤 1 设置入口参数2 将功能号放入AH寄存器3 使用指令INT21H转入子程序入口一般 2 3步必须有 1视情况而定 BIOS中断调用方法 1 设置分功能号 按实现的操作功能的要求 给指定寄存器 通常为AH 送入分功能号 2 设置入口参数 按操作要求 给寄存器填写相应参数的内容 某些调用无参数 3 使用中断语句INTn 执行调用的功能 其中n为中断号 4 分析出口参数 如 MOVAH 0 分功能号为0MOVAL 10H 置入口参数INT1AH 1AH为中断号 功能为读时间计数器的值 显示器中断调用 10H中断调用 DOS中断和BIOS中断存在同样的功能如 打印机输出一个字符的功能 可以用DOS中断21h的功能5 可以用BIOS中断17h的功能0 对BIOS和DOS调用的选择原则是 无法使用DOS功能调用或者DOS没有提供而BIOS提供了功能的情况下可以考虑使用BIOS中断 如 有关显示输出的DOS功能调用不多而BIOS调用 INT10H 的功能很强 主要包括设置显示方式 设置光标大小和位置 设置调色板号 显示字符和显示图形等 见p249表8 5 设置显示方式 0号功能 入口参数 AH 0 AL 设置方式 见表8 6出口参数 无设置光标类型 1号功能 入口参数 AH 1 CH 光标开始行 CL 光标结束行 出口参数 无 根据CX给出光标的大小 要在纯DOS下才能实现 movch 1movcl 3movah 1int10h 显示器中断调用 10H中断调用 设置光标位置 2号功能 入口参数 AH 2 BH 页号 DH 行号 DL 列号 出口参数 无 根据DX给出确定光标的位置 在当前光标位置写字符和属性 9号功能 入口参数 AH 9 BH 页号 AL 字符的ASCII码BL 字符属性 CX 写入字符数 出口参数 无 在当前光标处 可连续写CX个字符 如何在某个位置显示某些字符呢 例1 在第0页 20 25 的位置显示3个 MOVBH 0 第0页MOVDH 20MOVDL 25 坐标MOVAH 2 设置光标位置INT10HMOVAL 要显示的字符MOVBH 0 第0页MOVBL 0C3H 颜色MOVCX 3 字符个数MOVAH 9 功能调用 在光标位置显示字符INT10HMOVAH 4CHINT21H 初始始窗口或向上滚动 6号功能 入口参数 AH 6 AL 上滚行数 CX 上滚窗口左上角的行 列号 DX 上滚窗口右上角的行 列号 BH 空白行的属性 例青底白字 BH 37h 出口参数 无 当滚动后 顶部为空白输入行 初始窗口或向下滚动 7号功能 入口参数 AH 7 AL 下滚行数 CX 下滚窗口左上角的行 列号 DX 下滚窗口右上角的行 列号 BH 空白行的属性 出口参数 无 当滚动后 底部为空白输入行 BH属性见表8 7 表8 10 例2 清屏幕的左半边 呈反相显示 白底黑字BH 70H 见P251 表8 9 8 10 MOVAH 7 下滚MOVAL 0 行数 0为全屏MOVBH 70H 属性白底黑字MOVCH 0 从0行0列开始MOVCL 0MOVDH 24 到24行39列为止MOVDL 39INT10H 写字符串到指定的页面 功能号13H 入口参数 E

温馨提示

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

评论

0/150

提交评论