2 cg amaz1ng cg_Amaz1ng 于 2016.04.25 18:11 提问

关于寄存器(汇编、操作系统)

CPU八种通用寄存器在一台计算机中大概各有多少个?多个程序一起运行,需要那么多寄存器够么?还是说速度特别快?程序计数器和代码寄存器有什么联系?任何程序在运行过程是否八种通用寄存器都用到?

5个回答

caozhy
caozhy   Ds   Rxr 2016.04.25 23:47
已采纳

多个程序没法同时运行,它们在宏观上同时运行,微观上是交替运行的。操作系统在任务切换的时候,会把前一个程序中断时候的寄存器上下文保存到内存,并且恢复下一个要执行的程序的寄存器上下文,再执行。
http://blog.csdn.net/maimang1001/article/details/9206167
另外对于现代x86处理器来说,寄存器其实有100多个,只是在软件的层面上看,它仿佛只有那么几个,这个机制叫做“寄存器重命名”
http://blog.csdn.net/edonlii/article/details/8771023
最后,现代处理器往往具有多个内核,这种情况下,每个内核有一套独立的。
抛开性能不谈,你完全可以写出一个程序,实现任意功能,但是偏偏只使用7个寄存器。

CSDNXIAON
CSDNXIAON   2016.04.26 08:22

汇编中的寄存器
汇编寄存器
汇编寄存器知识
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

yishichangan1
yishichangan1   2016.04.26 15:10

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指令保存到堆栈中。这样两个程序之间用到相同的寄存器,上一个程序就不会遭到破坏。

程序计数器PC

它是用来放下一条指令的地址的,这个基本不用程序猿自己去管,它跟硬件有关,自动增量,中断时自动变动到程序入口

还有代码寄存器是什么?是代码段寄存器吗?

CS(代码段寄存器Code Segment Register)

bi_jian
bi_jian   2016.05.01 13:31

推荐看看微机原理与接口技术。

bobbylee0810
bobbylee0810   2016.05.05 19:29

随便找本汇编语言翻翻都有的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!