寄存器:
寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。
寄存器分类
1. 程序计数器PC (Program Counter) |
2.地址寄存器AR |
3.缓冲寄存器DR |
4.指令寄存器IR |
5.微地址寄存器μAR |
6. 微指令寄存器μIR |
8.通用寄存器(General purpose-registers)
9.堆栈指针寄存器(stack pointer)
CPU原理示意性程序
注:下文称CPU原理示意性程序为:CPU_CODE
代码及说明如下:
//全局变量的定义—对应着CPU固有的各种寄存器
//控制寄存器
int IP; //程序计数器
int AR; //地址寄存器
int DR; //数据缓冲寄存器
int PSW; //状态字寄存器
//段寄存器
int CS; //代码
int DS; //数据段
int ES; //附加段
int SS; //堆栈段
//指针及变址寄存器
int SP;
int BP;
int DI;
int SI;
//数据寄存器
int AX;
int BX;
int CX;
int DX;
int interrupt;//是否有中断的标志 0-无,1-有虽然CPU没有寄存器与之对应,但是它的功能在CPU中是通过硬件电路来实现的。
//主入口函数:CPU加电时,从这里开始运行
int main()
{
//全局变量的初始化,对应着硬件完成的关键寄存器的默认值
//IP=0:CS=FFF0H确定了CPU执行的第一条机器指令的物理地址,
//您是否记得,这就是BIOS ROM的入口地址,这样就可以解释
//计算机就开始执行BIOS程序的原因了。
IP=0;
CS=FFF0H;
//while循环是CPU运行状态的表现,同时也代表着操作控制器的运行逻辑。
//这个循环也是CPU运行的原动力。
while(1)
{
//取指令
getCommand();
//执行指令
execCommand();
//中断处理过程
intProcess();
}
}
//该函数主要是CPU的取指令操作的代码表示:
//CPU先将IP:CS传给AR,然后IP+1,通过AR获得指令,将指令送至指令寄存器,结束取指令的任务。
void getCommand()
{
//PC(IP)的值赋给地址寄存器
AR=IP;
//PC+1,指向下一条将要执行的指令的偏移地址
IP=IP+1;
//地址寄存器+CS段存器-->指令的物理地址
CS:IP->物理地址;
//传送指令到指令寄存器
}
//在取指令任务结束后,指令寄存器内存放着从内存中取来的等待执行的指令。
//该执行指令函数:首先将按照约定的规则通过之列的某些特殊字段,把指令转化为微程序的入口地址,然后跳转到这个微程序的函数体去执行,具体的微操作。
void execCommand()
{
//读取指令寄存器的内容,进行指令译码,根据不同的译码执行不同的微操作
switch(ConvertCode(IR))
{
case 0:
add();
break;
case 1:
sub();
break;
case 2:
mov();
break;
case 3:
in();
break;
case 4:
out();
break;
case 5:
push();
break;
case 6:
pop();
break;
default:
break;
}
}
//中断的处理过程
void intProcess()
{
if(interrupt==1)
{
//获得中断向量号
//保护中断现场,目的是可以从中断处理程序返回后继续执行
//根据中断向量号,算出中断处理程序的地址,赋值给程序计数器IP
}
}
int ConvertCode()
{
//根据特定的规则获得相应指令对应的微程序的入口地址
}
void add()
{
//加法的微程序指令
}
void sub()
{
//减法的微程序指令
}
void mov()
{
//mov微程序指令
}
void in()
{
//IN 的微程序指令
}
void out()
{
//OUT 的微程序指令
}