汇编程序在调用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来执行。
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.