精华内容
下载资源
问答
  • 内存和寄存器就是为了解决存储器读写速度慢而产生多级存储机制,从20世纪50年代开始,磁芯存储器曾一度成为主存主要存储介质,但从20世纪70年代开始,逐步被半导体存储器所取代,目前计算机都是用半导体存储器...

    1、存储器在CPU外,baidu一般指硬盘,U盘等可以在切断电源后保存资料的设备,zhi容量一般dao比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右。

    内存和寄存器就是为了解决存储器读写速度慢而产生的多级存储机制,从20世纪50年代开始,磁芯存储器曾一度成为主存的主要存储介质,但从20世纪70年代开始,逐步被半导体存储器所取代,目前的计算机都是用半导体存储器。现在的DDR2内存的读写速度一般为6~8GB/S,跟机器性能也有关系。
    2、寄存器(又称缓存)一般是指由基本的RS触发器结构衍生出来的D触发,就是一些与非门构成的结构,一般整合在CPU内,其读写速度跟CPU的运行速度基本匹配,但因为性能优越,所以造价昂贵,一般好的CPU也就只有几MB的2级缓存,1级缓存更小。使用寄存器可以缩短至零长度、节省存储空间,提高指令的执行速度。

    3、不同的寄存器有不同的作用,如:通用寄存器(GR)用以存放操作数、操作数的地址或中间结果;指令寄存器(IR)用以存放当前正在执行的指令,以便在指令执行的过程中,控制完成一条指令的全部功能。
    CPU计算时,先预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。最理想的情况就是CPU所有的数据都能从寄存器里读到,这样读写速度就快,如果寄存器里没有要用的数据,就要从内存甚至硬盘里面读,那样读写数据占的时间就比CPU运算的时间还多的多。

    所以评价一款CPU的性能除了频率,缓存也是很重要的指标。

    CPU的组成:

    CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来。

    1、控制单元

    控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)等,对协调整个电脑有序工作极为重要。

    它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。

    操作控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。

    2、运算单元

    是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。

    3、存储单元

    包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。

    采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。

    但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。

    而通用寄存器用途广泛并可由程序员规定其用途,通用寄存器的数目因微处理器而异。这个是我们以后要介绍这个重点,这里先提一下。

     

    展开全文
  • 寄存器和存储器的区别 从根本上讲,寄存器与RAM的物理结构不一样。 一般寄存器是指由基本的RS触发器结构衍生出来的D触发, 就是一些与非门构成的结构,这个在数电里面大家都看过; 而RAM则有自己的工艺...

    寄存器和存储器的区别

     
    从根本上讲,寄存器与RAM的物理结构不一样。 
    一般寄存器是指由基本的RS触发器结构衍生出来的D触发,
    就是一些与非门构成的结构,这个在数电里面大家都看过;
    而RAM则有自己的工艺,一般1Bit由六MOS管构成。所以,
    这两者的物理结构不一样也导致了两者的性能不同。寄存器
    访问速度快,但是所占面积大。而RAM相反,所占面积小,
    功率低,可以做成大容量存储器,但访问速度相对慢一点。

    1、
    寄存器存在于CPU中,速度很快,数目有限;
    存储器就是内存,速度稍慢,但数量很大;
    计算机做运算时,必须将数据读入寄存器才能运算。

    2、
    存储器包括寄存器,
    存储器有ROM和RAM
    寄存器只是用来暂时存储,是临时分配出来的,断电,后,里面的内容就没了`````

    转载于:https://www.cnblogs.com/Chenshuai7/p/5278033.html

    展开全文
  • 8088/8086含4个16位数据寄存器,又可分为8个8位寄存器,即:数据寄存器特有习惯用法:AX:累加器,所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中;BX:基址寄存器,在间接寻址中用于存放基地址;...
    eb880e980111e56733aea8f7ef2ddcec.png

    内部寄存器类型

    含14个16位寄存器,按功能可分为3类:

    8个通用寄存器;4个段寄存器;2个控制寄存器。

    1 通用寄存器

    ①数据寄存器(AX,BX,CX,DX);

    8088/8086含4个16位数据寄存器,又可分为8个8位寄存器,即:

    0c9252322ec4c31159bb6d767a294bd0.png

    数据寄存器特有的习惯用法:

    AX:累加器,所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中;

    BX:基址寄存器,在间接寻址中用于存放基地址;

    CX:计数寄存器,用于在循环或串操作指令中存放计数值;

    DX:数据寄存器,在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。

    ②地址寄存器(SP,BP);

    SP:堆栈指针寄存器,其内容为栈顶的偏移地址;

    BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。

    备注:BX与BP在应用上的区别,作为通用寄存器,二者均可用于存放数据;作为基址寄存器用BX表示所寻找的数据在数据段;用BP则表示数据在堆栈段。

    ③变址寄存器(SI,DI)。

    SI:原变址寄存器

    DI:目标变址寄存器

    变址寄存器在指令中常用于存放数据在内存中的地址。

    2 控制寄存器

    c2e37762fc0d5c0c9a3de7fdec6fe927.png

    ①状态标志位

    CF(carry flag):进位标志位,加减法运算时,最高位有进/借位则CF=1

    PF(parity flag):奇偶标志位,运算结果的低8位中“1”的个数为偶数时,PF=1

    AF(auxiliary carry flag):辅助进位标志位,加减操作中,若bit3向bit4有进借位,则AF=1

    ZF(zero flag):零标志位,当运算结果为零时,ZF=1

    SF(sign flag):符号标志位,当运算结果最高位为1时,SF=1

    OF(overflow flag):溢出标志位,当算术运算结果超出了有符号数的可表达范围时,OF=1.

    状态标志位 例题:

    e8b7ab564b8151feece2a34f03500755.png

    ②控制标志位

    TF(trap flag):陷阱标志位,也叫跟踪标志位,TF=1时,使CPU处于单步执行指令的工作方式

    IF(interrupt flag):中断允许标志位,IF=1使CPU可以响应可屏蔽中断请求。

    DF(direction flag):方向标志位,在数据串操作时确定操作的方向。

    3 段寄存器

    CS:代码段寄存器,存放代码段的段基地址。

    DS:数据段寄存器,存放数据段的段基地址。

    ES:附加段寄存器,存放附加段的段基地址。

    SS:堆栈段寄存器,存放堆栈段的段基地址。

    段寄存器的值表明响应逻辑段在内存中的位置。

    后接--存储器寻址

    展开全文
  • 前言在linux日常过开发调试中,总避免不了CPU寄存器、堆栈打交道,尤其是在分析程序core dump文件时,需要对CPU寄存器过程调用约定有深入理解。本文主要介绍x86x86_64平台通用寄存器,以及他们在过程调用中...

    前言

    在linux日常过开发调试中,总避免不了和CPU寄存器、堆栈打交道,尤其是在分析程序core dump文件时,需要对CPU寄存器过程调用约定有深入的理解。本文主要介绍x86和x86_64平台的通用寄存器,以及他们在过程调用中的约定。

    先明确一点,本文将要讨论的是通用寄存器(后简称寄存器)。后面介绍寄存器使用规则或者惯例,只是GCC(G++)遵守的规则,为后面《linux栈回溯》系列文章奠定基础。本文大量参考引用了网络博客文章,文末标注了参考来源,在此感谢博主的无私共享。

    x86平台过程调用约定

    IA32有8个32位的通用寄存器,这8个通用寄存器都是由8086相应16位通用寄存器扩展成32位而得:

    EAX:一般用作累加器
    EBX:一般用作基址寄存器(Base
    ECX:一般用来计数(Count
    EDX:一般用来存放数据(Data
    ESP:一般用作堆栈指针(Stack Pointer
    EBP:一般用作基址指针(Base Pointer
    ESI:一般用作源变址(Source Index
    EDI:一般用作目标变址(Destinatin Index

    作为通用寄存器,过程调用中,调用者栈帧需要寄存器暂存数据,被调用者栈帧也需要寄存器暂存数据。为防止调用过程中数据不会被破坏丢失,C/C++编译器遵守如下约定的规则:

    fc95992f7ebab9082d2537dd392f3ace.png
    图一
    【1】当该函数是处于调用者角色时,如果该函数执行过程中产生的临时数据会已存储在%eax,%edx,%ecx这些寄存器中,那么在其执行call指令之前会将这些寄存器的数据写入其栈帧内指定的内存区域,这个过程叫做调用者保存约定(英文原名称:Caller Save)
    【2】当该函数是处于被调用者角色时,那么在其使用这些寄存器%ebx,%esp,%edi之前,那么该函数会保存这些寄存器中的信息到其栈帧指定的内存区域,这个过程叫被调用者保存约定【3】%eax总会被用作返回整数值。【4】%esp,%ebp总被分别用着指向当前栈帧的顶部底部,主要用于在当前函数推出时,将他们还原为原始值。往往会在栈帧开始处保存上一个栈帧的ebp,而esp是全栈的栈顶指针,一直指向栈的顶部。引自:第5篇-戏说程序栈-寄存器和函数状态

    x86_64平台寄存器使用约定

    x86_64架构有16个通用寄存器,相比IA32多了8个(r8 至 r15时x86_64新增的)。

    8ae2c23047fa2bb01c811a6ca55ee89a.png
    图二

    寄存器集成在CPU上,存取速度比存储器快好几个数量级,寄存器多了,GCC就可以更多的使用寄存器,替换之前的存储器堆栈使用,从而大大提升性能。

    和IA32主要区别是:

    1)6个寄存器用来保存参数,多出的参数类似x86入栈;
    2)若存在闲置的寄存器的话,局部变量可以直接缓存到闲置寄存器中,过多局部变量类似x86入栈;
    3)因为是64位,rsp栈指针每次移动8个字节:类似 movq -8(%rsp),%rsp
    4)函数可以访问%rsp之后最多128个字节的内存:“红色区域”,意味着可以在通过%rsp的来在“红色区域”内存储一些临时数据。而不必使用使用多条指令。参考栈帧章节。
    5)在编译优化时,栈帧指针rbp被弃用,成为通用一般寄存器。所有对当前栈帧中的内存字段的访问引用,由%rsp进行相对寻址来实现。参考栈帧章节。

    在32bit时代,参数传递是通过入栈实现的,相对CPU来说,存储器访问太慢;这样函数调用的效率就不高。在x86-64时代,寄存器数量多了,CPU就可以利用多达6个寄存器来存储参数(图二),多于6个的参数,依然还是通过入栈实现传递。

    因此在x86_64位机器上编程时,需要注意:

    1)为了效率尽量使用少于6个参数的函数;

    2)传递比较大的参数,尽量使用指针,因为寄存器只有64位;

    实战演练

    下面通过一个实际的函数例子来看下寄存器状态。机器是centos8.1(x86_64),gcc版本是8.3.1

    C源码

    #include <stdio.h>
    #include <stdlib.h>
    
    int foo(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7)
    {
        int array[] = {100,200,300,400,500,600,700};
        int sum = array[arg1]+ array[arg7];
    
        return sum;
    
    }      /* -----  end of function foo  ----- */
    
    int main(int argc, char *argv[])
    {
        int i = 1;
        int j = foo(0,1,2, 3, 4, 5,6);
    
    	printf("i=%d,j=%dn", i, j);
    
        return 0;
    } 

    编译:gcc -O1 -S -o args_test.s args_test.c 。查看汇编程序args_test.s(节选):

      5 foo:
      6 .LFB20:
      7         movl    $100, -40(%rsp)
      8         movl    $200, -36(%rsp)
      9         movl    $300, -32(%rsp)
     10         movl    $400, -28(%rsp)
     11         movl    $500, -24(%rsp)
     12         movl    $600, -20(%rsp)
     13         movl    $700, -16(%rsp)
     14         movslq  8(%rsp),%rax
     15         movslq  %edi,%rdi
     16         movl    -40(%rsp,%rax,4), %eax
     17         addl    -40(%rsp,%rdi,4), %eax
     18         ret
    
     27 main:
     28 .LFB21:
     29         subq    $8, %rsp
     30 .LCFI0:
     31         movl    $6, (%rsp)
     32         movl    $5, %r9d
     33         movl    $4, %r8d
     34         movl    $3, %ecx
     35         movl    $2, %edx
     36         movl    $1, %esi
     37         movl    $0, %edi
     38         call    foo
     39         movl    %eax, %edx
     40         movl    $1, %esi
     41         movl    $.LC0, %edi
     42         movl    $0, %eax
     43         call    printf
     44         movl    $0, %eax
     45         addq    $8, %rsp
     46         ret

    1)前六个参数依次存在六个通用寄存器中(倒序,类似入栈),第七个参数入栈保存(注意$6是立即数6);

    2)在foo函数中,7 - 13行是把数组常数入栈(方便计算,且是访问了栈顶之外,ABI规范);

    3)14和15行分别去参数1和参数7,rax暂存参数7,最后需要保存函数返回值

    4)汇编语句“ -40(%rsp,%rax,4), %eax”中,%rsp作为数组基地址,%rax是数组下标,4是数组元素长度即5)sizeof(int),最后-40偏移找到正确的栈中的位置。

    展开全文
  • 寄存器和存储器的区别

    万次阅读 2016-05-01 11:23:55
    内存和寄存器就是为了解决存储器读写速度慢而产生多级存储机制,从20世纪50年代开始,磁芯存储器曾一度成为主存主要存储介质,但从20世纪70年代开始,逐步被半导体存储器所取代,目前计算机都是用半导体存储器...
  • 单片机FPGA的区别FPGA更偏向于硬件电路,是用来设计芯片的芯片(FPGA)。通过硬件编程语言在FPGA芯片上自定义集成电路的过程;单片机偏向于软件,是在已有的固化电路的芯片(单片机)上设计开发。通过软件编程语言...
  • 第二章 寄存器在 CPU 中:运算器进行信息处理;寄存器进行信息存储(主要部分,工作原理);控制器控制各种器件进行工作;内部总线连接各种器件,在它们之间...2.1 通用寄存器8086CPU 上一代 CPU 中的寄存器都是 ...
  • 而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。通用寄存器AX,BX,CX,DX 称作为数据寄存器:AX (Accumulator):累加寄存器,也称之为累加器;BX (Base):基地址寄存器;CX (C...
  • 1、存储器概述电路设计离不开存储器件,对一个电路系统而言,一般包含以下几种存储器:EEPROM、FLASH、SDRAM(或DDR2 SDRAM、DDR3 SDRAM等),在高性能系统中还包含ZBT SRAM(或DDR SRAM、QDR SRAM等),存储器分类...
  • 变量存储器 V变量存储器是最常用的存储器。...标志存储器(位存储器) MM存储区在功能用法上与V存储区类似,但是M存储区很小,只有32个字节。M存储区有一点特殊,对于MBO-MB13这14个字节可设置成保存在EE...
  • 3.2 程序编码第一章已经介绍过代码如何编译成...基本概念:程序计数器 成为%eip,表示将要执行下一条指令在存储器地址。整数寄存器有8个,可以存储32位值。条件码寄存器保存着最近执行算术指令状态信息...
  • 在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路实现存储功能或满足电路时序要求。而接口寄存器可以同时被内部电路和...
  • 随着存储领域的发展,有很多不同的存储介质,今天ICMAX就带大家来分一分emmc、Nand flash、Nor flash之间的区别。一、定义及区别emmc:全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand ...
  • 在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路实现存储功能或满足电路时序要求。而接口寄存器可以同时被内部电路和...
  • 虽然只有“一字之差”,但你知道这其中的区别么?如果对此感兴趣,就看看今天的内容吧。一、可编程控制器(PLC)是计算机家族中的一员,是为工业控制应用而设计制造的。早期的可编程控制器称作可编程逻辑控制器,...
  • 我们知道,在选购服务器内存时候,相比台式机普通内存型号,带有ECC或者RECC标注,不少用户不知道ECCRECC到底是什么,那么内存ecc是什么意思?下面装机之家分享一下服务器内存eccrecc之间能否兼容及区别科普...
  • 现代计算机硬件由五大部件组成,分别是运算器、控制器、存储器、输入设备输出设备...而与寄存器并称为内部存储器的还有内存。内存也被称为主存,而辅存指的是计算机的外部存储、例如,硬盘、U盘、软盘以及光盘等等...
  • 1、存储器功能: 存放指令数据,并能由...寄存器的速度比主存储器的速度要快很多,由于寄存器的容量有限,所以将不需要操作的数据存放在主存储器中,主存储器中的数据必须放入寄存器材能够进行操作。 简单地说...
  • 内存和寄存器就是为了解决存储器读写速度慢而产生多级存储机制,从20世纪50年代开始,磁芯存储器曾一度成为主存主要存储介质,但从20世纪70年代开始,逐步被半导体存储器所取代,目前计算机都是用半导体存储器...
  • 内存和寄存器就是为了解决存储器读写速度慢而产生多级存储机制,从20世纪50年代开始,磁芯存储器曾一度成为主存主要存储介质, 但从20世纪70年代开始,逐步被半导体存储器所取代,目前计算机都是用半导体...
  • 寄存器是中央处理器CPU内部组成部分,读写速度CPU运行速度基本匹配。寄存器是有限存储容量高速存储部件,可用来存储指令、数据地址。在中央处理器控制部件中,包含的寄存器有指令寄存器(IR)程序计数器...
  • 寄存器存储器、内存的区别

    万次阅读 多人点赞 2018-08-08 18:31:21
    在中央处理器控制部件中,包含的寄存器有指令寄存器(IR)程序计数器(PC)。在中央处理器算术及逻辑部件中,包含的寄存器有累加器(ACC)。 存储器范围最大,它几乎涵盖了所有关于存储范畴。寄存器,内存...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 323
精华内容 129
关键字:

寄存器和存储器的区别