???????
分析這幾個(gè)容易混淆的概念.
??????? 引用一段資料: 幾乎每一種外設(shè)都是通過讀寫設(shè)備上的寄存器來進(jìn)行操作的。外設(shè)寄存器也稱為“I/O端口”,通常包括:控制寄存器、狀態(tài)寄存器和數(shù)據(jù)寄存器三大類,而且一個(gè)外設(shè)的寄存器通常被連續(xù)地編址。CPU對(duì)外設(shè)IO端口物理地址的編址方式有兩種:一種是I/O映射方式(I/O-mapped),另一種是內(nèi)存映射方式(Memory-mapped)。具體采用哪一種則取決于CPU的體系結(jié)構(gòu)。 有些體系結(jié)構(gòu)的CPU(如PowerPC、m68k等)通常只實(shí)現(xiàn)一個(gè)物理地址空間(RAM)。在這種情況下,外設(shè)I/O端口的物理地址就被映射到CPU的單一物理地址空間中,而成為內(nèi)存的一部分。此時(shí),CPU可以象訪問一個(gè)內(nèi)存單元那樣訪問外設(shè)I/O端口,而不需要設(shè)立專門的外設(shè)I/O指令。這就是所謂的“內(nèi)存映射方式”(Memory-mapped)。主要缺點(diǎn)是是存儲(chǔ)器空間變小.
而另外一些體系結(jié)構(gòu)的CPU(如X86)則為外設(shè)專門實(shí)現(xiàn)了一個(gè)單獨(dú)地地址空間,稱為“I/O地址空間”或者“I/O端口空間”。這是一個(gè)與CPU的RAM物理地址空間不同的地址空間,所有外設(shè)的I/O端口均在這一空間中進(jìn)行編址。CPU通過設(shè)立專門的I/O指令(如X86的IN和OUT指令)來訪問這一空間中的地址單元(也即I/O端口)。這就是所謂的“I/O映射方式”(I/O-mapped)。與RAM物理地址空間相比,I/O地址空間通常都比較小,如x86 CPU的I/O空間就只有64KB(0-0xffff)。這是“I/O映射方式”的一個(gè)主要缺點(diǎn)。
???????? 在張凡的<微機(jī)原理與接口技術(shù)>一書中提到的I/O端口的兩種編址方式:(1)I/O與存儲(chǔ)器統(tǒng)一編址(如單片機(jī));(2)單獨(dú)編址(X86系統(tǒng)).這和上述的內(nèi)存映射方式,I/O映射方式分別對(duì)應(yīng).
??????? 我的理解是:寄存器就是I/O端口;而采用內(nèi)存映射方式的I/O是存儲(chǔ)器的一個(gè)子集,采用I/O單獨(dú)映射方式的I/O是和存儲(chǔ)器平級(jí)的存儲(chǔ)空間.