每個連接到I/O匯流排上的設備都有自己的I/O地址集,即所謂的I/O埠(I/O port)。
在
IBM PC體系結構中,I/O地址空間一共提供了65,536個8位的I/O埠。可以把兩個連續的8位埠看成一個16位埠,但是這必須是從
偶數地址開始。同理,也可以把兩個連續的16位埠看成一個32位埠,但是這必須是從4的整數倍地址開始。有四條專用的
彙編語言指令可以允許
CPU對I/O埠進行讀寫:它們分別是in、ins、out和outs。在執行其中的一條指令時,CPU使用
地址匯流排選擇所請求的I/O埠,使用
數據匯流排在CPU寄存器和埠之間傳送數據。
I/O埠還可以被映射到物理地址空間:因此,處理器和I/O設備之間的通信就可以直接使用對內存進行操作的彙編語言指令(例如,mov、and、or等等)。現代的硬體設備更傾向於映射I/O,因為這樣處理的速度較快,並可以和
DMA結合起來使用。也就解釋了為什麼32位系統名義上支持4G內存,實際上你裝上4G內存條在機器上是不行了。因為訪問不到4G,還需要為顯卡,
音效卡等設備提供物理地址的映射。
系統設計者的主要目的是提供對I/O編程的統一方法,但又不犧牲性能。為了達到這個目的,每個設備的I/O 埠都被組織成一組專用寄存器。CPU把要發給設備的命令寫入
控制寄存器(control register),並從
狀態寄存器(
status register)中讀出表示設備內部狀態的值。CPU還可以通過讀取輸入寄存器(input register)的內容從設備取得數據,也可以通過向輸出寄存器(output register)中寫入位元組而把數據輸出到設備。