之前一直在将计算机的一些分类和简史,现在开始具体的关于计算机组成的内容,先聊一聊CPU吧。
关于CPU干什么是什么之类的废话就不多说了,直接进入CPU的组成。
CPU由相对独立的几个部分组成。控制器负责从主存储器中取指令和确定指令类型;算术逻辑部件(ALU)通过完成诸如加法、逻辑或与非等运算来执行指令。同时CPU内部也有一些小容量高速度的存储器,它们用于存放中间结果和一些控制信息,它们由寄存器组成,一般每个计算器的容量都相等,可以存放一个不超过其存储范围的数。
需要提到的一个寄存器是程序计数器(Program Counter),之所以提到它,不仅是因为它的重要性,而且是由于它经常被人误解,实际上它并没有任何计数的功能,它的作用是指向下一条要被执行的指令。另外,指令寄存器(Insturction Register)也十分重要。
下面来说说指令执行的过程:
ALU对输入数据进行简单的计算,然后把结果送入到输出寄存器,经输出寄存器存回到某个寄存器中,当然也可以从寄存器写入到内存中。一般的指令有两种类型:寄存器-内存指令和寄存器-寄存器指令,很好理解的。另外,ALU将两个操作数进行计算并将结果存回的过程称之为数据通路周期,是大多数CPU的核心,从某种意义上,它决定了计算机的性能。
然后具体说下指令执行的步骤:
1)从内存中取下一条指令到指令寄存器中--->2)将程序计数器指向后面的一条指令--->3)判断刚刚取到的指令的类型--->4)如果该指令用到了某个内存单元,则对该内存单元进行寻址--->5)必要的时候,从内存中取一个字到CPU的寄存器中--->6)执行指令--->7)返回第1步准备执行下一条指令
也许用代码来表示会更清晰一些:
public class Interp
{
private static int PC;//Program Counter 程序计数器
private static int AC;//Arithmetic Counter 累加器
private static int instr;//存放当前指令的寄存器
private static int instrType;//指令的类型
private static int dataLoc;//数据地址,若没有则为-1
private static int data;//存放当前数据数
private static bool runBit = true;//运行指示位,需停机时将其关闭
public static void Interpret(int[] memory, int startAddress)
{
PC = startAddress;
while (runBit)
{
instr = memory[PC];
PC++;
instrType = GetInstrType(instr);
dataLoc = FindData(instr, instrType);
if (dataLoc>=0)
{
data = memory[dataLoc];
}
Execute(instrType, data);
}
}
private static int GetInstrType(int instr) { ... } //得到指令的类型
private static int FindData(int instr, int instrType) { ... }//获得数据的地址,若没有则返回-1
private static void Execute(int instrType, int data) {... }//执行指令
}
2008年10月15日星期三
订阅:
博文评论 (Atom)

没有评论:
发表评论