精华内容
下载资源
问答
  • CPU中常见寄存器及与内存的交互

    千次阅读 2020-04-20 22:27:40
    本篇博客关于指令集PSW的内容参考至:https://www.cnblogs.com/f-ck-need-u/p/11141636.html,同时做下了寄存器内存交互的总结。 指令集 对于每个CPU,其都有一套自己可以执行的专门的指令集(这部分指令由CPU...

    本篇博客关于指令集和PSW的内容参考至:https://www.cnblogs.com/f-ck-need-u/p/11141636.html,同时做下了寄存器与内存交互的总结。

    指令集

    对于每个CPU,其都有一套自己可以执行的专门的指令集(这部分指令由CPU提供)。

    正是因为不同CPU架构的指令集不同,使得X86处理器不能执行ARM程序,ARM程序也不能执行X86程序(Inter和AMD都使用x86指令集,手机绝大多数使用ARM指令集)。

    注意:指令集具有软硬件层次之分:硬件指令集是硬件层次上由CPU自身提供的可执行的指令集合。软件指令集是指语言程序库所提供的指令,只要安装了该语言的程序库,指令就可以执行。

    寄存器

    当程序要执行的部分被装载到内存中后,CPU要从内存中取出指令,然后指令解码(以便知道类型和操作数,简单的理解为:CPU要知道这是什么指令),然后执行该指令。再然后取下一个指令,重复以上操作。

    由于CPU访问内存已得到指令或数据的时间要比执行指令花费的时间多得多,因此在CPU内部提供了一些来保存关键变量、临时数据等信息的通用寄存器

    所以,CPU需要提供一些特定的指令,使得可以从内存中读取数据存入寄存器以及将寄存器数据存入内存。

    常见寄存器

    IP寄存器:用来指向当前执行指令的下一条指令(非Inter厂家将IP寄存器称为PC寄存器:即程序计数器),指令取出后,就会更新该寄存器指向下一条指令;

    CS寄存器:代码段寄存器,一般用于存放代码;

    通常CS和IP配合使用,用于处理下一条执行的代码。

    DS寄存器:数据段寄存器,一般用于存放数据;

    • 一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元;
    • 用一个段存放数据,将它定义为“数据段”。用一段存放代码,将它定义为“代码段”,用一段当做栈,将它定义为“栈段”。
    • 对于数据段,将它的段地址放到DS中,用mov、add、sub等访问内存单元的指令时,CPU就将我们定义的数据段中的内容当做数据来访问。对于代码段,将它的段地址放在CS中,将段中第一条指令的偏移地址放在IP中,这样CPU就将执行我们定义的的代码段中的指令。
    • CPU将内存中的某段内容当做代码,是因为CS:IP指向哪里。

    存储寄存器

    MAR:保存将要被访问数据在内存中哪个地址,保存的是地址值

    MDR:保存从内存读取进来的数据或将要被写入内存的数据,保存的是数据值

    IR:保存当前正在执行的指令

    • 存储器地址寄存器(MAR)和存储器数据寄存器(MDR)是主存和CPU之间的接口。MAR可以接收由程序计数器(PC)的指令地址或来自运算器的操作数的地址,以确定要访问的单元。MDR是向主存写入数据或从主存读出数据的缓冲部件。MAR和MDR从功能上看属于主存,但通常放在CPU内。

    AC寄存器:累加寄存器,当运算器的算术逻辑单元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区。累加寄存器暂时存放ALU运算的结果信息。

    • ALU:算数逻辑单元,CPU中的关键部件,用来实现指令所指定的各种算术和逻辑运算操作。
    • CU:控制器,负责将存储器中的数据送到ALU中去做运算,并将运算结果存回到存储器中

    如下示意图:
    在这里插入图片描述

    跟着上图,以取数相加指令为例:

    取指:首先指令地址在PC中,通过片内总线然后送到MAR寄存器中,MAR通过与内存管理器交互,将MAR指令下那条地址的指令取出来放到MDR寄存器中。接着送到IR寄存器(IR:存储当前指令);

    解码:将指令的操作码部分送给CU,由CU负责解码;

    执行指令:因为是取数相加指令, 首先进行取数操作,在CU帮助下, 将取数指令的地址码送到MAR中, 然后通过与内存控制器交互,从内存中取出该地址下的数据到MDR;由于需要进行逻辑运算,通过CU控制,将两个MDR寄存器(保存了来自内存的两个数据)中的值拷贝到ALU中,然后ALU进行加法操作(中间可能使用到AC寄存器),计算完毕后将结果拷贝到MDR寄存器,最后写入回内存。

    PSW

    补充说明一个重要的寄存器:PSW。

    在CPU中,有着PSW寄存器,表示程序状态字,这个寄存器中保存了一些控制位,比如CPU的优先级、CPU的工作模式(用户态、内核态)。

    在CPU进行进程切换的时候,需要将寄存器中和当前进程有关的状态数据写入内存对应的位置(内核中该进程的栈空间)保存起来,当切换回该进程时,需要从内存中拷贝回寄存器中。即上下文切换时,需要保护现场和恢复现场。

    内核态的CPU,可以执行指令集中的所有指令,并使用硬件的所有功能。

    用户态的CPU,只允许执行指令集中的部分指令。一般而言,IO相关和把内存保护相关的所有执行在用户态下都是被禁止的,此外其它一些特权指令也是被禁止的,比如用户态下不能将PSW的模式设置控制位设置成内核态。

    用户态CPU想要执行特权操作,需要发起系统调用来请求内核帮忙完成对应的操作。其实是在发起系统调用后,CPU会执行trap指令陷入(trap)到内核。当特权操作完成后,需要执行一个指令让CPU返回到用户态。

    除了系统调用会陷入内核,更多的是硬件会引起trap行为陷入内核,使得CPU控制权可以回到操作系统,以便操作系统去决定如何处理硬件异常。

    展开全文
  • 寄存器PLC地址寄存器modbus协议地址

    万次阅读 多人点赞 2017-10-24 22:25:28
    第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。 寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数...

           寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。
           寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。
           支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应 当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种 “功能”读写而来。 功能码是 Modbus 地址的底层。 如果 Modbus 通 信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。

           使用 modbus 地址时应注意下述问题:

     1)40001~4xxxx 是美国 modicon 公司和 ge 公司 plc 使用的 modbus 地址,它是基于1的地址,即同类元件的首地址为1。西门子 plc 的 modbus 地址是基于0的地址。 

    2)美国的 modbus 地址左起第2位用来表示元件的类型,例如 i0.0的 modbus 地址为010001。 因为数据类型已经包含在功

    展开全文
  • 内存单元 地址寄存器

    2018-12-12 19:56:24
    mov指令可以完成两种传送 1 将数据直接送入寄存器(CS IP除外) 2 将一个...那么 如何将内存单元中的内容送入一个寄存器中呢? 例题  已知内存单元情况   10000H 23 10001H 11 10002H 22 10003H ...

    mov指令可以完成两种传送

    1 将数据直接送入寄存器(CS IP除外) 2 将一个寄存器的内容送入另一个寄存器

    那么 如何将内存单元中的内容送入一个寄存器中呢?

    例题

             已知内存单元情况

                                           

    10000H23
    10001H11
    10002H22
    10003H66

             已知命令

                      mov ax,1000H                                 8086CPU的地址寄存器DS不能直接mov 用ax中转一下

                      mov ds,ax                                        中转一下

                      mov ax,[0]                                        ax=1123H                    字单元= 高位字节 + 低位字节

                      mov bx,[2]                                        bx=6622H

                      mov cx,[1]                                        cx=2211H

                      add bx,[1]                                         bx=8833H

    展开全文
  • 图解寄存器内存

    千次阅读 2020-09-24 18:47:26
    寄存器与内存寄存器内存 初学单片机的时候,由于没有看过计算机相关的知识,很难理解寄存器是个什么东西。内存虽在生活中常常被提到,但一寄存器放一块就显得有点混乱了。现在就用一张图来展示一下它们之间的关系...

    寄存器与内存比较

    初学单片机的时候,由于没有看过计算机相关的知识,很难理解寄存器是个什么东西。内存虽在生活中常常被提到,但一和寄存器放一块就显得有点混乱了。现在就用一张图来展示一下它们之间的关系。

    寄存器

    寄存器是用于存储二进制数的逻辑部件,一个触发器可以存储1位二进制数据,存储N位二进制数据的寄存器需要N个触发器组成。由8个触发器构成的8位寄存器的逻辑图如下图所示:

    在时钟CP上升作用下, D 0 D_0 D0~ D 7 D_7 D7同时存入数据,当使能信号有效时,触发器存储的数据就可以通过三态门进行输出。
    由于寄存器是集成在CPU内部的,所以当CPU访问寄存器时,只要找到相关的位进行读取就可以了,访问速度自然很快。

    内存

    与寄存器不同,内存是独立于CPU之外的。CPU访问内存时,需要经历一系列过程,访问速度自然要比访问寄存器慢很多。例如,CPU要从内存中读取一条指令:首先内核先将代码中的逻辑地址送给内存管理单元(MMU),由MMU将逻辑地址转换成实际的物理地址,并通过地址总线传送到内存,定位出指令的存放位置;接着内存再将指令通过数据总线传送到缓存;最终CPU从缓存中取得指令。
    值得注意的是,缓存是CPU内部的一种存储器,可以存放好几条指令。在实际工作中,CPU往往一次性读取多条指令有序存放在缓存中。当CPU执行完缓存里存放的指令时,内存刚好又送来好几条指令,如此便能保证内存与CPU都维持在工作状态,工作效率就可以得到保证了。

    参考文献
    [1]康华光,电子技术基础 数字部分(第六版).北京:高等教育出版社,2014.1;

    展开全文
  • CUDA内存结构GPU的内存结构CPU类似,但也存在一些区别,GPU的内存中可读写的有:寄存器(registers)、Local memory、共享内存(shared memory)全局内存(global memory),只读的有:常量内存(constant memory...
  • 地址和寄存器

    千次阅读 2020-09-16 10:45:28
    1、8086外部提供了20位的地址总线,CPU内部只能提供16位地址 两个16位地址转换为20位 地址加法器合成物理地址的方法: ...CS、DS、SS、ES当8086要访问内存时,由这4个段寄存器提供内存单元的段地址 CSIP是.
  • 这段内存有起始地址和结束地址,比如从0x1000到0x8000,起始地址是较小的那个地址,结束地址是较大的那个地址。 程序运行过程中,对于动态的内存占用请求(比如新建对象,或者使用malloc命令),系统就会从预先...
  • CPU 寄存器 和内存三者之间的关系

    万次阅读 多人点赞 2018-08-26 16:43:19
    寄存器 不知道什么是寄存器?那见过太监没有?大家应该都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝身边的小太监,小太监呢再交给皇帝同志进行处理。这个小太监只是个中转站,并无别的功能...
  • 地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这...方法:基址寄存器与界限寄存器使用一种简单的动态重定位,把每个进程的地址空间映射到物理内存的不同部分。当使用基址...
  • 寄存器内存的区别

    万次阅读 2018-03-02 08:28:20
    寄存器寄存器是有触发器或锁存器组成,通常由触发器组成,寄存器拥有非常高的读写速度,所以在寄存器之间传递数据非常快 内存内存就是存储器,由半导体器件构成。 计算机的存储层次(memory hierarchy)之中,...
  • 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射(具体地址分配参考芯片数据手册及中文参考手册)。 二、寄存器及...
  • 就是容量和地址寄存器。MAR的位数以及数据寄存器MDR的位数的关系。 总的容量等于2的mar位数的n次方乘以mdr的位数 因为地址寄存器n位二进制代码。可以表示的地址单元的个数是二的n次方。这里就是我...
  • 【STM32】MDK中寄存器地址名称映射分析

    万次阅读 多人点赞 2018-04-04 18:11:07
    对于MCU,一切底层配置,最终都是在配置寄存器。 STM32F1xx官方资料: ...下面看看它是怎么把名字和寄存器联系在一起的: sfr p0=0x80; p0=0x00; sfr是一种扩充数据类型,点用一个内存单位,值域为0-255....
  • 汇编语言之寄存器内存访问)

    万次阅读 2016-10-30 23:24:41
    CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086CPU中,内存地址由段地址和偏移地址组成, 其中,段地址存放在段寄存器DS中,DS称作数据段寄存器。 如果我们要将内存地址为14A70的内存单元中的...
  • 寄存器地址rs485设备地址的区别

    千次阅读 2019-08-09 15:49:31
    rs485设备地址是可以更改的,...寄存器地址寄存器内存上面,暂时存储数据 地址 指令的;寄存器本身有地址也称之为内存地址寄存器地址是不能改变的,他时控制系统内核潜制进去的,用户只用使用权,不可更改 ...
  • 内存寄存器、GPIO地址、存储器之间的关系1、如上图,0x0000 0000表示第一个地址字节,代码使用这个16进制时,指针会指向这个物理地址,对4字节的GPIO控制单元来说,这4个字节的物理地址就叫寄存器,当我们把IO口...
  • 寄存器、存储器、内存的区别

    千次阅读 2019-06-15 16:54:29
    从范围来看,它们所指的范畴不一样。 寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据位址。在中央处理器的控制部件...寄存器内存,都是存储器里...
  • 芯片:stm32f103zet6 1、存储单元一般应具有存储数据读写数据的功能...内存地址需要4位 3、基址也就是基础地址,最开始的地址,这个查看芯片手册,是人家规定的。 4、偏移,即偏移地址,一般是正整数,也是增加...
  • 单片机有寄存器和内存内存就是RAM、ROM/FLASH,这里的内存的概念电脑的不太一样,不要搞混,眼着于单片机即可。 ROM/FLASH:程序存储区(只读存储器),不变的东西都存这俩里头,并且存里头的东西只读。 RAM:...
  • 单片机外设(ram、寄存器)地址详解

    千次阅读 2020-01-05 13:01:13
    在学习汇编语言时,我们会接触到一些寄存器,比如R0、R1、还有栈指针寄存器SP、下一条指令寄存器PC 等等。这些寄存器是存在于内核(如CPU)之内的,这些寄存器是我们无法通过c语言访问到的,而只能用汇编语言操作。...
  • 寄存器、缓存、内存之间的区别

    千次阅读 2019-05-02 15:56:46
    在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 缓存就是为了避免数据的多次从一个地方拿到另一个地方,从而在中间通过...
  • CPU中的寄存器和地址概念

    万次阅读 2016-03-17 10:18:12
    但是这个总线是内部总线,而CPU和内存、显卡之类做信息交换的是外部总线。 他们的作用分别是: 运算器:信息处理 寄存器:信息储存 控制器:控制器件 好吧,从名字来看就很容易明白…… 通用寄存器(8086CPU)...
  • 当我输入一个数据的时候,软件就会为我们在内存中开辟一个地址,以往内存表中存放数据,如这里就是往这个地址开始写入数据:0040339C。我们对内存表的高位低位的理解就可以想做这里就是一张白纸。我们把每个空格都...
  • 理解CPU/寄存器/内存之间的关系

    万次阅读 多人点赞 2018-10-08 23:35:35
    CPU/寄存器/内存  因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来。  CPU,全名Central Processing Unit(中央处理器)。这是...
  • 汇编:寄存器内存数据传递

    千次阅读 2019-02-22 16:11:53
    一、单个寄存器内存数据传递 用 str 指令将寄存器中的数据放入到内存中,用 ldr 指令将内存中的数据取出放入寄存器中 .global _start _start: ldr r0,=stack1 ldr r1,=0xffffffff ldr r2,=0x22222222 ...
  • 寄存器:指的是CPU内核里... 物理地址:操作系统会给每一个内存单元编上一个绝对的号,计算机系统就通过这个编号来定为每一个内存单元的物理位置,这个编号称为内存的物理地址 。s3c2440(CPU:ARM920t)是32位操作...
  • 使用它,可以查看CPU各种寄存器中的内容、内存的情况在机器码级跟踪程序的运行。 1.2 将用到的Debug功能 用Debug的R命令查看、改变CPU寄存器的内容 用Debug的D命令查看内存中的内容 用Debug的E命令改写内存中内容...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 284,810
精华内容 113,924
关键字:

寄存器地址和内存地址