寄存器

寄存器:

 


寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。

 

 

 

 

 

寄存器分类


1. 程序计数器PC (Program Counter)

2.地址寄存器AR

3.缓冲寄存器DR

4.指令寄存器IR

5.微地址寄存器μAR

6. 微指令寄存器μIR

7.状态指令寄存器SR(status pointer)

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()

{

       //PCIP)的值赋给地址寄存器

       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 的微程序指令

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值