汇编程序在调用INT中断程序(比如INT13)的过程中,CPU到底做了什么?

汇编程序在调用BIOS的中断程序(比如INT13)的过程中,CPU到底做了什么?
比如以下程序:
MOV AX,0X0820
MOV ES,AX
MOV CH,0 ;柱面 0
MOV DH,0 ;磁头 0
MOV CL,2 ;扇区 0
MOV AH,0X02 ;AH=2 读入磁盘
MOV AL,1 ;1个扇区
MOV BX,0 ;
MOV DL,0X00 ;A驱动器
INT 0X13 ;调用磁盘BIOS
JNC FIN ;没出错转FIN
FIN:
在程序执行INT 0X13 过程中(亦即在INT 0X13中,JNC FIN之前),到底发生了什么
是 (1)CPU转去执行了BIOS中的相应指令,但CPU执行的不都是内存中的指令吗?
还是(2)BIOS中的指令可以不用CPU来执行。

INT 13H这类软件中断指令,功能上是带有现场状态保存和断点地址保存的无条件转移指令。

执行这条指令时,它做这几件事:
1. 将CPU内的标志寄存器内容压入堆栈,用来保存断点的现场状态。
2. 将断点的地址(CS和IP寄存器的当前值)压入堆栈保存,以保存返回所需的断点地址。
3. 按中断号取得中断向量,并无条件跳转到中断向量所指向的目标地址。
此后,CPU就进入中断服务程序去运行它的程序了。而中断服务程序最后会有一条IRET中断返回指令,通过它恢复现场返回断点,程序继续执行INT 指令后面的程序指令。

关于你的两个疑问:
(1)CPU转去执行了BIOS中的相应指令,说得没错。
内存并不只指RAM内存条,ROM也是内存的一部分。
在DOS下,RAM只占用1M地址空间的前640KB,还有384KB系统保留的地址,其中的一部分就是给ROM用的。
ROM中的BIOS程序,是CPU可以直接执行的程序指令。
你电脑开机时,CPU最初执行的POST自检程序,也是在ROM中的。
而ROM中的BIOS(基本输入输出系统)本来就是让电脑在工作中随时调用的功能性子程序的合集。

(2)这就是错解了。
在运行DOS的电脑中,一切指令全部都是由CPU执行处理的。追问

CPU中运算放大器吗?
32位和64位的操作系统还调用BIOS中的这些中断函数吗?

追答

运算放大器是模拟电子技术中的概念,不是数字电路中的元件。
CPU里没有运算放大器。

32位和64位操作系统中,不再使用BIOS里的中断了。它们有操作系统自带的底层输入输出设备驱动。
BIOS只在16位实模式的工作方式中才使用。刚开机启动、操作系统启动之前,CPU是工作在实模式的。16位的DOS操作系统也是工作在实模式下。
32位和64位系统中, CPU工作在保护模式下。

追问

有一位朋友说:
1INT 0X13 过程中执行由CPU去执行中断列表中对应的程序(在memory中)
不知道,你们两位,哪位说的对了。

追答

INT 13H这个中断,是BIOS中断。
原始的中断服务程序,是在主板上的ROM里(ROM也是内存)。

但是,现在的电脑主板上的CMOS设置中,有一项设置是BIOS Shadow,它的作用是将ROM的内容读到RAM里,以使运行速度更快。(RAM的速度比ROM快几个数量级)。

另外,系统程序和用户程序,是可以修改中断向量的,可以将中断向量指向RAM区,以便在原来ROM中的程序执行前,插入用户代码,甚至用自己的程序代替原来ROM中的程序。高版本的DOS就是这样对INT 13H作了扩充,所以在DOS中查看INT 13H的向量,它确实是指向RAM的,也就是入口点是在RAM区,而不是直接指向ROM.

温馨提示:答案为网友推荐,仅供参考
相似回答