2012-05-18 47 views
1

讀取CPU端口(通過in/out指令)是否有任何副作用?讀取I/O端口是否有任何副作用?程序化I/O中的情況如何?

例如:

  1. 是否「知道」該端口已被讀取的設備?

  2. 不小心讀取任意一個端口會造成什麼危害?

我假設它不應該,但後來事情沒有意義對我說:

如果沒有副作用,那麼如何ATA驅動器,當進行編程的I/O,「知道」何時讀取了一個單詞,因此它可以提供下一個數據字?

+1

也許我誤解了,但不是讀I/O的副作用的定義? –

+0

@KilianFoth:這是一個輸入端口...如果它只是讀取電壓,根據定義它不應該改變該值,對吧?或者可能不是,這就是爲什麼我問...無論哪種方式,對我來說沒有任何意義... – Mehrdad

+0

它*不應該*,但CPU是複雜的,並具有各種專有怪異。你最好的選擇是嘗試一下,看看會發生什麼。 – Polynomial

回答

4

是的,讀取端口可能會產生副作用,但不管它是否(如果是這樣,它們是什麼)在不同設備之間有所不同。

我從來沒有聽說過讀取端口可能會損壞的設備。一個(但大多是舊的)可能會被寫入一個不正確的值損壞/造成損害,但我不知道任何讀數可能會造成損害。在大多數情況下,閱讀的副作用相當輕微。

閱讀行爲可以告訴設備正在閱讀。要從設備讀取數據,您需要在總線上放置一個命令和一個地址。如果命令是「讀取」並且地址對應於設備,則設備正在被讀取。

+0

+1好的謝謝。任何關於ATA的回答? (我讀的端口'是否告訴驅動器該端口被讀取?或者是否發現了其他方法?) – Mehrdad

+0

@Mehrdad:我已經給答案增加了一些。 –

+0

'要從設備中讀取,請在總線上放置一個命令和一個地址。「 - >真棒,這似乎回答了我所有的問題,謝謝! – Mehrdad