关于Asm指令的INT与CALL

时间:2014-10-18 22:44:02

标签: assembly x86 nasm

我在网上搜索但是我找不到int和调用asm之间的任何区别。 什么是call和int asm指令之间的区别?

他们都叫一些功能 " INT"调用系统功能 "调用"调用用户函数。

但在实际模式下他们一样吗? 我无法理解其中的差异。

并且,int调用了在bios上定义的ivt(中断向量表)吗? 但是电话也可以做同样的操作吗?为什么需要打电话或分开?

2 个答案:

答案 0 :(得分:4)

表面上看,区别在于:

CALL获取过程地址,该地址可以是near或far,并且可以作为常量或寄存器提供。同时,INT取一个中断号,在0000:0000(实模式)中用作中断向量表中的索引,以查找地址。 CALL将返回地址(近或远)推送到堆栈; INT按下标志寄存器和返回地址(总是很远)。

在保护模式下,INT非常不同。它涉及用户到内核模式切换。

INT用于使用BIOS和DOS服务。 CALL用于调用您自己的程序。你可以在你的一个程序中创建一个中断向量点,但那又有什么意义呢?

答案 1 :(得分:1)

  

我在网上搜索但是我找不到int和调用asm之间的任何区别。什么是call和int asm指令之间的区别?

全面的答案将是非常长的,简短的基于意见的答案是不够的。所以我只回答

  

我在网上搜索但我找不到任何...

在您的网络搜索中,您更喜欢可信和专业的信息来源,并且您会找到您所追求的内容。

我建议从Wikipedia: INT (x86 instruction)开始,阅读也链接和"另请参阅"文章(肯定是Wikipedia: Interrupt descriptor tableWikipedia: System call,其他关键术语可能是call gateinterrupt gate ...),并熟悉外部参考文献。

最重要的参考文献是Intel® 64 and IA-32 Architectures Software Developer Manuals,其中第6章→程序调用,中断和例外应该回答您想要知道的所有内容