2011-11-15 89 views
0

我一直在尋找一些片斷,看到了這些線(.com文件的一部分):什麼是x86 16位彙編語言中的中斷69?

DB 66; 
    CALL D59C:C2C0; 
    INT 69 
    MOV SI, C8C6 

是什麼INT 69辦?

我沒有在網上找到任何東西,我沒有在這裏找到任何東西,以及:

奇怪的是,有沒有INT 69之前的任何值移動到AHAL

EMU8086. 8086 microprocessor emulator. Integrated disassembler.

+2

它是OS定義的。如果不知道自己的操作系統是什麼,我們就無法回答。 – ughoavgfhw

+0

它在Windows XP上。 – 0x90

+0

除非你正在做一些非常奇特的事情,否則在Windows XP上運行16位代碼實際上會在DOS模擬器中運行它。所以你想要查看DOS引用---見Bob Kaufman對Ralf Brown中斷列表的回答,這是*這個東西的參考。 (雖然請注意Windows XP自身使用'int 0x2e') –

回答

9

假設一切都在十六進制這裏,如果這是16位代碼,然後我們有:

66       DB 66 
9A C0 C2 9C D5    CALL D59C:C2C0 
CD 69      INT 69 
BE C6 C8     MOV SI, C8C6 

0x66是操作數大小覆蓋前綴(大概只是不拆卸正確這裏),這(在16位代碼)會導致以下指令取一個32位操作數而不是一個16位操作數。所以這段代碼實際上是:

66 9A C0 C2 9C D5 CD 69 CALL 69CD:D59CC2C0 
BE C6 C8     MOV SI, C8C6 

遠調用從16位代碼相當隨機的前瞻性16:32位絕對地址看起來不是很合理的我。

所以我猜想,這實際上是數據,而不是代碼...

2

一種用於x86的中斷搜索產生this list,一個拉爾夫·布朗大概寫。如果這是我相信的,那麼這是上一代中斷的最終清單。帶回回憶。

3

假設給定的代碼是指在16位模式下執行編碼和連續的指令,我對它有不同的解釋。

DB 66operand size prefix。在16位模式下,它告訴CPU將指令操作數解釋爲32位而不是16位。因此,CALL指令將被解釋爲CALL 16-bit selector:32-bit offset而不是CALL 16-bit selector:16-bit offset。地址的「丟失」2個字節是INT 69「指令」。

有效的代碼是那麼這樣的:

CALL 69CD:D59CC2C0 
MOV SI, C8C6 

但是,這並沒有多大意義,我因爲這樣的地址調用(偏移>地址0FFFFh)將導致異常。這是什麼類型的代碼?