-
寄存器
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
-
汇编指令msr_【ARM】内核寄存器以及常用汇编指令分析
2021-01-10 14:28:18其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。1 寄存器组CM3 拥有通用寄存器 R0‐...ARM内核(Cortex-M3)由ALU,NVIC,Register Banked,Fetch and Decoder Unit,Interfaces组成。
其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。
本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。
1 寄存器组
CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。
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模式下只能是特权级。
复位序列
在进入复位状态后, CM3 做的第一件事就是读取下列两个 32 位整数的值:
从地址 0x0000,0000 处取出 MSP 的初始值。(初始化MSP,为后续的代码执行创造环境)
从地址 0x0000,0004 处取出 PC 的初始值---这个值是复位向量。(启动引导代码)
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; }
编译,再反汇编:
汇编代码:
add_f 函数 分析:
寄存器参数入栈PUSH,保存上一函数的运行参数fp(R11)
栈指针SP减小20,伸张栈帧空间,开辟本次函数的栈帧(栈帧,就是指单个函数运行的栈空间,函数在调用的过程中,各个函数栈帧进行串接,堆栈向下生长。)
进行数据操作(MOV,ADD,SUB,LDR,STR等)
栈指针SP复位至最开始的地址,收缩栈帧空间
寄存器参数出栈POP,恢复上一函数的运行参数fp(R11)
bx lr,带状态的跳转至lr寄存器中的地址
所谓的栈空间内存由编译器自动回收,也就是这个道理,在编译阶段,就确定了各个函数的栈帧空间的伸张与收缩,无需程序员来进行内存管理。另外,处于堆空间的数据需要手动分配与释放(malloc/free)。
-
汇编对sp指针进行修改_【ARM】内核寄存器以及常用汇编指令分析
2020-12-06 12:07:39其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。1 寄存器组CM3 拥有通用寄存器 R0‐...ARM内核(Cortex-M3)由ALU,NVIC,Register Banked,Fetch and Decoder Unit,Interfaces组成。
其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。
本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。
1 寄存器组
CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。
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模式下只能是特权级。
复位序列
在进入复位状态后, CM3 做的第一件事就是读取下列两个 32 位整数的值:
从地址 0x0000,0000 处取出 MSP 的初始值。(初始化MSP,为后续的代码执行创造环境)
从地址 0x0000,0004 处取出 PC 的初始值---这个值是复位向量。(启动引导代码)
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; }
编译,再反汇编:
汇编代码:
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:001. 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制,可以不理会 2. 栈:(stacksegment) 2.1:存取速度仅次于寄存器的存储区,速度快,先进后出(first in last out) 2.2:存放8大基本类型数据... -
(转)Java中存储区的分类
2019-10-04 17:50:35Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的... -
堆和栈最基本的小区别
2017-02-27 16:46:002. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的... -
java中存储区的分类
2019-07-29 18:08:49Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区(static storage)、常量...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常... -
java存储区的分类
2013-07-08 17:11:42Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用是 -
内存分配
2017-09-27 12:29:10寄存器位于处理器中,直接从处理器中读写,属于最快的存储区域,寄存器根据需要由编译器进行选择,无法在java程序中对其进行选择。所以,可以暂时忽略这一块。 2.栈 栈是存取速度仅次于寄存器的一块存储区域,... -
2016年下半年 系统架构设计师 上午试卷 综合知识 软考真题【含答案和答案解析】
2021-02-24 10:43:431. 在嵌入式系统的存储部件中,存取速度最快的是(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:00Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用 -
Java中存储区的分类
2008-10-30 21:03:24Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用是由CP... -
java中的数据存储
2012-02-17 00:08:37java中有五个不同的地方用来存储数据: 1)寄存器: 这是存取数据最快的地方,因为它位于处理器内部。...堆栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在堆栈中的数据 -
javaSE之存储区的分类
2015-05-13 00:08:00寄存器与其它的存储区不一样,它是位于cpu中,是存取速度最快的存储区,但由于寄存器的数量有限,它的分配由cpu按需分配,程序员没有必要去分配,也不能让程序员去分配。 栈(stack): 位于RAM中,并通过cpu... -
java 数据存储方式
2017-09-22 07:18:311.寄存器java数据存储中最快的区域,位于处理器中,但是空间是最少的。该区域由根据需求自动分配,由系统管理。 2.栈存储该存储区域位于RAM中,存取速度仅次于寄存器。数据结构是栈,具有先进先出的特点。该区域主要... -
java存储数据
2017-06-01 13:18:42java 数据存储区,主要以下五种: 一、寄存器 寄存器是集中在CPU指令的缓存区,是CPU直接作为数据交换,存取速度最快,一般用于复杂运算操作,不建议存放大数据,因寄存器数量有限,只存放要求非常快的数据,JAVA... -
java堆栈,常量池的浅析
2016-09-14 13:26:21其中寄存器是存在计算机cpu里面,处理速度最快,但是由于寄存器存储空间很有限,只能CPU进行控制存储,jvm是没有权限去存储数据在寄存器中的 栈是位于ram中的,一般用于存储基本类型的变量以及对象的引用,由于栈的... -
《Thinking in Java 》学习笔记 --- Java内存分配,对象存放到什么地方?怎么放?
2013-09-17 23:12:48最快的存储区域,存在于CPU当中。数量有限由编译器统一进行分配,不能直接控制,对于Java程序员来说,寄存器是“透明”的。 2.堆栈(stack)。其存取速度仅次于寄存器(register)。位于RAM(random-access memory)当中... -
操作系统概论三
2013-05-27 19:33:49它的存取速度最快,但容量小,一般每个寄存器只能存储一个字长的信息,故只用来存放临时的工作数据和控制信息。常用的寄存器有:(1)指令寄存器:用于存放当前从主存储器中读出的指令; (2)通用寄存器:用于存放... -
栈结构的实现(数据结构课本3.1)
2019-05-13 22:02:11这种方式的存取速度比较快,仅次于直接位于CPU中的寄存器。 以下的代码是创建一个顺序栈,实现它的基本功能。并且通过检验匹配括号来实现栈的功能。 注意事项: 1,栈顶指针永远指向的是栈顶元素前一个空栈的... -
Java储存区详解
2017-03-29 14:41:11Java中把存储区分为6类。分别为寄存器(register)、栈(stack)、堆(heap)、静态存储区...寄存器与其他的存储区不同,它位于CPU中,所以它是存取速度最快的存储区.但是由于CPU中寄存器的数量是非常有限的,所以寄存器的使用 -
php-memcached内存缓存的使用
2014-11-20 17:56:09在大型网站开发中,缓存的使用是必要的,有时候我们会尝试自己编写缓存类,通过文件缓存来使网站速度加快。但是,文件缓存也是需要...目前来说,内存缓存是最快的一种缓存,当然也有所说的寄存器,但是不太靠谱。 2:
-
vue3从0到1-超详细
-
HP_M1130_M1210_MFP_Full_Solution-v20180815-10158769.rar
-
2021-03-01
-
LeetCode 303 区域和检索 HERODING的LeetCode之路
-
通过Rufus写入树莓派IMG镜像到TF卡
-
创建对象时发生的那些事儿
-
机器学习可视化软件机器学习可视化软件
-
2021-03-01
-
PPT大神之路高清教程
-
用两个栈实现队列(简单,栈,队列)
-
中文分词数据集.zip
-
2012-2015年中级互联网技术真题.pdf
-
Kubernetes技术分享.pptx
-
【硬核】一线Python程序员实战经验分享(1)
-
鲇鱼1000-2000.txt
-
洛谷 P4924 [1007]魔法少女小Scarlet 题解 C/C++
-
马士兵老师spring框架学习笔记
-
【Flutter】StatefulWidget 组件.zip
-
A movie title explorer.zip
-
mysql事务实现原理