关于Asm指令的INT与CALL

问题描述 投票:1回答:2

我通过网络搜索但我发现int和调用asm之间没有任何区别。什么是call和int asm指令之间的区别?

它们都调用一些函数“int”调用系统函数“调用”调用用户函数。

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

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

assembly x86 nasm
2个回答
4
投票

从表面上看,区别在于:

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

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

INT用于消耗BIOS和DOS的服务。 CALL用于调用您自己的程序。您可以在其中一个程序中创建一个中断向量点,但重点是什么?


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章→程序调用,中断和例外应该回答你想知道的所有内容

© www.soinside.com 2019 - 2024. All rights reserved.