2015-07-21 58 views
0

我最近開始嘗試學習如何在x86彙編中編程,並且我正在尋找一種資源來學習直接I/O(如使用「in」和「出「指示)。哪裏可以找到這些信息?x86彙編中直接輸入/輸出的資源

+0

像這樣的要求提供資源而沒有任何研究證據的問題往往是作爲題外話被封閉的。快速谷歌顯示有大量的材料在那裏,其中一個是以前的這個問題有一些好評的答案:http://stackoverflow.com/questions/3215878/what-are-in-out-instructions-in-x86 -used-for –

+0

使用IN和OUT指令沒有太多要了解的內容。他們讀取和寫入給定端口的值。這個難點在於知道使用哪個端口以及給定設備的數值。每種設備都不同,差別很大。此外,目前大多數設備都使用內存映射I/O,並且不使用IN/OUT指令。另請注意,大多數操作系統都會阻止程序使用IN/OUT或任何其他方式直接與硬件進行交互。 –

回答

1

這是一個非常寬泛的問題,難道不容易回答!

首先,您需要對硬件有一個直覺:邏輯網絡和總線如何工作。

第二與IA32E有兩個地址空間:

  • IO地址空間(與inout訪問)
  • 存儲器地址空間

在開始的所有設備迴應上使用固定的標準地址(例如8042鍵盤和鼠標控制器上60H64H響應)的IO地址空間。隨着Plug'n'Play技術(如PCI和後繼)的出現,地址變得可配置(並且需要注意新的地址空間,並且只有很少的設備(如PCI主控制器)保持其地址不變。
幾乎所有設備現在都可以重新映射,即使那些設備必須駐留在標準地址。作爲IO地址空間微小(64KiB + 4),現在的共同趨勢是使用內存映射io,即使用內存地址空間(與PCI Express類似)。

設備編程需要的是其數據表及其拓撲結構,即它如何連接到系統。所以你一般也需要你的主板的數據表或圖表。 對於高級IO編程會話,您可以嘗試使用XHCI(USB3.0)控制器。


不復雜,您可以從​​開始。
這很有趣,如果你有一個揚聲器,你可以發出聲音!

看看這個樣品assembly code
另請參閱OS Dev上的此resource


注意:不能直接訪問硬件上的現代操作系統。


推薦閱讀:

The art of assembly language
Ralf Brown files
IO Port on OS Wiki