📄 第03章 计算机原理.htm
字号:
<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>“啊!这我不知道。”</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 + -