gpt4 book ai didi

assembly - Asm 指令上的 INT 与 CALL

转载 作者:行者123 更新时间:2023-12-05 01:02:52 25 4
gpt4 key购买 nike

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

它们都调用了一些函数"int"调用系统函数"call"调用用户函数。

但在实模式下它们是一样的吗?我无法理解其中的区别。

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

最佳答案

从表面上看,区别在于:

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

在保护模式下,INT 是相当不同的。它涉及用户到内核模式的切换。

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

一些具有供其他程序使用的服务的实模式 DOS 程序也用于 Hook 中断向量。例如,Microsoft 鼠标驱动程序(一个常规程序,不是 DOS 的一部分)将 Hook INT 33h 向量,程序将使用它与鼠标交互。为了使向量保持有效,这些程序必须驻留在内存中。

关于assembly - Asm 指令上的 INT 与 CALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com