cg_Amaz1ng 2016-04-25 10:11 采纳率: 60%
浏览 2399
已采纳

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

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

  • 写回答

4条回答 默认 最新

  • threenewbee 2016-04-25 15:47
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 一块西瓜 2016-04-26 07: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)

    评论
  • 毕健 2016-05-01 05:31
    关注

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

    评论
  • wtveyes 2016-05-05 11:29
    关注

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

    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 关于#abap#的问题,请各位专家解答!
  • ¥20 内网通过公网访问外网问题
  • ¥15 怎么使请求通过cors
  • ¥15 WDM 驱动ACPI 相关疑问
  • ¥15 prism 跨窗体共享数据绑定 wpf
  • ¥15 hdl designer突然用不了系统的moduleware组件,请问有人遇到或者怎么解决吗?
  • ¥15 0基础计算机毕设,应该从哪开始?
  • ¥60 使用DKT40脑图划分ROI区域
  • ¥15 有偿解决C51单片机液晶屏12864显示问题
  • ¥15 IDEA构建失败?怎么搞