计算机工作原理
计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行时,CPU根据当前程序指针寄存器的内容取出并执行指令,然后再取出下一条指令并执行,如此循环直到程序结束时才停止执行。其工作过程就是不断地取指令和执行指令的过程,最后将计算的结果放入指令指定的存储器地址中。
指令是指计算机完成某个基本操作的命令。指令能被计算机硬件理解并执行。一条计算机指令是用一串二进制代码表示的,它通常包括两方面的信息:操作码和操作数(地址码)
操作码指明指令所要完成操作的性质和功能,即指出进行什么操作。操作码也是二进制代码。指令中操作码的二进制位数决定了该种计算机最多能具有的指令条数。
操作数指明操作码执行时的操作对象,操作数可以是数据本身,也可以是存放数据的内存单元地址或寄存器名称。根据指令中操作数的性质,操作数又可以分为源操作数和目的操作数两类。例如,减法指令中减数和被减数为源操作数,它们的差为目的操作数。
如果指令中的操作码和操作数共占n个字节,则称该指令为n字节指令。
计算机指令的寻址方式是指找到当前正在执行指令的数据地址以及下一条将要执行指令的地址的方法。
寻找方式被分为两大类:找到下一条将要执行指令的地址,称为指令寻址;我到当前正在执行指令的数据地址,称为数据寻址。
指令寻址分为顺序寻址和跳跃寻址两种。常见的数据寻址有立即寻址、直接寻址、隐含寻址、间接寻址、寄存器寻址、寄存器间接寻址、基址寻址、变址寻址、相对寻址和堆栈寻址。
一台计算机所能执行的全部指令的集合,称为该计算机的指令系统。不同类型的计算机其指令系统的指令数目与格式也不同。但无论哪种类型的计算机,指令系统都应该具有以下功能指令。
数据传送类指令:用来实现数据在内存和CPU之间的传递。
运算类指令:用来进行数据的运算。
程序控制类指令:用来控制程序中指令的执行顺序。
输入/输出指令:用来实现外部设备与主机之间的数据传输。
处理机控制和调试指令:可实现计算机的硬件管理等。
指令的执行过程可分为取指令、分析指令和执行指令三个步骤。
一般把计算机完成一条指令所花费的时间称为一个指令周期。指令周期越短,指令执行就越快。
计算机中的数据
计算机内部均使用二进制数表达各种信息,但计算机在与外部沟通中会采用人们比较熟悉和方便阅读的形式,如十进制数据。其间的转换,主要由计算机系统的硬件和软件来实现。
二进制只有“0”和”1"两个数,相对于十进制而言,二进制表示不但运算简单、易于物理实现、通用性强,而且所占的空间和所消耗的能量小得多,机器的可靠性较高。
位(bit)是计算机中数据的最小单位,代码只有0和1,采用多个数码表示一个数,其中每一个数码称为1位。
字节(Byte)是存储容量的基本单位,一个字节由8位二进制位组成。在计算机内部一个字节可以表示一个数据,也可以表示一个英文的字母或其他特殊字符,两个字节可以表示一个汉字。为了便于衡量存储器的大小,统一以字节(Byte,B)为单位。下表所示为常用的存储单位。
单位 名称 换算
千字节
1KB=1024B=2?⁰ B
MB 兆字节 1MB=1024KB=2?⁰ B
吉字节
1GB=1024MB=2?⁰ B
TB 太字节
1TB=1024GB=2⁴⁰ B
随着电子技术的发展,计算机的并行能力越来越强,人们通常将计算机一次能够并行处理的二进制数称为字长,也称为计算机的一个“字”。字长是计算机的一个重要指标,直接反映一台计算机的计算能力和精度,字长越长,计算机的数据处理速度越快。计算机的字长通常是字节的整倍数,如8位、16位、32位,发展到今天,微型机已达到64位,大型机已达到128位。
数的表示规则称为数制。任何一个数制都包含两个基本要素:基数和位权。如果R表示任意整数,进位计数制为“逢R进一”。常用的数制包括二进制、八进制、十进制、十六进制,分别可用B(Binary)、O(Octal)、D(Decimal)、H(Hexadecimal)表示。
基数:数制所使用数码的个数。例如,二进制的基数为2;十进制的基数为10。
位权:数制中每一固定位置对应的单位值(权重)。例如,十进制的123,1的位权是100,2的位权是10,3的位权是1。二进制中的1011左边开始第一个1的位权是8,0的位权是4,第二个1的位权是2,第三个1的位权是1。
数码:数制中固定的表示基本数值大小的不同数字符号。
不同数制对应的数码
二进制:0,1
八进制:0,1,2,3,4,5,6,7
十进制:0,1,2,3,4,5,6,7,8,9
十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
十六进制除了数码0~9之外,还使用了6个英文字母A、B、C、D、E、F,相当于十进制的10、11、12、13、14、15。
进制之间可以相互转换。
R进制转换为十进制的方法是“按权展开”。
十进制转换为R进制可用“除R取余”、“乘R取整”的方式来实现转换。将数分成整数与小数两部分分别转换,然后拼接起来即可。
例如,
十进制整数转换成二进制整数的方法是“除2取余法”,具体步骤如下。
步骤1:把十进制数除以2得一个商和余数,商再除以2又得一个商和余数……依次除下去直到商是零为止。
步骤2:以最先除得的余数为最低位(即最右边),最后除得的余数为最高位(即最左边),从最高位(左)到最低位(右)依次排列。
十进制小数转换成二进制小数采用“乘2取整法”,具体步骤如下。
步骤1:把小数部分乘以2得一个新数,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分再乘以2,一直取到小数部分为零为止。
步骤2:以最先乘得的乘积整数部分为最高位,最后来得的乘积整数部分为最低位,从高位向低位逐次排列。
以十进制数6.25为详例,根据以上步骤可化为
整数部分 小数部分
除式及商
余数
乘式及积 整数
6/2=3 0
0.25*2=0.5
0
3/2=1
1
0.5*2=1.0 1
1/2=0
1
拼接可得二进制数110.01
二进制数转换为八进制数,以小数点为界,整数向左,小数向右,3位一节,不足位补0,将每节二进制数依次转换成八进制数并连接起来即可。
同理,二进制数转换为十六进制数,只要分为4位一节分别转换并连接即可。
将八进制数或十六进制数转换成二进制数时,可按上述方法的逆过程进行。
另,八进制和十六进制之间的转换可以通过十进制或者二进制进行间接转换。