繁体   English   中英

在8086实模式下可以使用哪些中断?

[英]What interrupts are available in 8086 real mode?

我已经阅读了关于BIOS中断的信息,并且知道它们只能在8086实模式下访问。

我的问题:

  • 还有其他中断吗? 我已经阅读过关于DOS中断的内容,但我很困惑,如果它们在实模式下也可用,以及DOS中断列表是什么。

  • 进入保护模式后,存储在0x00的BIOS中断表会发生什么? 是替换,还是存在但只是无法访问?

  • BIOS中断如0x13或0x19,它们是如何实现的? 它是在软件中还是通过处理器?

在实模式下,您有256种不同的SOFTWARE TRIGGERED中断。 在BIOS和DOS的早期阶段,它们只被用作“跳转地址”表。 例如,DOS主要使用INT 21,因此应用程序可以编码为使用INT 21处理器指令而不是CALL 1234:5678 - 真实地址会随着每个新版本的DOS而改变,但INT 21仍然存在。 当dos启动时,它会将其真实处理函数的地址放入中断表的那个槽中。

INT XX处理器指令可以使用0到255之间的中断号,因此所有这些都可用 如果在相应的中断表槽中有任何有用的东西是另一回事 - 但是有很多常驻程序,它使用了一些特定的中断(如果加载了多个这些程序,就会导致冲突)。

除此之外还有硬件中断 - 这些中断不是由软件触发,而是由键盘,软盘或硬盘等外部设备触发,当他们想告诉处理器“我需要一些服务”时。 因此,例如,当您按下键盘上的某个键时,键盘控制器会触发中断9(不确定数字,这是很久以前的事,但中断8-15是为硬件保留的)。 启动时,BIOS会将其键盘处理程序的地址放入中断表的相应条目中。 无论何时按下一个键,键盘控制器都会触发中断9,这使得处理器在中断表中查找相应的地址,调用它 - 这将控制转移到BIOS - bios做了任何必要的事情来从中获取实际的密钥。键盘,然后返回到应用程序,它不知道发生了什么帽子。

所以回答你的第一个问题:有256个中断。 0-7用于处理器内部的东西。 07-0F由硬件触发。 10-1F保留给Bios,DOS使用20-27。 其余的都未使用,这意味着,在中断表中没有为它们存储有效的过程入口点。 (后来这变得非常模糊,我在这里过于简单化了)。

第二个问题:一旦进入保护模式,中断表将由处理器置于保护模式的操作系统替换,因为BIOS例程是为没有保护模式的8086编写的,如果没有安全使用,通常是不安全的。不是在实模式下,并且不能很好地处理多任务处理。 任何体面的操作系统都必须自己做这种事情。 DOS中使用的20-27的中断在其他操作系统中没有替代它们。 因此,您无法在Linux上运行dos可执行文件,除了无法运行它们之外,如果它们使用dos中断,它们将无法工作。

第三个问题:BIOS中断本身就是纯软件,但它们会触发硬件事件。 中断13用于软盘/硬盘。 想要直接从软盘读取扇区的程序会用一些预定义的值填充处理器寄存器,调用中断13(因此跳转到BIOS例程,当BIOS启动时,其地址被放入中断表中),然后让bios做它的工作。 还没有硬件的东西。 当然,在中断处理程序中,BIOS会读取和写入软盘控制器的硬件端口,但应用程序不必了解详细信息。

  • DOS中断可用于DOS。 (Windows中的16位程序也可以使用它们,因为它在虚拟8086模式下运行,而Windows试图像过去那样呈现一个环境。)在操作系统开始加载之前它们不存在,虽然......如果你正在构建自己的操作系统,除非你把它们放进去,否则它们根本就不存在。

  • 一旦切换到保护模式,基本上就会运行在切换期间设置的中断描述符表(IDT)。 旧表仍然存在,因为它的格式足够不同,如果在切换之前发生中断,您不能只是覆盖它而不会有麻烦。 而且你通常会出于几个原因保留它,包括它的用处,以防你出于某种原因必须切换回实模式。 (Windows 9x曾经这样做。有些驱动程序是16位,没有人想要更新它们......所以Windows有能力让这些驱动程序以实模式运行。)但是当处理器处于受保护状态时它不会被使用模式。

  • 处理器不直接参与中断的实际处理。 它甚至不知道它正在运行什么类型的计算机。基本上,它只是在IDT中看到一个条目并调用该中断处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM