精华内容
下载资源
问答
  • CPU寄存器

    2016-06-09 16:22:56
    CPU寄存器主要的有 CS:IP这是代码段,主要是执行代码的; SS:SP这栈段,很多时候数据都要用它, ds,这是一个数据段, 还有一个标志寄存器flag,中断的时候要保存它的信息,以便中断结束提取原来信息 至于寄存器的...

    CPU寄存器主要的有

    CS:IP这是代码段,主要是执行代码的;

    SS:SP这是栈段,很多时候数据都要用它,

    ds:si,这是一个数据段,

    还有一个标志寄存器flag,中断的时候要保存它的信息,以便中断结束提取原来信息


    至于寄存器的寻址方式,这个见图啊


    搞得这么复杂,我相信一定有它的原因,但是 很不爽,这 不都一个样吗。。。。。。。

    展开全文
  • cpu寄存器

    2019-03-27 16:59:51
    8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。 通用寄存器 通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址...

    8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。

    通用寄存器

    通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个)。顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。
    数据寄存器分为:
    AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。
    BH&BL=BX(base):基址寄存器,常用于地址索引
    CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
    DH&DL=DX(data):数据寄存器,常用于数据传递。
    他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。
    另一组是指针寄存器和变址寄存器,包括:
    SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置
    BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置
    SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针
    DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。
    这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。

    折叠指令指针IP

    指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加(取出该字节的长度,如:BIU从内存中取出的是1个字节,IP就会自动加1,如果BIU从内存中取出的字节数长度为3,IP就自动加3),指向下一个指令字节。注意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。

    标志寄存器

    8086有一个16位的标志性寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。标志寄存器(Flags Register,FR)又称程序状态字(Program Status Word,PSW)。这是一个存放条件标志、控制标志寄存器,主要用于反映处理器的状态和运算结果的某些特征及控制指令的执行。

    标志寄存器位置图:

    在这里插入图片描述
    OF:溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

    DF:方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

    IF:中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:

    (1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求

    (2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

    TF:跟踪标志TF。该标志可用于程序调试。TF标志没有专门的指令来设置或清除。

    (1)如果TF=1,则CPU处于单步执行指令的工作方式,此时每执行完一条指令,就显示CPU内各个寄存器的当前值及CPU将要执行的下一条指令。

    (2)如果TF=0,则处于连续工作模式。

    SF:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为非负数时,SF的值为0,否则其值为1。当运算结果没有产生溢出时,运算结果等于逻辑结果(即应该得到的正确的结果),此时SF表示的是逻辑结果的正负,当运算结果产生溢出时,运算结果不等于逻辑结果,此时的SF值所表示的正负情况与逻辑结果相反,即:SF=0时,逻辑结果为负,SF=1时,逻辑结果为非负。

    ZF:零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

    AF:( Assistant Carry Flag)下列情况下,辅助进位标志AF的值被置为1,否则其值为0:

    (1)、在字操作时,发生低字节向高字节进位或借位时

    (2)、在字节操作时,发生低4位向高4位进位或借位时。

    PF:奇偶标志PF用于反映运算结果中"1"的个数的奇偶性。如果"1"的个数为偶数,则PF的值为1,否则其值为0。

    CF:进位标志CF主要用来反映无符号数运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

    段寄存器

    为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器
    DS(Data Segment):数据段寄存器

    SS(Stack Segment):堆栈段寄存器

    ES(Extra Segment):附加段寄存器。
    当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存作为战场,用寄存器做为军事基地,以加速工作。

    备注:由于所讲的是16位cpu(IP寄存器的位数为16,即:偏移地址为16位)2的16次幂就是64K,所以16位段地址不能超过64K,超过64K会造成64K以上的地址找不到。

    展开全文
  • linux读写cpu寄存器 linux寄存器读写 linux操作cpu寄存器实例 linux应用层读写寄存器代码 QString Mcu::get_cpu_serial_number() { QString serialNo; int fd = ::open("/dev/mem", O_RDWR | O_NDELAY); ...
    • linux读写cpu寄存器
    • linux寄存器读写
    • linux操作cpu寄存器实例
    • linux应用层读写寄存器代码
    •     QString Mcu::get_cpu_serial_number()
          {
              QString serialNo;
              int fd = ::open("/dev/mem", O_RDWR | O_NDELAY);
              unsigned char *base = NULL;
      
              if ( fd < 0) {
               perror ("/dev/mem");
               return serialNo;
              }
      
              base = (unsigned char *)
                      ::mmap (NULL,  2*1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x021bc000);红色的是cpu datasheeet的实际寄存器地址,base返回的是虚拟地址地址
      
              if (base == MAP_FAILED) {
                  ::close(fd);
                  return serialNo;
              }
      
              serialNo.sprintf("%08lx-%08lx-%08lx-%08lx-%08lx-%08lx--%08lx",
                               *(volatile long *)(base+0x410),
                               *(volatile long *)(base+0x420),
                               *(volatile long *)(base+0x430),
                               *(volatile long *)(base+0x440),
                               *(volatile long *)(base+0x450),
                               *(volatile long *)(base+0x460),
                               *(volatile long *)(base+0x470)
                               );
              ::munmap(base, 2*1024);
              qDebug() << "CPID:" << serialNo << endl;
              ::close(fd);
              return serialNo;
          }
      
    展开全文
  • CPU寄存器

    2010-06-23 16:56:00
    寄存器CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。 由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。 寄存器一般...

    寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。
    由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。
    寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

    另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。
    有关“寄存器的分配策略”在《编译原理》中会有详细的介绍。
    1、 16位寄存器组

    16位CPU所含有的寄存器有(见图2.1中16位寄存器部分):

    4个数据寄存器(AX、BX、CX和DX)
    2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP)
    4个段寄存器(ES、CS、SS和DS)
    1个指令指针寄存器(IP) 1个标志寄存器(Flags)

    2、 32位寄存器组

    32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS和GS。

    32位CPU所含有的寄存器有(见图2.1中的寄存器):

    4个数据寄存器(EAX、EBX、ECX和EDX)
    2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
    6个段寄存器(ES、CS、SS、DS、FS和GS)
    1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)


     

     

    1.一般寄存器:AX、BX、CX、DX

      AX:累加寄存器,BX:基址寄存器,CX:計數寄存器,DX:数据寄存器

      ax,bx,cx,dx各為16位即2bytes空間的寄存器,其中ax又可化分為ah與al,而bx可化分為bh與bl,cx及dx亦同,而ah與al空間即為8位1byte的空間,舉例,如果ax=3478h,那麼ah=34h、al=78h

      其中bx又可用來間接寻址的寄存器使用,舉例,假如 ds=2300h,bx=0200h,那麼執行 mov ax,[bx] 指令後就會把 2300:0200 存储器的数据取出2byes並存入 ax,就是這樣懂了嗎?

     2.索引寄存器:SI、DI

      SI:來源索引寄存器,DI:目的索引寄存器

      16位寄存器,功能同 bx 可間接寻址,但不能化分成兩個 8 位

                                                                                

     

    3.堆栈、基址寄存器:SP、BP

      SP:堆栈指標寄存器,BP:基底指標寄存器

      SP是堆栈指標,當使用 push 指令時,sp會加2,而執行pop時sp會減2

            BP是可間接寻址的寄存器,不過通常用於堆栈段,如 mov ax,ss:[bp]

                                   

    4.指位/指標寄存器(指位器):IP

      程序在執行時,它用來記錄現在程序執行到哪裡,當遇到 jmp、call、int等等的跳转指令時,它的內容也會隨著欲跳转前往的地址而改變

       


    以上EIP為32位寄存器,IP為16位   

     

    5.段寄存器:CS、DS、ES、SS、FS、GS

      代码段 CS:如 IP 所執行地址都是CS代码段的內容

            数据段 DS:如 mov ax,[bx] 間接寻址法所指都是数据段的数据

      附加段 ES:如 mov ax,es:[di] 利用間接寻址法取其他區段存储器数据時

            堆栈段 SS:如 SP 堆栈数据,都是指在堆栈段的

      附加段 FS:新增區段寄存器

      附加段 GS:新增區段寄存器

     

    AF:輔助進位标志

    CF:進位标志

    OF:溢位标志

    SF:符號(負號)标志

    PF:奇偶标志

    ZF:零值标志

    DF:方向标志

    IF:中斷标志

    TF:單步标志

                                  

     

    7.386以上電腦新增擴充之寄存器

      EAX、ECX、EDX、EBX:為ax,bx,cx,dx的扩展,各為32位

      ESI、EDI、ESP、EBP:為si,di,sp,bp的扩展,32位

      EFLAG、EIP:為FLAG與IP之扩展,32位

      FS、GS:新增的段寄存器

     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/syf442/archive/2009/08/25/4483186.aspx

    展开全文
  • CPU寄存器详解 转载

    2020-02-12 14:14:55
    CPU寄存器 CPU寄存器用作用于快速访问数据的小型存储区。在x86(32位)架构中,有8个通用寄存器:EAX,EBX,ECX,EDX,EDI,ESI,EBP和ESP。尽管它们最初是为执行特定任务而设计的,但从技术上讲,它们可以用于存储...
  • 轻松控制MMIO和CPU寄存器。 | | 此板条箱提供了各种宏,可以为块和CPU寄存器生成不错的API。 它主要是为了代替箱,以提供更好的API并使工作更轻松。 用法 有关更多更新和更大的示例,请查看。 定义CPU寄存器 CPU...
  • 8086 CPU 寄存器简介

    2016-07-15 22:51:06
    8086 CPU 寄存器简介 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识, 自然,还是得从最基础的开始,那就从汇编语言开刀吧, 从汇编语言开刀的话,我们必须还先要了解一些...
  • X86CPU寄存器分析

    千次阅读 2017-05-19 09:41:13
    本文讲述X86计算机的寄存器构造,包括EIP(程序指令指针寄存器,与16位单片机的PC程序计数器类似),以及EAX(累加寄存器),EBX(基地址寄存器),ECX(计数...一、32位CPU寄存器    可以看出,他的低16位作
  • 8086/8088 CPU寄存器

    千次阅读 2016-11-17 12:05:07
     这一节先从8086/8088 CPU寄存器组开始说起。  说到8086/8088 CPU寄存器组,它们的特点就是都是16位的,不论是通用寄存器、段寄存器还是标志寄存器。  8086/8088包括四个16位数据寄存器,两个16位指针寄存器,...
  • 80X86CPU寄存器

    2015-04-27 21:49:04
    80X86CPU寄存器表  数据段、代码段、堆栈段、内存、堆、堆栈、CPU寄存器  2009-08-04 22:59:17| 分类:汇编 | 标签:数据段、代码段、堆栈段、内存、堆、堆栈、cpu寄存器 |字号 订阅 ...
  • Intel X86 CPU寄存器学习笔记

    千次阅读 2016-02-16 20:35:11
    本文对Intel CPU寄存器做一些浅显的介绍。Intel处理器寄存器在很多教科书上有,网络也有很多文章涉及到。因此本文在这些基础上做一些归纳总结,另外也参考了Intel IA32架构软件开发手册。
  • MSP430单片机各种寄存器总结(1)——CPU 寄存器

    千次阅读 多人点赞 2018-12-22 12:46:48
    作者:BerenCamlost 本文针对于南京理工大学的王宏波老师的MSP430...第一章 CPU 寄存器 1.1 PC——程序计数器 取完指令后CPU根据该指令的字节数自动增量PC,因此20位的PC(R0)的值总是指向下一条要执行的指令...
  • CPU寄存器详解

    千次阅读 2018-10-23 20:06:36
    在学习汇编和操作系统的过程中,总是要与许多的寄存器打交道,因此写下这篇文章,总结一下CPU寄存器的基本知识。 1.CS:IP寄存器 CS为代码段寄存器,IP为段偏移寄存器,CS:IP指示了CPU当前要读取的指令的地址。在...
  • 8080CPU寄存器划分

    2021-01-14 12:07:32
    8080CPU共有14个寄存器: 通用寄存器: AX、BX、CX、DX 变址寄存器: SI 、DI 指针寄存器: SP、BP 指令指针寄存器: IP 段寄存器: CS、SS、DS、ES 标志寄存器: PSW 补充:BX通用寄存器,在计算存储器地址时,...
  • CPU寄存器英文名字

    2021-04-26 16:54:55
    8086CPU有14个寄存器,我弄了一个虚拟机在里面运行了debug.exe,结果我的芯片9代i7也是14个寄存器,不知道是不是我的操作引发的问题,几十年寄存器数量没有变,这似乎说不通。 通用寄存器 ax,bx,cx,dx共4个 a,b,c,d...
  • 西门子S7-300CPU寄存器状态字的用法,供大家参考
  • 8086 CPU 寄存器简介 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识, 自然,还是得从最基础的开始,那就从汇编语言开刀吧, 从汇编语言开刀的话,我们必须还先要了解一些其他...
  • cpu寄存器和缓存

    千次阅读 2019-06-11 16:42:58
    所以,寄存器是最贴近CPU的,而且CPU只与寄存器中进行存取。 (寄存的意思是,暂时存放数据,不中每次从内存中取,它就是一个临时放数据的空间,火车站寄存处就是这个意思) 而寄存器的数据又来源于内存。于是 CPU&...
  • 关于CPU寄存器的简单介绍 最近浅显的学习了下这方面的知识,所以目前也想去总结一下 CPU除了控制器、运算器等器件还有一个重要的部件就是寄存器。其中寄存器的作用就是进行数据的临时存储。 CPU的运算速度是...
  • 寄存器CPU内部用来存放数据的一些小型存储区域,主要用来暂时存放参与运算的数据运算结果以及一些CPU运行需要的信息。 x86架构CPU的指指令集是复杂指令集(CISC),提供了丰富的指令来实现强大的功能,与此同时也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,564
精华内容 8,225
关键字:

cpu寄存器