CPU八种通用寄存器在一台计算机中大概各有多少个?多个程序一起运行,需要那么多寄存器够么?还是说速度特别快?程序计数器和代码寄存器有什么联系?任何程序在运行过程是否八种通用寄存器都用到?
多个程序没法同时运行,它们在宏观上同时运行,微观上是交替运行的。操作系统在任务切换的时候,会把前一个程序中断时候的寄存器上下文保存到内存,并且恢复下一个要执行的程序的寄存器上下文,再执行。
http://blog.csdn.net/maimang1001/article/details/9206167
另外对于现代x86处理器来说,寄存器其实有100多个,只是在软件的层面上看,它仿佛只有那么几个,这个机制叫做“寄存器重命名”
http://blog.csdn.net/edonlii/article/details/8771023
最后,现代处理器往往具有多个内核,这种情况下,每个内核有一套独立的。
抛开性能不谈,你完全可以写出一个程序,实现任意功能,但是偏偏只使用7个寄存器。
1、数据寄存器4个:EAX、EBX、ECX、EDX。
2、变址寄存器2个:ESI、EDI。
3、指针寄存器2个:ESP(Extended Stack Pointer)、EBP(Extended Base Pointer)。
EBP:基址指针寄存器,保存当前线程的栈底指针,该指针永远指向系统栈最上面一个栈帧的底部。
ESP:堆栈指针寄存器,保存当前线程的栈顶指针,该指针永远指向系统栈最上面一个栈帧的栈顶(即最近一次入栈数据单元的首地址)。
4、段寄存器6个:ES(附加段寄存器Extra Segment Register)、CS(代码段寄存器Code Segment Register)、SS(堆栈段寄存器Stack Segment Register)、DS(数据段寄存器Data Segment Register)、FS(附加段寄存器Extra Segment Register)、GS(附加段寄存器Extra Segment Register) 。
5、指令指针寄存器1个:EIP(Instruction Pointer)。
EIP:指令指针,存放下一个CPU指令存放的内存地址(一般代码是不能直接访问EIP的值),该指针永远指向下一条待执行的指令地址。
6、标志寄存器。1个:EFlags。
有些寄存器是显式访问就是你代码里面可以直接更改的,有些隐式的只有CPU自己的特权指令才能访问到的。
需要保存源程序的上下文环境,即PCB程序控制块和寄存器内容,PCB进入相应的队列,寄存器用PUSH指令保存到堆栈中。这样两个程序之间用到相同的寄存器,上一个程序就不会遭到破坏。
它是用来放下一条指令的地址的,这个基本不用程序猿自己去管,它跟硬件有关,自动增量,中断时自动变动到程序入口
CS(代码段寄存器Code Segment Register)
推荐看看微机原理与接口技术。
随便找本汇编语言翻翻都有的