为什么汇编在使用CALL时会使用INT指令?

时间:2015-03-22 11:07:39

标签: assembly

如果我没弄错的话,执行INT基本上就是一个软件子程序。当你可以使用CALL执行这些中断例程时,为什么会有INT指令?

1 个答案:

答案 0 :(得分:3)

使用INT使API非常通用,并且与定义它的系统中所有函数入口点的位置无关。您不需要具有定义链接到的所有外部符号的库。例如,您可以调用INT xxH来获取某个值xx并使用寄存器设置某种方式。如果使用CALL,则必须直接通过链接库知道函数的地址,或者通过已知的表或其他位置间接知道该函数的地址,这可能仍需要表位置的链接库。

您的BIOS之类的子系统使用此方法,因为他们不必发布一堆单独功能的地址,或者无法维护为每个可能的操作系统分发链接/ lib文件的任务或你可能有的开发工具。 (更不用说,您可能正在编写自己的操作系统。)而且对于不同的PC硬件制造商来说,它可能也会有所不同。 INT机制完全独立于所有这些。

如果您有一系列由特定软件中断和寄存器设置服务的功能,您可以更改所有功能的位置,并且功能集合仍将与使用的所有软件保持兼容中断。非常方便用于BIOS或Linux系统调用等。