2014-10-18 42 views
2

我在網上搜索,但我無法找到int和呼叫asm之間的任何區別。 call和int asm指令有什麼區別?INT與Asm指令上的呼叫

它們都調用一些函數 「int」調用系統函數 「調用」調用用戶函數。

但在實模式下它們是否一樣? 我無法理解這種差異。

而且,int調用在bios上定義的ivt(中斷向量表)嗎? 但是call也可以做同樣的操作嗎?爲什麼需要呼叫或劃分兩者?

+1

BIOS中斷調用可以通過只知道中斷/功能號作出一切 - 您不需要知道的實際地址。這是一個抽象,就像函數名一樣。 – 2014-10-19 01:19:54

回答

3

表面上看,所不同的是:

CALL取程序地址,其可以是或近或遠,並提供或者作爲恆定或在寄存器中。同時,INT採用一箇中斷號,在0000:0000(實模式)的中斷向量表中用作索引來查找地址。 CALL將返回地址(近或遠)推入堆棧; INT推入標誌並返回地址(總是很遠)。

在保護模式下,INT是非常非常不同的。

INT用於消耗BIOS和DOS的服務。 CALL是用於調用你自己的程序。你可以在你的一個程序中創建一箇中斷向量點,但是重點是什麼?

+0

爲了進一步閱讀,你會推薦其他來源,然後在我的答案中提到的那些?與Vlad Pirogov的「The Assembly Programming Master Book」類似嗎? **你在哪裏學習答案? – xmojmr 2014-10-19 06:38:38

+0

已經有一段時間了,我不記得了。可能是Jourdain的書。 – 2014-10-19 20:03:26

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和異常應該回答你想知道

+1

通常,您沒有權限訪問中斷代碼所在的內存。您只能導致中斷,這將更改特權級別(包括從用戶空間到系統空間的內存映射)。 – turboscrew 2014-10-19 23:03:41