我在网上搜索,但我找不到 int 和调用 asm 之间的任何区别。call 和 int asm 指令有什么区别?
它们都调用一些函数“int”调用系统函数“call”调用用户函数。
但在实模式下它们相同吗?我不太明白其中的区别。
并且,int 是否调用在 bios 上定义的 ivt(中断向量表)?但是调用也可以做同样的操作吗?为什么需要调用或分开两者?
从表面上看,区别在于:
CALL 获取过程地址,它可以是近的或远的,并作为常量或在寄存器中提供。同时,INT 取一个中断号,作为在 0000:0000(实模式下)中断向量表中查找地址的索引。CALL 将返回地址(近或远)压入堆栈;INT 推送标志寄存器和返回地址(总是很远)。
在保护模式下,INT 是相当不同的。它涉及用户到内核模式的切换。
INT 用于消费 BIOS 和 DOS 的服务。CALL 用于调用您自己的过程。您可以在您的一个程序中设置一个中断向量点,但有什么意义呢?