汇編语言程序设计 第9章输入/输出程序设计 输入/输出指令 输入/输出控制方式 中断 B10S中断调用
汇编语言 程序设计 第9章 输入/输出程序设计 ◆ 输入/输出指令 ◆ 输入/输出控制方式 ◆ 中断 ◆ BIOS中断调用
汇編语言程序设计 9.1输入/输出指令 9.1.11/0端口寻址 当设备通过接口与主机相连时,CPU可以通过接口地址 来访问Ⅰ0设备。通常将Ⅰ/0设备码视为地址码,对I/0地址 码的编址可采用存储器编址和Ⅰ0端口编址两种方式 1.存储器编址方法 存储器编址也叫统一编址,就是将I/0地址看作是存储 器地址的一部分 2.I/0端口编址方法 Ⅰ闶0端口编址也称为不统一编址,就是指I/0地址和存 储器地址是分开的,所有对I/0的访问必须有专用的I/0指令
汇编语言 程序设计 9.1 输入/输出指令 9.1.1 I/O端口寻址 当设备通过接口与主机相连时,CPU可以通过接口地址 来访问I/O设备。通常将I/O设备码视为地址码,对I/O地址 码的编址可采用存储器编址和I/O端口编址两种方式。 1.存储器编址方法 存储器编址也叫统一编址,就是将I/O地址看作是存储 器地址的一部分。 2.I/O端口编址方法 I /O端口编址也称为不统一编址,就是指I/O地址和存 储器地址是分开的,所有对I/O的访问必须有专用的I/O指令
汇編语言程序设计 9.1.2输入/输出指令 输入指令 格式: IN OPERAND1.0 peraND2 其中:操作数 OPERAND1是A或A,操作数0 PERAND2是論入墉口地址。 输入指令IN是把端口的一个字节域字传送給A或AX。 2.输出指令 格式: OUT OPERAND1, OPERAN2 其中: OPERAND1是輸出端口地址, OPERAND2是AL或AX,输出指令OUT 把AL或AX中的内容输出到端口。 3.墉口地址的寻扯方式 用上两条指令时,有直接和间接两种寻址方式来确定蜡口地扯。 (1)直接墉口寻扯 输入/输出指令的端口地扯可以是直接给出,此时指令为双字节, 第二字节即为一个具体的8位二进制数,可对0-25个8端口寻 (2)间接鳙口寻扯 间接墉口寻址是采用岢存器D的内容来指定端口地址,此寻址方 式的指令是单字节指令。因为D是16位存器,所以这种寻址方式可 对0-65535个16位端口选行寻扯。当墉口号大于255时,就应采用间接 墉口寻址。 返回
汇编语言 程序设计 9.1.2 输入/输出指令 1.输入指令 格式: IN OPERAND1,OPERAND2 其中:操作数OPERAND1是AL或AX,操作数OPERAND2是输入端口地址。 输入指令IN是把端口的一个字节或字传送给AL或AX。 2.输出指令 格式: OUT OPERAND1,OPERAND2 其中:OPERAND1是输出端口地址,OPERAND2是AL或AX,输出指令OUT 把AL或AX中的内容输出到端口。 3. 端口地址的寻址方式 用上两条指令时,有直接和间接两种寻址方式来确定端口地址。 (1) 直接端口寻址 输入/输出指令的端口地址可以是直接给出,此时指令为双字节, 第二字节即为一个具体的8位二进制数,可对0-255个8位端口寻。 (2) 间接端口寻址 间接端口寻址是采用寄存器DX的内容来指定端口地址,此寻址方 式的指令是单字节指令。因为DX是16位寄存器,所以这种寻址方式可 对0-65535个16位端口进行寻址。当端口号大于255时,就应采用间接 端口寻址。 返回
汇編语言程序设计 9.2输入/输出控制方式 9.2.1程序控制方式 程序控制方式是在用户程序的控制下实现主机(CPU)与外设交 换信息,对哪个端口何时进行输入/输出操作,都在程序中反映出來。 具体实现时又有立即传送和程序査询两种方法 1.立即传送方式 采用这种方法时,应该确定外设已经准备好,因此不再询冋外设 是否准备情柷,在程序中需要输入/输岀时,就向指定端口选行输入 /输出操作。 2.程序查询方式 若CPU与外设交换信息时,根据外设的工作状态來决定是否进行 交换,这就是程序查询方法,这时CPU常常要查询外设的某些标记, 然后再作出决定,就是程序查询方式
汇编语言 程序设计 9.2 输入/输出控制方式 9.2.1 程序控制方式 程序控制方式是在用户程序的控制下实现主机(CPU)与外设交 换信息,对哪个端口何时进行输入/输出操作,都在程序中反映出来。 具体实现时又有立即传送和程序查询两种方法。 1.立即传送方式 采用这种方法时,应该确定外设已经准备好,因此不再询问外设 是否准备情况,在程序中需要输入/输出时,就向指定端口进行输入 /输出操作。 2.程序查询方式 若CPU与外设交换信息时,根据外设的工作状态来决定是否进行 交换,这就是程序查询方法,这时CPU常常要查询外设的某些标记, 然后再作出决定,就是程序查询方式
汇編语言程序设计 9.2.2中断控制方式 程序控制方式的立即传送方法.不能根据设备实时状 况操作,而程序查询方式使这种问题得以解决,但工作时 CPU与外设相当串联工作,占用CPU大量时间.因此工作效 率不可恭维。如果在外设已准备好的情况下,通知CPU,这 时CPU才停下原來的工作与外设实施数据交换,此次信息交 换完成后CPU在继续自己的原有工作,按此想法就产生了中 断工作方式。 CPU启动外设后仍继续执行原程序,在第K条指令执行结 東后,CPU响应了外设的请求,中断了现行程序,转至中断 服务程序,等处理完后叉返回到原程序断点处,继续从第 K+1条指令往下执行。这种方式中断了原程序的运行,所以 称为程序中断方式
汇编语言 程序设计 9.2.2 中断控制方式 程序控制方式的立即传送方法,不能根据设备实时状 况操作,而程序查询方式使这种问题得以解决,但工作时 CPU与外设相当串联工作,占用CPU大量时间,因此工作效 率不可恭维。如果在外设已准备好的情况下,通知CPU,这 时CPU才停下原来的工作与外设实施数据交换,此次信息交 换完成后CPU在继续自己的原有工作,按此想法就产生了中 断工作方式。 CPU启动外设后仍继续执行原程序,在第K条指令执行结 束后,CPU响应了外设的请求,中断了现行程序,转至中断 服务程序,等处理完后又返回到原程序断点处,继续从第 K+1条指令往下执行。这种方式中断了原程序的运行,所以 称为程序中断方式
汇編语言程序设计 9.2.3直接存储器存取方式 如果外设能直接与主存交换信息而不占用CP.CPU的资源利用率 显然叉可进一步提高,这就岀现了直接存储器存取的 DMA( DirectMemory Access)方式 DMA的数据块传送操作可以分为3个主要步骡 (1)预处理阶段:由CPU执行几条输入输出指令,测试设备状态; 向DMA控制器的设备地址寄存器中送入设备号,并启动设备:向內存地 址计数器送入起始地址;向字计数器中送入交换的数据字的个数。 (2)正式传送阶段:外设准备好发送数据(输入)或接收数据(输岀) 时,发出DMA请求,由DMA控制器向CPU发出总线使用杈的请求:CPU在 本机器周期执行完毕后响应该请求并使CPU的总线驱动器处于髙阻状态 然后与系统总线相脱离,DMA控制器接管数据总线和地址总线的控制 并向内存提供地址:在內存与外围设备之间进行数据交换,每交换一 个字则地址计数器和字计数器减1,当计数值到0时,DMA操作结束并向 CPU提出中断申请。 (3)DMA后处理工作:一旦DM的中断请求得到响应,CPU将停止主 程序的执行,转去执行中断服务程序进行DMA操作的后处理。包括校验 送入內存的数据是否正确;决定使用DMA方式传送数据还是结束传送; 测试传送过程中是否发生错误。 返
汇编语言 程序设计 9.2.3 直接存储器存取方式 如果外设能直接与主存交换信息而不占用CPU,CPU的资源利用率 显 然 又 可 进 一 步 提 高 , 这 就 出 现 了 直 接 存 储 器 存 取 的 DMA(DirectMemoryAccess)方式。 DMA的数据块传送操作可以分为3个主要步骤: (1)预处理阶段:由CPU执行几条输入输出指令,测试设备状态; 向DMA控制器的设备地址寄存器中送入设备号,并启动设备;向内存地 址计数器送入起始地址;向字计数器中送入交换的数据字的个数。 (2)正式传送阶段:外设准备好发送数据(输入)或接收数据(输出) 时,发出DMA请求,由DMA控制器向CPU发出总线使用权的请求;CPU在 本机器周期执行完毕后响应该请求并使CPU的总线驱动器处于高阻状态, 然后与系统总线相脱离,DMA控制器接管数据总线和地址总线的控制, 并向内存提供地址;在内存与外围设备之间进行数据交换,每交换一 个字则地址计数器和字计数器减1,当计数值到0时,DMA操作结束并向 CPU提出中断申请。 (3)DMA后处理工作:一旦DMA的中断请求得到响应,CPU将停止主 程序的执行,转去执行中断服务程序进行DMA操作的后处理。包括校验 送入内存的数据是否正确;决定使用DMA方式传送数据还是结束传送; 测试传送过程中是否发生错误。 返回
汇編语言程序设计 9.3中断 9.3.1中断概念 1.中断概念 计犷机在执行程序的过程中。在出现异常愦况或特殊请求时,讣 算机停止现行拯行程序,转向对这些昦常情况或特殊请求的处理, 处理结東后再巡回到现行程序的间断处,称之为计算机上的“中 断 2.中断的应用场合 (1)及时处理计算机中的紧急事件 突墩故障在用户程序中是元法凤映的,但它的出现可寻致行结果 出错,甚至出现意翅不到的后果,为了及时处理这些故障。疝该采 用中断方式。 (2)协调主机与外设工作速度 大部分外设的工作速度均低于CPU,采用程序查询方式。会占用 了CPU的宝贵时间。采用中断控制方式,可以很好的解决这一问题。 (3)实时控制
汇编语言 程序设计 9.3 中断 9.3.1 中断概念 1.中断概念 计算机在执行程序的过程中,在出现异常情况或特殊请求时,计 算机停止现行运行程序,转向对这些异常情况或特殊请求的处理, 处理结束后再返回到现行程序的间断处,称之为计算机上的“中 断” 。 2.中断的应用场合 (1) 及时处理计算机中的紧急事件 突发故障在用户程序中是无法反映的,但它的出现可导致运行结果 出错,甚至出现意想不到的后果,为了及时处理这些故障,应该采 用中断方式。 (2) 协调主机与外设工作速度 大部分外设的工作速度均低于CPU,采用程序查询方式,会占用 了CPU的宝贵时间。采用中断控制方式,可以很好的解决这一问题。 (3) 实时控制
汇編语言程序设计 9.3.2中断源、中断类型码和中断优先级 1.中断源 引起中断的原因或来源称为中断源( Interrupt source (1)外部中断 不是因为CPU内部原因产生的中断,称为外部中断。而外部中 断又分为非屏蔽中断MM和可屏蔽中断INR两种。 (2)内部中断 由CPU内部产生的中断,称为内部中断。按引发情况可分为3 类。例如除法运算出错、执行软中断指令、单步中断等。 2.中断类型码 PC机为每一个中断源分配一个号码,称为中断类型码。这些 中断类型码在PC机中是唯一的,有的是系统统一规定的,有的是 由用户指定中断类型码
汇编语言 程序设计 9.3.2 中断源、中断类型码和中断优先级 1.中断源 引起中断的原因或来源称为中断源(Interrupt source)。 (1) 外部中断 不是因为CPU内部原因产生的中断,称为外部中断。而外部中 断又分为非屏蔽中断NMI和可屏蔽中断INTR两种。 (2) 内部中断 由CPU内部产生的中断,称为内部中断。按引发情况可分为3 类。例如除法运算出错、执行软中断指令、单步中断等。 2.中断类型码 PC机为每一个中断源分配一个号码,称为中断类型码。这些 中断类型码在PC机中是唯一的,有的是系统统一规定的,有的是 由用户指定中断类型码
汇編语言程序设计 3.中断优先级 在棊时如只有一个中断源提出中断请求, 若它是非屏蔽中断源那么CPU就会立即响应 它的请求;若它是可屏蔽中斷源,只要IF=1, CPU也会立即响应咆的请水求。但是,如果在同 时刻有几个中断源同时提出中断请求。CPU 只能先响应1个中断源。如果CPU响应了一个中 断源的中断请求后,在执行中断处理程序的时 候,又有一个中断源提出中断请求,CPU能否 响应这个新的中断请求。这就引出了中断优先 级同题
汇编语言 程序设计 3.中断优先级 在某时如只有一个中断源提出中断请求, 若它是非屏蔽中断源,那么CPU就会立即响应 它的请求;若它是可屏蔽中断源,只要IF=1, CPU也会立即响应它的请求。但是,如果在同 一时刻有几个中断源同时提出中断请求,CPU 只能先响应1个中断源,如果CPU响应了一个中 断源的中断请求后,在执行中断处理程序的时 候,又有一个中断源提出中断请求,CPU能否 响应这个新的中断请求,这就引出了中断优先 级问题
汇編语言程序设计 9.3.3中断矢量表 不同的中断来自不同的中断源。因此有着不同的处理任务,PC机 有256个不同的中断,对每一个中断源都要设计一个中断处理程序,而 且每一个中断程序都有自己的入口地址。将256个中断程序的入口地址 放到一起,就形成了一个表,称之为中斷矢量表。P机的中断矢量表 是在在内存最小地址的1k字节(绝对地址为:00000003FH)空间建 立的。由此表确定了中断类型码与该中断源所对应的中断处理程序之 间 对应联系。图9.12给出中断矢量表的安排,表内存放有256个 中斷处理程序入口地址。每个入口地址由4个字节组成,两个低字节存 放入口地址的偏移量,两个高宇节存放它的段基值。中断响疝以后 表中对的4个字节的内容分别被送人IP和CS,完成程序转移。表中中 断类型0、类型1、类型2等表示这个入口地址对应的中断类型码。如果 已知现在响应中断的中断类型码,就可以从中断矢量表中找到该中断 源的处理程序入口地址。设中断类烈码为N,则有: 中断矢量地址=断类型号米N 也就是(4米,4N+1)→IP;(4*N+2,4N+3)→CS 这样就把中断处理程序的入口地扯的偏移量和段基值分别送人IP 和CS,瘘后到此地扯执行该中断的服务子程序
汇编语言 程序设计 9.3.3 中断矢量表 不同的中断来自不同的中断源,因此有着不同的处理任务,PC机 有256个不同的中断,对每一个中断源都要设计一个中断处理程序,而 且每一个中断程序都有自己的入口地址,将256个中断程序的入口地址 放到一起,就形成了一个表,称之为中断矢量表。PC机的中断矢量表 是在在内存最小地址的1k字节(绝对地址为:00000H~003FFH)空间建 立的,由此表确定了中断类型码与该中断源所对应的中断处理程序之 间的一一对应联系。图9.12给出中断矢量表的安排,表内存放有256个 中断处理程序入口地址。每个入口地址由4个字节组成,两个低字节存 放入口地址的偏移量,两个高字节存放它的段基值。中断响应以后, 表中对应的4个字节的内容分别被送人IP和CS,完成程序转移。表中中 断类型0、类型1、类型2等表示这个入口地址对应的中断类型码。如果 已知现在响应中断的中断类型码,就可以从中断矢量表中找到该中断 源的处理程序入口地址。设中断类型码为N,则有: 中断矢量地址=中断类型号*N 也就是(4*N,4*N十1)→IP;(4*N+2,4*N十3) →CS 这样就把中断处理程序的入口地址的偏移量和段基值分别送人IP 和CS,然后到此地址执行该中断的服务子程序