@
參考於:
新人最近剛學機組,發現這幾個概念不太清楚,特地學習借鑒了前面的大佬們的博客。
且僅以個人理解,若有不正確之處,歡迎指出。
機器字長、存儲字長、指令字長
概念
-
機器字長:CUP進行一次整數運算所能處理的二進制數據的位數
- CPU總線的寬度=運算器的位數=通用寄存器的寬度=數據總線寬度
- 字長:不加修飾的一般為機器字長。
- CPU總線的寬度=運算器的位數=通用寄存器的寬度=數據總線寬度
-
字:字是指在計算機中作為一個整體被存取、傳送、處理的一組二進制數。它代表計算機處理指令或數據的二進制數位數,字長是由CPU的類型所決定,不同的計算機系統的字長是不同的,常見的有8位、16位、32位、64位等,字長越長,計算機一次處理的信息位就越多,精度就越高,
- 注意字與字長的區別,字是單位,而字長是指標。
-
存儲字長:一個存儲單元中二進制代碼的位數(通常和MDR位數相同)
- 存儲字長不一定與機器字長相同(這也就出現了后面的主存容量擴展的問題(位擴展)),具體需要看機器的編址方式。一般情況下都是存儲字長小於等於機器字長,即存儲字長小於等於數據總線位數。
- 存儲字長一般不固定的,固定的是每個字里面的字節大小(1字節=8bit)
-
數據字長:計算機數據存儲所占用的位數。
-
存儲單元:存放存儲字或存儲字節的主存空間被稱為存儲單元或主存單元。是CPU訪問存儲器的最小單位。因此每個存儲單元都有對應的地址。至於具體存放什么這是由計算機的結構確定的。存儲字或存儲字節也可以理解為存儲元集合,因此,存儲單元也可以說是存放一個機器字的所有存儲元集合(一般情況下存儲字長等於機器字長)
-
存儲元:存儲元指的是存放一個二進制位(1或0)的基本器件(或電路)也被叫做存儲元
- 由若干個存儲元組成一個存儲單元,然后再由許多存儲單元組成一個存儲器。
-
存儲容量:對於字節編址的計算機,以字節數來表示存儲容量;對於字編址的計算機,以字數與其字長的乘積來表示存儲容量。
即\(存儲容量=存儲單元個數*存儲字長(或=存儲單元個數*存儲字長/8)\)
或\(字數(存儲單元個數)=存儲容量/字長\)
-
指令字長:一條指令的總長度,指令字長取決於操作碼、操作碼地址的長度和操作碼地址的個數。
- 半字長指令、單字長指令、雙字長指令 ——指令字長是機器字長的多少倍,如雙字長指令:指令字長為機器字長的兩倍
- 指令字長會影響取指時間,如:機器字長=存儲字長=16bit,則取一條雙字長指令需要兩次訪存操作
-
地址線:\(存儲單元的個數=存儲容量=2^{地址線條數}\) ,若一個CPU有N根地址線,則CPU的地址總線寬度為N,可以尋址\(2^N\)個內存單元,即每一條地址總線都對應着一個存儲單元。
-
數據線:數據總線位數代表cpu單次交換數據量。數據線的條數=機器字長的位數
(注意
1:MDR與數據總線寬是不一定一樣的,只與數據的個數有關,且和存儲字長位數一樣,如果數據線寬度和MDR不一樣,那么就代表傳一個數據要傳多次。
評論有句生動形象的描述:“高速路上的車流量(MDR:位於CPU內)和出高速路口的車流量(總線:位於CPU外)是不一樣的”
2:存儲字長一般小於等於數據線寬度
)
-
存儲器數據寄存器 MDR(Memory Data Register-MDR (或MBR) ):用於存放主存單元中的數據的寄存器
按字編址、按字節編址、按字尋址、按字節尋址
- 存放一個機器字的存儲單元,通常稱為字存儲單元,相應的單元地址叫字地址。
- 存放一個字節的存儲單元,稱為字節存儲單元,相應的地址稱為字節地址。
- 如果計算機中可編程的最小單位是字存儲單元,則該計算機稱為按字尋址的計算機。
- 如果計算機中可編程的最小單位是字節,則該計算機稱為按字節尋址的計算機。
個人通俗理解:編址是內存的事(涉及存儲字長),以便CPU能正常訪問它;而內存尋址是CPU的事(涉及機器字長)。
區分尋址空間與尋址范圍兩個不同的概念,尋址范圍僅僅是一個數字范圍,不帶有單位
而尋址范圍的大小很明顯是一個數,指尋址區間的大小
而尋址空間指能夠尋址最大容量,單位一般用MB、B來表示
所謂按字和按字節只是尋址范圍的計量標准不同而產生的尋址范圍數不同而已,其本質上總量還是一樣的。
一般情況下,機器字長與存儲字長一致,下面的例子均建立在該前提下。
按字節連續編址
以一個字節的長度長度來划分主存,即存儲空間的最小編址單位是字節
如,IBM 370機的機器字長為\(32\)位,若按字節(\(1bit=1B\))編址。則一個存儲單元中存放一個字節,即放八位,如下表,CPU每次最多可以存取\(4(32/8)\)個單元的內容。
1B | 1B | 1B | 1B |
---|---|---|---|
1B | 1B | 1B | 1B |
上面提到過,每個存儲單元都有與之唯一對應的地址,由於數據從低位到高位可以從左往右排序,也可以從右往左排序,因此無法用最左或最右來表征數據的最高位或最低位,所以關於編址方式又分為了小段方式與大端方式。
大端模式(便於人類閱讀):按從最高有效字節到最低有效字節的順序存放數據,即最高有效字節放在前面
小端模式(便於機器處理):按從最低有效字節到最高有效字節的順序存放數據,即最低有效字節放在前面
還是以上面IBM 370機為例子。
假設第一個存儲單元首地址為\(0800H\)且地址以十六進制形式表示,
有一個double型的數據(占64位):\(00\) \(01\) \(02\) \(03\) \(04\) \(05\) \(06\) \(07H\) 存放在該機中
下面展示兩種存儲方式。
大端模式:(注:粉色的為地址編號,單元格中存放的為數據內容,由於一位十六進制數對應4個二進制數,故對於一個大小為8為的單元格可以存放兩個十六進制數,下同)
【圖 1】
小端模式:
【圖 2】
按字連續編址
以存儲字長(默認等同於機器字長)的長度來划分主存,即存儲空間的最小編址單位是一個字(同理,雙字編址就是以兩個字位最小編址單位),即一個存儲單元的大小為一個字,從0號單元開始編址。0號單元一個字大小,1號單元一個字大小。。。
還是以IBM 370機為例子。
【圖 3】
按字尋址
一組地址線的每個不同狀態對應一個字的地址,存儲空間的最小編址單位是字。
因為計算機在尋址的過程中,會區分字里面的字節,這樣就會占用一部分的地址線。
它每一個存儲字包含4個可以獨立尋址的字節,
【圖 4】
例子
IBM 370機的機器字長為32(注:字長這一條件只有在按字尋址的前提下才有用),若按字節尋址,32bit=32/8=4個字節。故需要\(log_24=2\)條地址線來區分字內字節地址。
如果此時假設其有24根地址線,則真正按字尋址的地址線只有22條(24-2,有 H兩條用於區分字內地址)。故尋址范圍為:\(2^{22}W\) (W是字長的意思)
按字節尋址
一組地址線的每個不同狀態對應一個字節的地址,存儲空間的最小編址單位是字節。
對於按字尋址所討論的例子來說,按字節尋址就無需單獨留出地址線用於區分字內地址了,因此真正用於尋址的地址線有24條,故尋址空間為:\(2^{24}B\)
一些連接圖
主存與CPU連接圖(存儲器按字節編址,機器字長64位)
【圖 5-1】
【圖 5-2】
例題
例1
1MB容量的存儲器字長為32位,問
1)按字節編址,地址寄存器和數據寄存器各幾位?編制范圍為多大?
2)按字編址,地址寄存器和數據寄存器各幾位?編制范圍為多大?
3)按半字編址,地址寄存器和數據寄存器各幾位?編制范圍為多大?
[解]
1)若按字節編址:
\(1字節=1B=8bit\)
\(1MB=2^{20}×8位\) 因為以字節編址,所以寄存器一次只能讀寫一個字節大小,故數據寄存器為8位;編址范圍為:\(0\)~\((2^{20}-1)\) 因此需要20根地址線才能編址1MB空間,即地址寄存器為20位。
2)若按字編址:
\(1字=32位=4B\)
\(1MB=2^{18}×32位\) 因為以字編址,所以寄存器一次只能讀寫一個字大小即32位,故數據寄存器為32位;
所以編址范圍為:\(0\)~\((2^{18}-1)\) 又或者是\(2^{20}B/4B=2^{18}\) ,故需要18根地址線才能編址1MB空間。
3)若按半字編址:
\(半字=16位=2B\)
因為以半字編址,所以寄存器一次只能讀寫半各字大小即16位,故數據寄存器為16位;
與2)同理:\(2^{20}B/2B=2^{19}\) ,故需要19根地址線才能編址1MB空間。
注意,類似於詢問編址范圍,還有這類的問法“求其尋址單元數?1)\(2^{20}個\) ;2)\(2^{18}個\);3)\(2^{19}個\)”
例2
對於24位地址線的主存而言
1、若字長為32位:
1-1)按字節尋址的范圍為16M。(\(2^{24}B=16M\))
1-2)按字尋址的范圍為4M。 (\(2^{24}B/4B=4M\))
2、若字長為16位:
2-1)按字節尋址的范圍為16M。(\(2^{24}B=16M\))
2-2)按字尋址的范圍為4M。 (\(2^{24}B/2B=8M\))