2011-10-04 97 views
3

我目前正在使用emu8086(所以我編程爲8086mP),但是由於它無法「理解」像int 21h/ah = 5bh和其他許多中斷,所以我很難與emu8086配合使用。我應該使用什麼彙編/ ide能夠使用其他中斷嗎?(Emu8086甚至不支持它應該的中斷,更不用說後面添加的中斷)哪個彙編程序支持大部分現有的中斷?

+0

中斷服務程序不是處理器的功能,也不是任何彙編程序。它們由BIOS和操作系統提供,地球上沒有任何彙編程序與它們有任何關係。另一方面,'int'助記符(翻譯爲'0CDh',除了'int 3'),幾乎所有東西都支持。總結一下,你的問題沒有意義。特別是當涉及到彙編器和仿真器之間的混淆時。對於'int 21h',安裝DOS – Powerslave

回答

1

我不知道我理解你所說的「支持中斷」的意思。如果問題是通過陷阱爲各種機器陷阱或操作系統調用提供所謂的操作碼,那麼最簡單的方法就是爲每個這樣的陷阱定義參數化宏,然後調用適當的宏。

因此「int21/ah = 5bh」可能表示操作系統調用「OutputCharacterAL」。你會定義一個宏:

OutputCharacterAL macro 
      mov ah,5bh 
      int21 
      mend 

  mov AL,"*" 
     OutputCharacterAL 

調用它幾乎任何彙編器將讓你這樣做,所以沒有任何「最佳」。

+0

我寧願爲這個定義一個運行時庫 – Powerslave

+0

@Powerslave:你可以這樣做,以一個價格。陷阱的要點是在操作系統和應用程序之間提供隔離。如果你堅持使用子程序庫,這意味着每個「OS調用」在執行子程序調用之前都會有額外的開銷,然後執行陷阱,也就是說操作系統不與應用程序隔離。如果你定義了一個宏庫,你可以隨時使它產生一個運行時庫調用,用於那些操作系統開銷不重要的操作系統調用,並且子例程可以使用用戶空間的工作,操作系統方面覺得這樣做很尷尬。 –

+0

那麼,每個操作系統都和RTL函數非常相似,如'fork()'或'HeapAlloc()'等等(除了這兩個是OS特定的)。其目的實際上是將應用程序與陷入內核的代碼存根分離開來。這提供了一個粗糙的解耦和一個漂亮的乾淨的API。陷阱的重點不在於與操作系統隔離(甚至更多地,您正在調用特定於操作系統的向量,因此您將與它緊密耦合),而是提供從userland調用特權代碼的方法。另外,除了陷入內核的開銷之外,子程序調用的成本可以忽略不計。 – Powerslave