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

    2017-06-29 10:07:47
    另外二者速度相差很大,寄存器存取速度最快 其次缓存最后是内存。三张容量上关系就像饭碗、饭锅和米缸关系,容量越大级别越低,速度越慢与CPU联系越不密切。寄存器分通用寄存器 标志寄存器 堆栈寄存器等完成...

    寄存器属于CPU的一个组成部分而缓存只是集成到CPU封装内完全是和CPU独立的器件。另外二者速度相差很大,寄存器存取速度最快 其次缓存最后是内存。三张容量上的关系就像饭碗、饭锅和米缸的关系,容量越大级别越低,速度越慢与CPU的联系越不密切。寄存器分通用寄存器 标志寄存器 堆栈寄存器等完成CPU的加法运算,缓存是缓冲存储器,属于静态电路存储器。
    对于寄存器的容量:
    16位寄存器组

    16位CPU所含有的寄存器有

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

    32位寄存器组

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

    32位CPU所含有的寄存器有

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

     

     

     

    寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志(

    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: 状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变

    SF: 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

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

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

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

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

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

    展开全文
  • 寄存器、CPU缓存内存关系

    千次阅读 2013-06-17 14:08:53
    另外二者速度相差很大,寄存器存取速度最快 其次缓存最后是内存。三张容量上关系就像饭碗、饭锅和米缸关系,容量越大级别越低,速度越慢与CPU联系越不密切。寄存器分通用寄存器 标志寄存器 堆栈寄存器等...

           寄存器属于CPU的一个组成部分而缓存只是集成到CPU封装内完全是和CPU独立的器件。另外二者速度相差很大,寄存器存取速度最快 其次缓存最后是内存。三张容量上的关系就像饭碗、饭锅和米缸的关系,容量越大级别越低,速度越慢与CPU的联系越不密切。寄存器分通用寄存器 标志寄存器 堆栈寄存器等完成CPU的加法运算,缓存是缓冲存储器,属于静态电路存储器。  对于寄存器的容量:  16位寄存器组   16位CPU所含有的寄存器有   4个数据寄存器(AX、BX、CX和DX)  2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP)  4个段寄存器(ES、CS、SS和DS)  1个指令指针寄存器(IP) 1个标志寄存器(Flags)   32位寄存器组   32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS和GS。   32位CPU所含有的寄存器有   4个数据寄存器(EAX、EBX、ECX和EDX)  2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)  6个段寄存器(ES、CS、SS、DS、FS和GS)  1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)  

    转自:http://baike.1688.com/doc/view-d4268321.html

     

    寄存器是CPU里的东西,内存是挂在CPU外面的数据总线上的,访问内存时要在CPU的寄存器填上地址,再执行相应的汇编指令,这时CPU会在数据总线上生成读取或写入内存数据的时钟信号,最终内存的内容会被CPU寄存器的内容更新(写入)或被读入CPU的寄存器(读取)
    不只是PC上的CPU,所有的嵌入式CPU,单片机都一个样
    转自:http://zhidao.baidu.com/question/545822714.html

     

    展开全文
  • 其中的寄存器相当于CM3自己的内存,存取速度非常。用于暂存数据处理中的过程数据和状态。本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。1 寄存器组CM3 拥有通用寄存器 R0‐...

    26d3bc9e66bb94f93eabf832af0c597b.png

    ARM内核(Cortex-M3)由ALU,NVIC,Register Banked,Fetch and Decoder Unit,Interfaces组成。

    其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。

    本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。

    1 寄存器组

    CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。

    2e32f72d18e90faee960714c8c5a7aec.png

    94ccc6d9178ed6ccef38256dc6d387be.png

    R13,堆栈指针(Stack Pointer)

    R13寄存器中存放的是堆栈的栈顶指针,CM3中有两个堆栈指针,也就支持两个堆栈。分别是:主堆栈指针(Main Stack Pointer),进程堆栈指针(Process Stack Pointer)。

    堆栈主要是通过POP,PUSH指令来进行操作。在执行 PUSH 和 POP 操作时,那个通常被称为 SP 的地址寄存器,会自动被调整,以避免后续的操作破坏先前的数据。

    R14 ,连接寄存器(Link Register)

    在一个汇编程序中, LR 用于在调用子程序时存储返回地址。例如,在使用 BL(分支并连接, Branch and Link)指令时,就自动填充 LR 的值(执行函数调用的下一指令),进而在函数退出时,正确返回并执行下一指令。

    如果函数中又调用了其他函数,那么LR将会被覆盖,所以需要先将LR寄存器入栈PUSH,保护起来。

    R15,程序计数器(Program Count)

    因为 CM3 内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4

    特殊功能寄存器组

    Cortex‐M3 中的特殊功能寄存器包括:

    程序状态寄存器组( xPSR),存放当前CPU的状态

    中断屏蔽寄存器组( PRIMASK, FAULTMASK,以及 BASEPRI),用于控制异常的使能和除能

    控制寄存器( CONTROL),用于定义特权级别,以及选择当前使用堆栈指针(PSP/MSP?)。

    CM3的操作模式

    为了架构的安全性和健壮性,CM3支持2个模式(线程模式,handler模式),以及2个特权等级(特权级,用户级)。handler模式下只能是特权级。

    9f344a3bd41692fcf109d8f6468c4827.png

    复位序列

    在进入复位状态后, CM3 做的第一件事就是读取下列两个 32 位整数的值:

    从地址 0x0000,0000 处取出 MSP 的初始值。(初始化MSP,为后续的代码执行创造环境)

    从地址 0x0000,0004 处取出 PC 的初始值---这个值是复位向量。(启动引导代码)

    b7d5d9cc9d64759a59aeedd9dca9f759.png

    a7317e330b6b9dc0eddeff78b1f36979.png

    2 ARM汇编指令集

    ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类

    跳转指令:B,BL,BX,BXL(用于函数调用时的跳转,分为带/不带 返回地址/状态 的跳转)

    数据处理指令:MOV,ADD,SUB,DIV,MUL,AND,ORR,CMP...(赋值,加减乘除,与或逻辑,比较)

    程序状态寄存器(PSR)处理指令:MSR,MRS(用于查询或设置状态寄存器/特殊寄存器的数据)

    加载/存储指令: LDR,STR...(用于寄存器与内存之间的数据交换,一般为间接寻址)

    异常产生指令:SWI(用于产生软件中断)

    3 函数调用过程的汇编分析

    通过简单的函数调用,分析入栈,出栈,寄存器的使用,以及常用的ARM汇编指令。

    #include <stdio.h>
    
    int add_f(int x,int y)
    {
    	int ret = 0;
    	ret = x + y;
    	return ret;
    }
    
    int main()
    {
    	int a = 10,b = 20;
    	int c = add_f(a,b);
    	return 0;
    }

    编译,再反汇编:

    b151b88f409f1b8f3cee956a1b8e814d.png

    汇编代码:

    06fa98417b824f2ba26a6e4f4fdad125.png

    add_f 函数 分析:

    寄存器参数入栈PUSH,保存上一函数的运行参数fp(R11)

    栈指针SP减小20,伸张栈帧空间,开辟本次函数的栈帧(栈帧,就是指单个函数运行的栈空间,函数在调用的过程中,各个函数栈帧进行串接,堆栈向下生长。)

    进行数据操作(MOV,ADD,SUB,LDR,STR等)

    栈指针SP复位至最开始的地址,收缩栈帧空间

    寄存器参数出栈POP,恢复上一函数的运行参数fp(R11)

    bx lr,带状态的跳转至lr寄存器中的地址

    所谓的栈空间内存由编译器自动回收,也就是这个道理,在编译阶段,就确定了各个函数的栈帧空间的伸张与收缩,无需程序员来进行内存管理。另外,处于堆空间的数据需要手动分配与释放(malloc/free)。

    展开全文
  • 其中的寄存器相当于CM3自己的内存,存取速度非常。用于暂存数据处理中的过程数据和状态。本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。1 寄存器组CM3 拥有通用寄存器 R0‐...

    6d5cc746b32ab0250189bb7664924099.png

    ARM内核(Cortex-M3)由ALU,NVIC,Register Banked,Fetch and Decoder Unit,Interfaces组成。

    其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。

    本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。

    1 寄存器组

    CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。

    1ab1e2c9f90c5071b3f4bed3df79f295.png

    62571f3412c329ff00c835d501dc7e68.png

    R13,堆栈指针(Stack Pointer)

    R13寄存器中存放的是堆栈的栈顶指针,CM3中有两个堆栈指针,也就支持两个堆栈。分别是:主堆栈指针(Main Stack Pointer),进程堆栈指针(Process Stack Pointer)。

    堆栈主要是通过POP,PUSH指令来进行操作。在执行 PUSH 和 POP 操作时,那个通常被称为 SP 的地址寄存器,会自动被调整,以避免后续的操作破坏先前的数据。

    R14 ,连接寄存器(Link Register)

    在一个汇编程序中, LR 用于在调用子程序时存储返回地址。例如,在使用 BL(分支并连接, Branch and Link)指令时,就自动填充 LR 的值(执行函数调用的下一指令),进而在函数退出时,正确返回并执行下一指令。

    如果函数中又调用了其他函数,那么LR将会被覆盖,所以需要先将LR寄存器入栈PUSH,保护起来。

    R15,程序计数器(Program Count)

    因为 CM3 内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4

    特殊功能寄存器组

    Cortex‐M3 中的特殊功能寄存器包括:

    程序状态寄存器组( xPSR),存放当前CPU的状态

    中断屏蔽寄存器组( PRIMASK, FAULTMASK,以及 BASEPRI),用于控制异常的使能和除能

    控制寄存器( CONTROL),用于定义特权级别,以及选择当前使用堆栈指针(PSP/MSP?)。

    CM3的操作模式

    为了架构的安全性和健壮性,CM3支持2个模式(线程模式,handler模式),以及2个特权等级(特权级,用户级)。handler模式下只能是特权级。

    84899035be2061d8b4822b0c5a0daa6c.png

    复位序列

    在进入复位状态后, CM3 做的第一件事就是读取下列两个 32 位整数的值:

    从地址 0x0000,0000 处取出 MSP 的初始值。(初始化MSP,为后续的代码执行创造环境)

    从地址 0x0000,0004 处取出 PC 的初始值---这个值是复位向量。(启动引导代码)

    3aa76a61f46a0d6e28c73a562e491a56.png

    199cfc746b41319f6322e0941538330b.png

    2 ARM汇编指令集

    ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类

    跳转指令:B,BL,BX,BXL(用于函数调用时的跳转,分为带/不带 返回地址/状态 的跳转)

    数据处理指令:MOV,ADD,SUB,DIV,MUL,AND,ORR,CMP...(赋值,加减乘除,与或逻辑,比较)

    程序状态寄存器(PSR)处理指令:MSR,MRS(用于查询或设置状态寄存器/特殊寄存器的数据)

    加载/存储指令: LDR,STR...(用于寄存器与内存之间的数据交换,一般为间接寻址)

    异常产生指令:SWI(用于产生软件中断)

    3 函数调用过程的汇编分析

    通过简单的函数调用,分析入栈,出栈,寄存器的使用,以及常用的ARM汇编指令。

    #include <stdio.h>
    
    int add_f(int x,int y)
    {
    	int ret = 0;
    	ret = x + y;
    	return ret;
    }
    
    int main()
    {
    	int a = 10,b = 20;
    	int c = add_f(a,b);
    	return 0;
    }

    编译,再反汇编:

    46f94f5a3d5d859129e0ba1678d2acb2.png

    汇编代码:

    596d4156604cc59f850622318b79adf5.png

    add_f 函数 分析:

    寄存器参数入栈PUSH,保存上一函数的运行参数fp(R11)

    栈指针SP减小20,伸张栈帧空间,开辟本次函数的栈帧(栈帧,就是指单个函数运行的栈空间,函数在调用的过程中,各个函数栈帧进行串接,堆栈向下生长。)

    进行数据操作(MOV,ADD,SUB,LDR,STR等)

    栈指针SP复位至最开始的地址,收缩栈帧空间

    寄存器参数出栈POP,恢复上一函数的运行参数fp(R11)

    bx lr,带状态的跳转至lr寄存器中的地址

    所谓的栈空间内存由编译器自动回收,也就是这个道理,在编译阶段,就确定了各个函数的栈帧空间的伸张与收缩,无需程序员来进行内存管理。另外,处于堆空间的数据需要手动分配与释放(malloc/free)。

    展开全文
  • Java内存分配

    2015-05-12 21:21:00
    1. 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制,可以不理会 2. 栈:(stacksegment) 2.1:存取速度仅次于寄存器的存储区,速度快,先进后出(first in last out) 2.2:存放8大基本类型数据...
  • Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的...
  • 2. 栈的优势是,存取速度比堆要,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的...
  • java中存储区分类

    2019-07-29 18:08:49
    Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区(static storage)、常量...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常...
  • java存储区分类

    2013-07-08 17:11:42
    Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用是
  • 内存分配

    2017-09-27 12:29:10
    寄存器位于处理器中,直接从处理器中读写,属于最快的存储区域,寄存器根据需要由编译器进行选择,无法在java程序中对其进行选择。所以,可以暂时忽略这一块。 2.栈 栈是存取速度仅次于寄存器的一块存储区域,...
  • 1. 在嵌入式系统的存储部件中,存取速度最快的是(1)。 A. 内存 B. 寄存器组 C. Flash D. Cache 2. 实时操作系统(RTOS)内核与应用程序之间的接口称为(2)。 A. I/O接口 B. PCI C. API D. GUI 3. ...
  • Java中存储区划分

    2008-01-09 17:50:00
    Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用
  • Java中存储区分类

    2008-10-30 21:03:24
    Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用是由CP...
  • java中数据存储

    千次阅读 2012-02-17 00:08:37
    java中有五个不同的地方用来存储数据: 1)寄存器: 这是存取数据最快的地方,因为它位于处理器内部。...堆栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在堆栈中的数据
  • javaSE之存储区分类

    2015-05-13 00:08:00
     寄存器与其它的存储区不一样,它是位于cpu中,是存取速度最快的存储区,但由于寄存器的数量有限,它的分配由cpu按需分配,程序员没有必要去分配,也不能让程序员去分配。 栈(stack):  位于RAM中,并通过cpu...
  • java 数据存储方式

    2017-09-22 07:18:31
    1.寄存器java数据存储中最快的区域,位于处理器中,但是空间是最少的。该区域由根据需求自动分配,由系统管理。 2.栈存储该存储区域位于RAM中,存取速度仅次于寄存器。数据结构是栈,具有先进先出的特点。该区域主要...
  • java存储数据

    2017-06-01 13:18:42
    java 数据存储区,主要以下五种: 一、寄存器 寄存器是集中在CPU指令的缓存区,是CPU直接作为数据交换,存取速度最快,一般用于复杂运算操作,不建议存放大数据,因寄存器数量有限,只存放要求非常快的数据,JAVA...
  • 其中寄存器是存在计算机cpu里面,处理速度最快,但是由于寄存器存储空间很有限,只能CPU进行控制存储,jvm是没有权限去存储数据在寄存器 栈是位于ram中,一般用于存储基本类型变量以及对象引用,由于栈...
  • 最快的存储区域,存在于CPU当中。数量有限由编译器统一进行分配,不能直接控制,对于Java程序员来说,寄存器是“透明”的。 2.堆栈(stack)。其存取速度仅次于寄存器(register)。位于RAM(random-access memory)当中...
  • 操作系统概论三

    2013-05-27 19:33:49
    它的存取速度最快,但容量小,一般每个寄存器只能存储一个字长的信息,故只用来存放临时的工作数据和控制信息。常用的寄存器有:(1)指令寄存器:用于存放当前从主存储器中读出的指令; (2)通用寄存器:用于存放...
  • 这种方式的存取速度比较,仅次于直接位于CPU中的寄存器。 以下的代码是创建一个顺序栈,实现它的基本功能。并且通过检验匹配括号来实现栈的功能。 注意事项: 1,栈顶指针永远指向的是栈顶元素前一个空栈的...
  • Java储存区详解

    2017-03-29 14:41:11
    Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用
  • 在大型网站开发中,缓存的使用是必要的,有时候我们会尝试自己编写缓存类,通过文件缓存来使网站速度加快。但是,文件缓存也是需要...目前来说,内存缓存是最快的一种缓存,当然也有所说的寄存器,但是不太靠谱。 2:

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

存取速度最快的寄存器