BIOS全称Basic Input/Output System,即基本输入/输出系统,是整个微机系统最基本的软件系统。在基于X86系列微处理机的微型计算机系统中,BIOS被固化在从0FE000H开始的8KB只读存储器(ROM)之中。当计算机加电启动时,微处理机从0FFFF0H地址开始执行BIOS的初始化程序,以完成自检、设备初始化、加载引导程序直到载入操作系统。除此之外,BIOS还负责主要I/O设备的管理和接口的基本控制,提供一系列操纵这些设备的基本功能。在使用BIOS对这些I/O设备进行控制时,程序员可以通过设置参数并触发特定软中断的方式来调用BIOS提供的各种功能,程序比较简洁易读,移植性也比较好,同时也能够减轻程序员对这些I/O设备直接编程的负担。
DOS全称Disk Operating System,是Microsoft公司为IBM/PC及其兼容机开发的一套单用户单任务操作系统。DOS提供了一组系统功能子程序,程序员可以通过触发DOS指定的软中断调用这些子程序,实现诸如I/O设备处理、文件管理、系统维护等功能。由于DOS运行于BIOS的基础之上,DOS提供的功能比BIOS提供的功能更加抽象化,操作更加简单,对硬件的依赖性也更小。所以,在编制汇编程序的时候程序员更加倾向于使用DOS提供的功能,除非某项功能只能通过调用BIOS功能才能完成。
表4-2是部分BIOS中断和DOS中断的功能。
表4-2 BIOS中断和DOS中断的部分功能
(续)
BIOS功能和DOS功能的调用都是通过INT软中断指令陷入到操作系统完成的。对于某些需要传递参数的调用,参数或参数的指针可以通过寄存器传送。大部分BIOS软中断和DOS软中断提供的是复合功能,即用一个子程序完成多个不同的功能,这就需要将一个功能号通过AH寄存器传递给中断处理程序,有时甚至需要把一个子功能号通过AL寄存器传递给中断处理程序。除此之外,中断处理程序还可能需要将一些参数通过诸如DS:DX之类的寄存器传入,这些功能号、子功能号和参数都必须在INT指令之前得到设置。比如下面是用来实现设置类型码为08H的中断向量的代码片断。
MOV AX,SEG INT_PROC
MOV DS,AX
MOV DX,OFFSET INT_PROC
MOV AL,08H
MOV AH,25H
INT 21H
这段代码可以被分为四个部分:
1)前三条指令,用来将INT_PROC的地址装入DS:DX,作为参数传递给DOS功能调用。
2)第四条指令,将AL设为08H,作为参数传递给DOS功能调用。
3)第五条指令,将功能号25H装入AH寄存器。(www.xing528.com)
4)最后一条指令INT 21H,触发软中断,实现系统陷入,使用DOS功能调用实现将08H号中断(由AL的值指定)的中断向量设置为INT_PROC地址(由DS:DX指定)的功能。
这也是汇编语言程序调用BIOS功能或DOS功能的基本过程:首先设置包括功能号和子功能号在内的各种参数,然后使用INT指令触发软中断以调用BIOS或DOS中断处理程序,最后根据中断处理程序的返回值进行下一步工作。
在DOS操作系统中,20H~3FH这十六个中断分配给DOS使用,DOS使用了其中的一部分,其余的中断被保留做扩展使用。从功能上来讲,DOS使用的中断又可以分成两类,一类是功能比较单一的简单DOS中断,包括INT 20H程序终止、INT 25H绝对磁盘读、INT26H绝对磁盘写、INT 27H程序终止并驻留内存等;另一类是通过一个中断提供多种不同功能的复杂DOS中断,如INT 21H。INT 21H的中断处理程序根据由AH寄存器传递的功能号和由AL寄存器传递的子功能号(如果需要的话)决定执行哪个子程序,为调用者提供什么样的功能。由于INT 21H提供了DOS操作系统的绝大多数功能,所以INT 21H又被称作DOS功能调用。
DOS功能调用提供的功能子程序超过80个,这些功能通过AH寄存器传递的功能号进行区分。这些子程序的主要功能包括:
2)文件管理和目录操作。
3)其他管理(如内存、时间、日期、中断向量表等管理)。
这些子程序给用户编程带来很大方便。使用DOS功能调用,用户不必了解有关的设备、电路、接口等方面的问题,只需直接使用INT 21H软中断指令调用即可。DOS功能调用的调用方法是:
1)功能号(00H~68H)→AH;
2)入口参数→指定寄存器;
3)INT 21H。
DOS就可根据所给信息自动转入对应子程序执行。
和DOS功能调用不同,不同功能组的BIOS基本调用使用不同的中断类型码,比如和屏幕显示相关的功能使用INT 10H,磁盘操作使用INT 13H,键盘操作使用INT 16H,打印机操作使用INT 17H,AT扩展使用INT 15H等。同一个功能组下的不同功能一般使用功能号区分,功能号一般也使用AH寄存器传递。所以,BIOS基本调用的步骤和DOS功能调用很接近。
1)功能号→AH;
2)入口参数→指定寄存器;
3)INT指令调用相应BIOS基本调用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。