?? 第03章 計算機原理.htm
?? 電子書籍(白話c++)非常好用的一本書
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
??
<P>有處理數據的能力:工具箱中一把螺絲刀。</P>
<P>一只狗和一只豬從二者前面走過,它們不知用后者把前者擰下。因為馬克思說了,只有人類才會制造和利用工具。</P>
<P>CPU也只是一個工具。盡管它有處理各數據的能力,但必須由人來控制它:什么時候,什么方法,計算什么樣的數據。這樣的工具并不僅有CPU,早在你我童年時愛不釋手的,會自已搖擺走路的玩具小鴨內,那個發條就是這種工具。通過既定的設計,發條具有把人擰緊的能量存儲,然后釋放,一點點控制其它齒輪,小鴨的腳,最終讓玩具小鴨如人所愿地走。</P>
<P> </P>
<P>發條處理數據的動作很簡單,只須一點展開就行。但是如果沒有人事先將其擰緊,它一樣動不了。CPU要處理的數據復雜,處理的方法更復雜。同樣,必須有<B>人</B>事先將<B>計算機處理數據的方法</B>存儲在上述的存儲器上,在要開始處理時,裝上這些方法,然后開始執行。</P>
<P>一切重要概念至此呼之欲出:</P>
<P> </P>
<P>人不是普通的人,是偉大的程序員(當然當然,各行各業除了中國電信以外的從事者都很偉大);</P>
<P> </P>
<P>計算機處理數據的方法,便是:程序!程序??!程序??!</P>
<P>《超級解霸》是什么?是音頻視頻播放軟件,但歸根是處理多媒體數據的程序?!督鹕蕉景浴肥鞘裁??是殺毒軟件,但歸根是對付病毒數據的程序;<FONT
color=#0000ff><A href="http://www.bcbschool.com/v4_softs.htm"
target=_blank>《句神英語2002》</A></FONT>是什么?是英語教育軟件,但歸根是輔助你自學英語口語的程序。Windows或Linux是什么?是操作系統軟件,不過其實它們也是程序:管理所有其它程序的程序。</P>
<P> </P>
<P>下一節,我們講計算機內存,內存也是存儲器,但它是一種特殊的存儲器。</P>
<P> </P>
<H3><A name=3.4>3.4</A> 內存</H3>
<P>有外存嗎?軟盤,光盤這些放在外面的存儲器就是外存啊——真不明白這算是什么知識,但各種考試似乎興趣這些。硬盤有可以放里頭的也有可以放外頭的,不知怎么算。</P>
<P>對內存要弄明白的第一件是事是:為什么要有內存?聽我做一個不負任何責任的預言:10年之內,高速硬盤和高速外部總線的發展,但得計算機可在硬盤上固定劃塊分區作為內存。如此這般,以后關機時不用使用Win2000或XP的休眠功能,更不必像普通關機那樣聽硬盤卡卡響半天,一個關機命下,機器迅速關掉,妙哉。</P>
<P> </P>
<P>程序和數據平常存儲在硬盤等存儲器上,不管你開機或關機了,它們都是存在的,不會丟失。硬盤可以存儲的東西很多,但其傳輸數據的速度較慢。所以需要運行程序或打開數據時,這些數據必須從硬盤等存儲器上先傳到另一種容量小但速度快得多的存儲器,之后才送入CPU進行執行處理。這中間的存儲器就是內存。</P>
<P> </P>
<P>無論何種存儲器,軟盤、硬盤、光盤或者內存,都有地址。因為它們要存儲數據,所以就必須按一定的單位的數據分配一個地址。有了地址,程序才能找到這些數據。這很好理解,想想你們家為什么要有門牌號即可。</P>
<P>學習編程,必須對內存的地址有一個透徹的理解。我們編程中的每一行代碼,代碼中用到的每個數據,都需要在內存上有其映射地址。當然,我們并不需要掌握內存是如何進行編址,那是計算機系中的另外一門課:操作系統的事了。</P>
<P>下面,我將<FONT color=#0000ff><A
href="http://www.bcbschool.com/clasroom.htm"
target=_blank>舊課程中</A></FONT>的有關內存的一段內存拷到這里。</P>
<H4><B><A name=3.4.1>3.4.1</A> 內存地址</H4></B>
<P>“你叫丁小明吧?”</P>
<P>“是的。”</P>
<P>“噢,你記得你的姓名,那么請告訴我你把你的姓名記在你的腦海中的哪一個位置呢?在你記著你的姓名信息的下一個位置,你記著什么?上一個位置呢?”</P>
<P>“啊!這我不知道?!?lt;/P>
<P>“你騙我!既然你記著你的姓名,你怎么會不知道把它記在哪兒呢?”計算機生氣說。</P>
<P>是啊,依靠現在的科技力量,我們無法得知自已把一個數據記在腦海里的哪個腦細胞里。這也是人的記憶狀態無法數據化的原因。計算機就不一樣的,我們說過,它是什么都數字化了。所以它知道自已把一個數據,一條命令記到了內存中的哪個(些)位置。每一個位置都有編號,就像編了門牌號一樣。如果讓計算機在內存里記住“丁小明”這個名字,可以示意為:</P>
<TABLE cellSpacing=1 cellPadding=0 width=568 border=0>
<TBODY>
<TR>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#c0c0c0 colSpan=2><FONT size=3>
<P>丁</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#00ffff colSpan=2><FONT size=3>
<P>小</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#c0c0c0 colSpan=2><FONT size=3>
<P>明</FONT></P></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="17%" bgColor=#c0c0c0>
<P><FONT size=3>1000H</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="17%" bgColor=#c0c0c0>
<P><FONT size=3>1001H</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="17%" bgColor=#00ffff>
<P><FONT size=3>1002H</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="17%" bgColor=#00ffff>
<P><FONT size=3>1003H</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="17%" bgColor=#c0c0c0>
<P><FONT size=3>1004H</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="17%" bgColor=#c0c0c0>
<P><FONT size=3>1005H</FONT></P></TD></TR></TBODY></TABLE>
<P></P>
<P>在第一行中,每一格表示一段內存,而格子里的內容是這段內容記下的數據;第二行中每一格內數字就是對應的內存的地址。至于為什么數字后面跟了一個字母H
,那是為了表示這是一個16進制的數。什么是16進制的數,大家現在可以不管。只要把它想成和上一節我們所講的2進制一樣即可:長有16個指頭的人訂出來的數。從0一直數到15,到了16才往高位進1。</P>
<P>可能有人會啄磨:為什么一個“丁”字(“小”“明”兩字也一樣)占用兩個內存地址呢?這是因為漢字在一個地址(位置)里呆不下,必須放在<B>連續</B>的兩個地址空間內。</P>
<P>那么,什么東西可以放在單獨的一個內存地址里呢?像英文的里字母,比如’A’,
像阿拉伯數字:比如’1’,可以,而且就是放在一個內存地址里。假設有一字符串“ABC”,被記在內存里,可示意為<FONT
face="Times New Roman">(</FONT>這次我們假設從內存地址2000H處記起):</P>
<TABLE height=51 cellSpacing=1 width=568 border=0>
<TBODY>
<TR>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#c0c0c0 height=17>
<P>A</P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#00ffff height=17>
<P>B</P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#c0c0c0 height=17>
<P>C</P></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#c0c0c0 height=26>
<P>2000H</P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#00ffff height=26>
<P>2001H</P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width="33%" bgColor=#c0c0c0 height=26>
<P>2002H</P></TD></TR></TBODY></TABLE>
<P></P>
<P>現在我們提幾個問題:</P>
<P>計算機記住”丁”字的內存地址是多少? 答案是:1000H。請見上圖<FONT
face="Times New Roman"></P></FONT>
<P>在計算機記住”丁”字的內存地址后移兩個最小內存地址單位,計算機記住的是哪個字:答案是:”小”。因為 1000H+2=1002H。</P>
<P>請同學自己對圖1.3作類似的問答。<FONT face="Times New Roman"></P></FONT>
<P>如果不再往下講一點點,可能會使關于內存地址的這一講的有些內容和第1章中有關2進制語言的內容看起有矛盾。</P>
<P>我們一直在說,在計算機中,所有信息都被數字化為2進制的0、1,所以,“丁小明”這個名字被也應該是一串:0001 0010 0111
0101……,可是在中圖所畫出的,計算機內存里記的,仍是“丁小明”三個字啊。</P>
<P> </P>
<P>下面是解釋,我們只舉一個字”丁”講解。我們假設在那一串里的 0001 0010 0111 0101 對應的是 “丁” 字,那么有:</P>
<TABLE height=75 cellSpacing=1 width=698 border=0>
<TBODY>
<TR>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width=596 colSpan=16 height=25><FONT size=3>
<P align=center>丁</FONT></P></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width=43 bgColor=#c0c0c0 height=17>
<P><FONT size=3>0</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width=43 bgColor=#c0c0c0 height=17>
<P><FONT size=3>0</FONT></P></TD>
<TD
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
align=middle width=43 bgColor=#c0c0c0 height=17>
<P><FONT size=3>0</FONT></P></TD>
<TD
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -