精华内容
下载资源
问答
  • 寄存器是一种
    千次阅读
    2020-04-08 23:00:24

    立即寻址方式
    操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。立即数可以是8位、16位或32位,该数值紧跟在操作码之后。

    寄存器寻址方式
    指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。

    直接寻址方式
    指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。如:MOV BX, [1234H]

    寄存器间接寻址方式
    操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。如:MOV BX,[DI]

    寄存器相对寻址方式
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS。如:MOV BX, [SI+100H]

    基址加变址寻址方式
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。如:MOV BX, [BX+SI]。

    相对基址加变址寻址方式
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。如:MOV AX, [BX+SI+200H]。

    更多相关内容
  • 寄存器,寄存器是什么意思

    千次阅读 2021-07-28 06:43:33
    寄存器,寄存器是什么意思寄存器定义寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。...寄存器通常都是以他们可以保存的位元数量来估量,举例来说,个...

    寄存器,寄存器是什么意思

    寄存器定义

    寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

    寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个 “8 位元寄存器”或 “32 位元寄存器”。寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。

    寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为 “架构寄存器”。

    例如,x86 指令集定义八个 32 位元寄存器的集合,但一个实作 x86 指令集的 CPU 可以包含比八个更多的寄存器。

    寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

    特点及原理

    寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点:

    ①寄存器位于CPU内部,数量很少,仅十四个;

    ②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据;

    ③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。

    寄存器的功能十分重要,CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。

    外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的0、1状态反映了外部设备的工作状态或方式;还有一些寄存器中的各个位可对外部设备进行控制;也有一些端口作为CPU同外部设备交换数据的通路。所以说,端口是CPU和外设间的联系桥梁。CPU对端口的访问也是依据端口的“编号”(地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安排了1024个端口地址,端口地址范围为0--3FFH。

    寄存器用途

    1.可将寄存器内的数据执行算术及逻辑运算;

    2.存于寄存器内的地址可用来指向内存的某个位置,即寻址;

    3.可以用来读写数据到电脑的周边设备。

    数据寄存器

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

    (1)通用寄存器有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位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。

    (2) 指令指针IP(Instruction Pointer)

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

    (3)标志寄存器FR(Flag Register)

    8086有一个18位的标志寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。

    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:下列情况下,辅助进位标志AF的值被置为1,否则其值为0:

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

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

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

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

    (4)段寄存器(Segment Register)

    为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:

    CS(Code Segment):代码段寄存器;

    DS(Data Segment):数据段寄存器;

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

    ES(Extra Segment):附加段寄存器。

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

    以上是8086寄存器的整体概况, 自80386开始,PC进入32bit时代,其寻址方式,寄存器大小,功能等都发生了变化。

    =============================以下是80386的寄存器的一些资料======================================

    寄存器都是32-bits宽。

    A、通用寄存器

    下面介绍通用寄存器及其习惯用法。顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。通用寄存器最多的用途是计算。

    EAX:通用寄存器。相对其他寄存器,在进行运算方面比较常用。在保护模式中,也可以作为内存偏移指针(此时,DS作为段 寄存器或选择器)

    EBX:通用寄存器。通常作为内存偏移指针使用(相对于EAX、ECX、EDX),DS是默认的段寄存器或选择器。在保护模式中,同样可以起这个作用。

    ECX:通用寄存器。通常用于特定指令的计数。在保护模式中,也可以作为内存偏移指针(此时,DS作为 寄存器或段选择器)。

    EDX:通用寄存器。在某些运算中作为EAX的溢出寄存器(例如乘、除)。在保护模式中,也可以作为内存偏移指针(此时,DS作为段 寄存器或选择器)。

    同AX分为AH&AL一样,上述寄存器包括对应的16-bit分组和8-bit分组。

    B、用作内存指针的特殊寄存器

    ESI:通常在内存操作指令中作为“源地址指针”使用。当然,ESI可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。

    EDI:通常在内存操作指令中作为“目的地址指针”使用。当然,EDI也可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。

    EBP:这也是一个作为指针的寄存器。通常,它被高级语言编译器用以建造‘堆栈帧'来保存函数或过程的局部变量,不过,还是那句话,你可以在其中保存你希望的任何数据。SS是它的默认段寄存器或选择器。

    注意,这三个寄存器没有对应的8-bit分组。换言之,你可以通过SI、DI、BP作为别名访问他们的低16位,却没有办法直接访问他们的低8位。

    C、段选择器:

    实模式下的段寄存器到保护模式下摇身一变就成了选择器。不同的是,实模式下的“段寄存器”是16-bit的,而保护模式下的选择器是32-bit的。

    CS 代码段,或代码选择器。同IP寄存器(稍后介绍)一同指向当前正在执行的那个地址。处理器执行时从这个寄存器指向的段(实模式)或内存(保护模式)中获取指令。除了跳转或其他分支指令之外,你无法修改这个寄存器的内容。

    DS 数据段,或数据选择器。这个寄存器的低16 bit连同ESI一同指向的指令将要处理的内存。同时,所有的内存操作指令 默认情况下都用它指定操作段(实模式)或内存(作为选择器,在保护模式。这个寄存器可以被装入任意数值,然而在这么做的时候需要小心一些。方法是,首先把数据送给AX,然后再把它从AX传送给DS(当然,也可以通过堆栈来做).

    ES 附加段,或附加选择器。这个寄存器的低16 bit连同EDI一同指向的指令将要处理的内存。同样的,这个寄存器可以被装入任意数值,方法和DS类似。

    FS F段或F选择器(推测F可能是Free?)。可以用这个寄存器作为默认段寄存器或选择器的一个替代品。它可以被装入任何数值,方法和DS类似。

    GS G段或G选择器(G的意义和F一样,没有在Intel的文档中解释)。它和FS几乎完全一样。

    SS 堆栈段或堆栈选择器。这个寄存器的低16 bit连同ESP一同指向下一次堆栈操作(push和pop)所要使用的堆栈地址。这个寄存器也可以被装入任意数值,你可以通过入栈和出栈操作来给他赋值,不过由于堆栈对于很多操作有很重要的意义,因此,不正确的修改有可能造成对堆栈的破坏。

    * 注意 一定不要在初学汇编的阶段把这些寄存器弄混。他们非常重要,而一旦你掌握了他们,你就可以对他们做任意的操作了。段寄存器,或选择器,在没有指定的情况下都是使用默认的那个。这句话在现在看来可能有点稀里糊涂,不过你很快就会在后面知道如何去做。

    指令指针寄存器:

    EIP 这个寄存器非常的重要。这是一个32位宽的寄存器 ,同CS一同指向即将执行的那条指令的地址。不能够直接修改这个寄存器的值,修改它的唯一方法是跳转或分支指令。(CS是默认的段或选择器)

    上面是最基本的寄存器。下面是一些其他的寄存器,你甚至可能没有听说过它们。(都是32位宽):

    CR0, CR2, CR3(控制寄存器)。举一个例子,CR0的作用是切换实模式和保护模式。

    还有其他一些寄存器,D0, D1, D2, D3, D6和D7(调试寄存器)。他们可以作为调试器的硬件支持来设置条件断点。

    TR3, TR4, TR5, TR6 和 TR? 寄存器(测试寄存器)用于某些条件测试。

    寄存器分类

    数据寄存器 - 用来储存整数数字(参考以下的浮点寄存器)。在某些简单/旧的 CPU,特别的数据寄存器是累加器,作为数学计算之用。

    地址寄存器 - 持有存储器地址,以及用来访问存储器。在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。

    通用目的寄存器 (GPRs) - 可以保存数据或地址两者,也就是说他们是结合 数据/地址 寄存器的功用。

    浮点寄存器 (FPRs) - 用来储存浮点数字。

    常数寄存器 - 用来持有只读的数值(例如 0、1、圆周率等等)。

    向量寄存器 - 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据。

    特殊目的寄存器 - 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。

    指令寄存器(instruction register) - 储存现在正在被运行的指令

    索引寄存器(index register) - 是在程序运行实用来更改运算对象地址之用。

    在某些架构下,模式指示寄存器(也称为“机器指示寄存器”)储存和设置跟处理器自己有关的数据。由于他们的意图目的是附加到特定处理器的设计,因此他们并不被预期会成微处理器世代之间保留的标准。

    有关从 随机存取存储器 提取信息的寄存器与CPU(位于不同芯片的储存寄存器集合)

    存储器缓冲寄存器(Memory buffer register)

    存储器数据寄存器(Memory data register)

    存储器地址寄存器(Memory address register)

    存储器型态范围寄存器(Memory Type Range Registers)[1][2]

    寄存器:

    寄存器是计算机和其他数字系统中用来存储代码或数据的逻辑部件。它的主要组成部分是触发器。一个触发器能存储1位二进制代码,所以要存储n位二进制代码的寄存器就需要用n个触发器组成。一个4位的集成寄存器74LS175的逻辑电路图和引脚图分别如图8.7.1(a)、(b)所示。其中,RD是异步清零控制端。在往寄存器中寄存数据或代码之前,必须先将寄存器清零,否则有可能出错。1D~4D 是数据输入端,在CP 脉冲上升沿作用下,1D~4D端的数据被并行地存入寄存器。输出数据可以并行从1Q~4Q 端引出,也可以并行从1Q~4Q 端引出反码输出。

    5dbab668d273ed04a3e15131558d8282.png

    74LS175的功能如表8.7.1所示。

    41ac387e577a99bfc0df96a889c5fe17.png

    上面介绍的寄存器只有寄存数据或代码的功能。有时为了处理数据,需要将寄存器中的各位数据在移位控制信号作用下,依次向高位或向低位移动1位。具有移位功能的寄存器称为移位寄存器。

    展开全文
  • 公司业务需要,用到modbus协议,本质上很简单,只是第次接触,被这些词语搞得云里雾里的。这里整理一下,方便以后... 线圈寄存器:实际上就可以类比为开关量(继电器状态),每个bit对应个信号的开关状态。所以
  • 寄存(锁存)器是一种重要的数字电路部件,常用来暂时存放指令、参与运算的数据或运算结果等。它是数字测量和数字控制中常用的部件,是计算机的主要部件之一。寄存器的主要组成部分是具有记忆功能的双稳态触发器。一...
  • 行业分类-设备装置-一种支持批量读写从机寄存器的主机控制方法
  • 什么是寄存器 寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为...
  • “(GPIOx_BSRR)(x=A...E)”这段的意思是该寄存器名为”GPIOx_BSRR“其中的x可以为”A...E“,也就是说这个寄存器说明适用于GPIOA、GPIOB至GPIOE,这些端口都有这样寄存器。 2、偏移地址 偏移地址是指本寄存器...

    目录

    STM32芯片里面有什么

    一、驱动单元

    1、ICode总线

    2、DCode总线

    3、系统总线

    4、DMA总线

    二、被动单元

    1、内部的闪存存储器

    2、内部的SRAM

    3、FSMC

    4、AHB到APB的桥

    三、STM32的外设基地址映射

    1、总线基地址

    2、外设基地址

    3、外设寄存器


    STM32芯片里面有什么

    我们看到的STM32芯片是已经封装好阿成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU和主板、内存、显卡、硬盘的关系。

    STM32F103采用的是Cortex-M3内核,内核即CPU,由ARM公司设计,ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)、I2C、SPI等都叫片上外设。具体见下图STM32芯片架构简图。

     芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元4个,被动单元也有4个。为了方便理解,我们都可以把驱动单元理解成是CPU部分,被动单元都理解外设。

    一、驱动单元

    1、ICode总线

    ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH中,内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指令的。

    2、DCode总线

    DCode总线中的D表示Data,即数据,那说明这条总线是用来取数据的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C语言中的const来修饰的,是放到FLASH当中的,变量是可变的,不管是全局变量还是局部变量都存放在内部的SRAM中。因为数据可以被DCode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

    3、系统总线

    系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这跟系统总线来完成的。

    4、DMA总线

    DMA总线也主要是用来,传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。因为数据可以被DCode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

    二、被动单元

    1、内部的闪存存储器

    内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode总线来取里面的指令。

    2、内部的SRAM

    内部的SRAM,即我们通常常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode总线来访问它。

    3、FSMC

    FSMC的英文全称是Flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM、NAND-FLASH和NORFLASH。但我们有一点要注意的是,FSMC只能扩展静态的内存,即名称里面的static,不能是动态的内存,比如SDRAM就不能扩展。

    4、AHB到APB的桥

    从AHB总线延伸出来的两条APB2和APB1总线,上面挂载着STM32的各种各样的外设。我们经常说的GPIO、串口、I2C、SPI这些外设就挂载在这两条总线上,这个是我们学习STM32的重点,就是要学会编程这些外设的驱动外部的各种设备。

     存储器映射

    存储器本身具备有地址信息,它的地址是由芯片厂商或由用户分配,给存储器分配地址的过程就称为存储器映射,具体可见下面的存储器映射。如果给存储器再分配一个地址就叫存储器重映射。

     存储器区域功能划分

    在这4GB地址的空间内,ARM已经粗线条的平均分成了8个块,每块512MB,每个块也都规定了用途,具体分类见表格存储器功能分类。每个块的大小都有512MB,显然这是一块非常大的区域,芯片厂商在每个块的范围内设计各具特色的外设时并不一定用得完,都是只用了其中一部分。

    序号                用途        地址范围
    Block0Code0x0000 0000~0x1FFF FFFF(512MB)
    Block1SRAM0x2000 0000~0x3FFF FFFF(512MB)
    Block2片上外设       0x4000 0000~0x5FFF FFFF(512MB)
    Block3FSMC的bank1~bank20x6000 0000~0x7FFF FFFF(512MB)
    Block4FSMC的bank3~bank40x8000 0000~0x9FFF FFFF(512MB)
    Block5FSMC寄存器               0xA000 0000~0xCFFF FFFF(512MB)
    Block6没有使用                0xD000 0000~0xDFFF FFFF(512MB)
    Block7Cortex-M3内部外设0xE000 0000~0xFFFF FFFF(512MB)

    在这8个块里面有三个块非常重要,Block0用来设计内部FLASH,Block1用来设计内部RAM,Block2用来设计成片上的外设。

    寄存器映射

    寄存器映射:给已经分配好地址的具有特定功能的内存单元取别名的过程就叫寄存器映射。

    比如,我们先找到GPIOB的端口的输出数据寄存器ODR的地址是0x40010C0C,ODR寄存器是32位的,低16位有效,对应着16个外部IO,写0/1对应的IO输出对应的低/高电平。

    //GPIO端口全部输出高电平
    *(unsigned int*) (0x40010C0C) = 0xFFFF;
    0x40010C0C在我们看来是GPIOB的端口的ODR地址,但是在编译器看来,
    这只是一个普通的变量,是一个立即数,要想让编译器也认为是指针,
    我们得进行强制类型转换,把它转换成指针,即(unsigned int*)0x40010C0C,
    然后对这个地址进行*操作。
    通过寄存器别名的方式访问内存单元
    //GPIOB端口全部输出高电平
    #define GPIOB_ODR    (unsigned int*)(GPIOB_BASE + 0x0C)
    *GPIOB_ODR = 0xFF;
    为了方便操作,直接把指针操作"*"也定义到寄存器别名中。
    //GPIOB端口全部输出高电平
    #define GPIOB_ODR    *(unsigned int*)(GPIOB_BASE + 0x0C)
    GPIOB_ODR = 0xFF;

    三、STM32的外设基地址映射

    片上外设区分三条总线,根据外设速度的不同,不同总线挂在着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。相应的总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中APB1总线的地址最低,片上外设从这里开始,也叫外设基地址。

    1、总线基地址

    总线名称总线基地址相对外设基地址的偏移
    APB10x4000 0000      0x0
    APB20x4001 00000x0001 0000
    AHB0x4001 80000x0001 8000

    表格总线基地址的“相对外设基地址偏移”即该总线地址与“片上外设”基地址0x4000 0000的差值。

    2、外设基地址

    总线上挂载着各种外设,这些外设也有自己的地址范围,特定外设的收个地址“称为XX外设基地址”,也叫XX外设的边界地址。具体有关的STM32F10xx外设的边界地址可以参考具体的存储器映射的表。

    这里以GPIO这个外设来讲解外设的基地址,GPIO属于高速的外设,挂载到APB2总线上。

    外设名称外设基地址相对APB2总线的地址偏移
    GPIOA0x4001 0800       

    0x0000 0800

    GPIOB0x4001 0C00 0x0000 0C00
    GPIOC0x4001 10000x0000 1000
    GPIOD0x4001 14000x0000 1400
    GPIOE0x4001 18000x0000 1800
    GPIOF0x4001 1C000x0000 1C00
    GPIOG0x4001 20000x0000 2000

    3、外设寄存器

    在XX外设的地址范围内,分布着的就是该外设的寄存器。以GPIO外设为例,GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,基本功能是控制引脚输出高低电平。

    GPIO有很多个寄存器,每一个都有特定的功能。每个寄存器为32bit,占4个字节,在改外设的基地址上按照顺序排列,寄存器的位置都以相对该外设基地址的偏移地址来描述。这里我们以GPIOB端口为例,来说明GPIO都有哪些寄存器,具体见表格GPIOB端口的寄存器地址列表。

    寄存器名称寄存器地址相对GPIOB基址的偏移
    GPIOB_CRL0x4001 0C000x00
    GPIOB_CRH0x4001 0C040x04
    GPIOB_IDR0x4001 0C080x08
    GPIOB_ODR0x4001 0C0C0x0C
    GPIOB_BSRR0x4001 0C100x10
    GPIOB_BRR0x4001 0C140x14
    GPIOB_LCKR0x4001 0C180x18

    这里我们以“GPIO端口置位/复位寄存器为例”,教大家如何理解寄存器的说明,具体见GPIO端口置位_复位寄存器说明。

    1、名称

    寄存器说明中首先列出了该寄存器中的名称,“(GPIOx_BSRR)(x=A...E)”这段的意思是该寄存器名为”GPIOx_BSRR“其中的x可以为”A...E“,也就是说这个寄存器说明适用于GPIOA、GPIOB至GPIOE,这些端口都有这样一个寄存器。

    2、偏移地址

    偏移地址是指本寄存器相对于这个外设的基地址的偏移。本寄存器的偏移地址是0x10,从手册可以查到GPIOA这个外设的基地址为0x4001 0800,我们就可以算出GPIOA这个GPIOA_BSRR寄存器地址为:0x4001 0800+0x10。

    3、寄存器位表

    紧接着的就是本寄存器的位表,表中列出了0-31位的名称及权限。表上方的数字为位编号,中间为位名称,最下方为读写权限,其中w表示只写,r表示只读,rw表示可读写。本寄存器中的位权限都是w,所以只能写,如果读本寄存器,是无法保证读取到它真正内容的。而有的寄存器位只读,一般是用于STM32外设的某种工作状态的,由STM32硬件自动生效,程序通过读取那些寄存器位来判断外设的工作状态。

    4、位功能说明

    位功能是寄存器说明中最重要的部分,它详细介绍了寄存器每一个位的功能。这里不再详细讲解。

    展开全文
  • 同时,在每一种特权模式下都有一组SP、I-R和SPSR。  图1说明了Thumb状态下的寄存器组织。  在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序受限制地访问这些寄存器,将其...
  • STM32新手入门-什么是寄存器

    万次阅读 多人点赞 2022-03-28 17:01:21
    这里我们按照地址偏移顺序看几个寄存器,理解寄存器的说明,具体见图 这里我就不一 列举了,所有的外设基本都有自己的寄存器只不过功能不同名字不同都是按照此模式来排列 四.C语言对寄存器的封装 上面方式还不够...

    ✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
    📃个人主页:@rivencode的个人主页
    🔥系列专栏:玩转STM32
    💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习

    一.前言

    俗话说得好地基不牢地动山摇,要想学好单片机必须要非常熟悉底原理,毕竟我们这是底层开发所以接触到越底层越好,能让我们知道每一句代码在做什么,单片机的本质其实就是在操作寄存器,让单片机完成我们想要的动作例如点亮一个LED灯,stm32的库函数开发也不例外它只不过是将操作寄存器封装成一个个函数,我们只要配置指定函数的参数,再调用该函数自动把对应的寄存器配置好,其实本质还是操作寄存器,更加方便快捷,如果你只学库函数的话后期就有种空中阁楼的感觉,知其然不知其所以然。

    总结:寄存器必须要学,如果前期学的有点困难,可以学一段时间库函数在返回看寄存器会好很多;

    二.STM32的系统架构

    STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的 CPU 与主板、内存、显卡、硬盘的关系。

    下面这张stm32系统结构的图非常重要,我们要理解stm32如何运作,以及各个外设挂载在哪条总线上,而我们主要学习的是挂载在 AHB系统总线上的外设

    在这里插入图片描述

    1.四个驱动单元(CUP)

    • Cortex™-M3内核DCode总线
    • Cortex™-M3内核系统总线System
    • 通用DMA1
    • 通用DMA2

    2.四个被动单元(外设)

    • 内部SRAM
    • 内部闪存存储器FLASH
    • FSMC
    • AHB到APB的桥,它连接所有的APB外设

    3.驱动单元

    • ICode 总线

    ICode 中的 I 表示 Instruction,即指令。内核通过ICode 总线读取内部FLASH代码指令来执行程序.

    • DCode 总线

    DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。因为数据可以被 Dcode 总线和 DMA 总线访问(向flash,SRAM,或外设数据寄存器里面取数据),所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数,取到的数据可以暂存在Cortex™-M3内核里面的寄存器在进行处理。

    • 系统总线System

    系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。

    • DMA 总线

    DMA 总线与DCode总线一样主要是用来传输数据,但Dcode总线传输数据要占用内核(cpu)的资源,而DMA总线相当于独立于内核cpu但帮助内核cpu传输数据而不用占用内核(cpu)的资源,就是在DMA传输数据的同时内核cpu可以干别的事情比如点亮一个LED灯

    • 总线矩阵

    总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。因为数据可以被 Dcode 总线和 DMA 总线访问,数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的 FLASH。所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数

    4. 被动单元

    • 内部FLASH

    简单介绍在flash存储内容:我们写好的程序编译之后都是一条条指令(二进制代码),存放在 FLASH 中,我们常量或常变量C 语言中的 const 关键字修饰也存放在FLASH

    • 内部SRAM

    就是我们常说的电脑内存条,程序函数内部的局部变量和全局变量,堆(malloc分配)栈(局部变量)等的开销都是基于内部的SRAM。内核通过 DCode 总线来访问它

    • FSMC

    FSMC 的英文全称是 Flexible static memory controller,叫灵活的静的存储器控制器,是 STM32F10xx 中一个很有特色的外设通过FSMC我们可以扩展内存,如外部的SRAM,NANDFLASH 和 NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的 S:static,不能是动态的内存,比如 SDRAM 就不能扩展。

    • AHB 到 APB 的桥

    两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz),上面挂载着 STM32 各种各样的特色外设。我们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习 STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。

    三.存储器映射

    存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,如果给存储器再分配一个地址就叫存储器重映射。

    程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节

    1. STM32的存储空间

    上面说的4GB但为什么是4GB,存储空间的大小是由芯片内CPU内的地址总线的数量来决定,而stm32芯片内部的总线为32根
    内存被划分为一个个的内存单元,每个内存单元的大小是一个字节,为了能有效的访问到内存的每个单元就给内存单元进行编号,编号就被称为该内存单元的地址

    怎样产生地址
    32根地址线每根线 可以输出正电和负电(1 或 0)
    在这里插入图片描述

    分配好地址后,被控单元的 FLASH,RAM,FSMC 和 AHB 到 APB 的桥(即片上外设),这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们( C语言里的将地址解引用操作 * 取出内容对他们进行数据的读和写)。
    在这里插入图片描述

    2. 存储器区域功能划分

    在这 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个块也都规定了用途每个块的大小都有512MB,显然这是非常大的,
    在这里插入图片描述
    在这 8 个 Block 里面,有 3 个块非常重要,也是我们最关心的三个块。Block0 用来设计成内部 FLASH,Block1 用来设计成内部 RAM,Block2 用来设计成片上的外设,下面我们简单的介绍下这三个 Block 里面的具体区域的功能划分。

    • 存储器 Block0 内部区域功能划分

    在这里插入图片描述

    • 储存器 Block1 内部区域功能划分

    在这里插入图片描述

    • 储存器 Block2 内部区域功能划分

    Block2 用于设计片内的外设,根据外设的总线速度不同,Block 被分成了 APB 和 AHB两部分,其中 APB 又被分为 APB1 和 APB2
    在这里插入图片描述
    解释一下预留地址,这些地址没有给他分配存储单元,理论是4GB但实际并没有这么多,只是给了你指标而并没有全用

    三.什么是寄存器

    1. 寄存器映射

    在存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式 (既然一个单元是四个字节那我们就用一次取四个字节的指针(int * )来操作这些功能单元) 来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射

    2. 什么是寄存器

    寄存器:给特定功能的的单元取的别名这个别名就叫做寄存器,所以寄存器只是特定功能的的单元的名字而已

    比如,我们找到 GPIOB 端口的输出数据寄存器 ODR 的地址是 0x4001 0C0C(至于这个地址如何找到可以先跳过,后面我们会有详细的讲解),ODR 寄存器(就是4字节的功能单元)是 32bit,低 16bit有效,对应着 16 个外部 IO,写 0/1 对应的的 IO 则输出低/高电平。现在我们通过 C 语言指针的操作方式,让 GPIOB 的 16 个 IO 都输出高电平,具体见。
    在这里插入图片描述

    3. 如何给功能单元取个别名(寄存器)

    我们利用C语言的#define 定义一个寄存器标识符

    在这里插入图片描述
    这样再操作一个功能单元就简单多了,而且更容易理解
    在这里插入图片描述
    接下来就是层层套娃找到GPIOB端口的所有功能单元地址,将他们分不同的功能改个别名变成寄存器,以后直接操作对应的寄存器就OK啦。

    4. STM32的外设地址映射

    片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,也叫外设基地址。
    在这里插入图片描述

    在这里插入图片描述
    列出了所用STM32F10xxx中内置外设的起始地址。

    在这里插入图片描述在这里插入图片描述
    这里我截取一段教你们这么找总线基地址,外设基地址。
    请添加图片描述

    看上图就能一 一找到下面各个总线或各个外设的基地址

    • 总线基地址
      在这里插入图片描述
      相对外设基地址偏移”即该总线地址与“片上外设”基地址 0x4000 0000的差值。

    • 外设基地址
      总线上挂载着各种外设,这些外设也有自己的地址范围,特定外设的首个地址称为“XX 外设基地址”。
      这里以GPIO为例其他外设是一样的操作
      在这里插入图片描述
      这里相对APB2总线的地址偏移,外设基地址减去APB2总线基地址0X4001 0000 就是相对APB2总线的地址偏移,因为GPIO端口全是挂载在APB2总线。

    • 外设寄存器

    • 在 XX 外设的地址范围内,分布着的就是该外设的寄存器。以 GPIO 外设为例, - GPIO(general purpose input output)是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚 ,基本功能是控制引脚输出高电平或者低电平。最简单的应用就是把 GPIO 的引脚连接到 LED 灯的阴极,LED 灯的阳极接电源,然后通过 STM32 控制该引脚的电平,从而实现控制 LED 灯的亮灭。
      在这里插入图片描述
      这里我们以 GPIOB 端口为例,来说明 GPIO 都有哪些寄存器.
      在这里插入图片描述

    GPIO 有很多个寄存器,每一个都有特定的功能。每个寄存器32bit,占四个字节,在该外设的基地址上按照顺序排列,寄存器的位置都以相对该外设基地址的偏移地址来描述。

    各个寄存器的地址=外设基地址+寄存器相对于外设基地址的偏移

    这里我们按照地址偏移顺序看几个寄存器,理解寄存器的说明,具体见图
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    这里我就不一 一列举了,所有的外设基本都有自己的寄存器只不过功能不同名字不同都是按照此种模式来排列

    四.C语言对寄存器的封装

    上面方式还不够方便,接下来经过层层套娃,找到各个外设寄存器的地址再用C语言的结构体进行封装

    1. 封装总线和外设基地址

    在编程上为了方便理解和记忆,我们把总线基地址和外设基地址都以相应的宏定义起,总线或者外设都以他们的名字作为宏名
    在这里插入图片描述

    2. 封装寄存器列表

    各个寄存器的地址=外设基地址+寄存器相对于外设基地址的偏移
    在这里插入图片描述
    到这里大家有没有发现一个特点寄存器的地址每次偏移4,如果定义一个寄存器的类型为(unsigned int)是不是正好在内存中占4个字节,而一个内存单元就是1个字节,分配一个地址,那4个字节不正好每次偏移4个地址,而且有符合结构体的内存对齐,关于结构体的内存对齐这里不细讲,以后会出有关结构体的文章详细阐述。
    在这里插入图片描述
    把寄存器封装成结构体后,接下来就是取出寄存器对寄存器进行操作以GPIOA为例,我们将GPIOA外设的基地址强制类型转化为该结构体的首地址不就完美解决了嘛
    在这里插入图片描述
    我们定义的这个 GPIO_TypeDef ,这个结构体的首地址就为 0x4001 0800(这也是第一个成员变量 CRL 的地址), 那么结构体中第二个成员变量 CRH 的地址即为 0x4001 0800 +0x04 ,加上的这个 0x04 ,正是代表 CRL 所占用的 4 个字节地址的偏移量,其它成员变量相对于结构体首地址的偏移

    3. 操作寄存器

    最后我们就可以直接使用宏定义好 GPIO_TypeDef 类型的指针,而且指针指向各个 GPIO 端口的首地址,使用时我们直接用GPIOA这个指针对结构体成员寄存器进行访问
    在这里插入图片描述

    五.总结

    相信你读完此文已经大概知道什么叫寄存器,以及学好寄存器的重要性,详细分析GPIO的八种工作模式已出—>STM32-GPIO八种工作模式,手把手教让你变成点灯大师,如果觉得本文对你有帮助就快快点赞收藏叭!!!

    结束语:
    最近发现一款刷题神器,如果大家想提升编程水平,玩转C语言指针,还有常见的数据结构(最重要的是链表和队列)后面嵌入式学习操作系统的时如freerots、RT-Thread等操作系统,链表与队列知识大量使用。
    大家可以点击下面连接进入牛客网刷题

    点击跳转进入网站(C语言方向)
    点击跳转进入网站(数据结构算法方向)

    在这里插入图片描述

    展开全文
  • 寄存器

    千次阅读 2021-01-15 12:46:20
    、段寄存器有哪些 ? 段寄存器有ES、CS、SS、DS、FS、GS、LDTR、TR共8个。 通常我们用汇编读写某个地址时,如下: Mov dword ptr ds:[0x123846],eax 这时我们把eax 的值往地址去写,写的地址是: ds.base +...
  • 寄存器模型

    千次阅读 2022-03-27 16:44:27
    UVM中寄存器模型的一些概念。
  • 实验六 移位寄存器及其应用

    万次阅读 多人点赞 2021-05-20 20:37:58
    一、预习要求 1、复习有关寄存器的内容,弄懂移位寄存器工作的基本原理。...寄存器一种用于寄存在二进制数码或指令的时序逻辑部件,它被广泛地应用于各类数字系统和数字计算机中。其功能是在时钟脉冲的作用
  • CPU和寄存器详解

    千次阅读 多人点赞 2022-01-21 18:59:04
    通常,每一种类型的CPU都有它自己唯一的机器语言。这是为什么为Mac写的程序不能在IBM类型PC机运行的一个原因。 电脑通过使用时钟来同步指令的执行。时钟脉冲在一个固定的频率(称为时钟频率)。当你买了一台1.5GHz...
  • 寄存(锁存)器是一种重要的数字电路部件,常用来暂时存放指令、参与运算的数据或运算结果等。它是数字测量和数字控制中常用的部件,是计算机的主要部件之一。寄存器的主要组成部分是具有记忆功能的双稳态触发器。一...
  • 一种寄存器操作指定位翻转方法

    千次阅读 2018-05-29 20:47:43
    平时开发中会经常遇到,以平时开发中遇到的LED为例,如果要实现指定的LED翻转时,其它的LED状态不变,那么就要操作寄存器对指定位进行翻转,下面是笔者采用的一种方法,可以提供各位借鉴,如有更好的方法可以留言,...
  • PC寄存器

    千次阅读 2020-10-07 13:13:56
    一、概述 JVM中的程序计数寄存器(Program Counter Register)中,Register...JVM中的PC寄存器是对物理PC寄存器一种抽象模拟,是一种软件层面的概念。 二、作用 PC寄存器用来存储下一条指令的地址,也即将要执行的
  • 标志寄存器

    千次阅读 2021-07-22 19:58:00
    CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有以下3种作用, 用来存储相关指令的某些执行结果 用来为CPU执行相关指令提供行为依据 用来控制CPU的相关工作方式 这种特殊的...
  • 各个寄存器作用

    千次阅读 2021-10-28 09:08:53
    在此记录下寄存器的名称及作用,方便查看。 不同体系下寄存器名称: |63…32|31…16|15-8|7-0| |AH…AL…| |AX......| |EAX…| |RAX…| 不同寄存器作用: rax 作为函数返回值使用 rsp 栈指针寄存器,指向栈顶 rdi...
  • 寄存器

    千次阅读 2019-05-16 18:21:01
    PC寄存器中的内容,是下条要取的指令的16位存储单元地址,在程序执行的过程中,PC中的值会自动加一。 程序员不可见: 存储器地址寄存器(MAR) 存储操作数在内存中的地址。 存储器数据寄存器(MDR) 存放...
  • 文章目录、通用寄存器(GPR)二、EFLAGS寄存器(标志寄存器)三、指令指针寄存器(EIP)四、段寄存器(Segment Register) 通用寄存器(General Purpose Registers,32位,8个) 段寄存器(Segment Registers,16...
  • STM32寄存器的简介、地址查找,与直接操作寄存器

    万次阅读 多人点赞 2019-01-11 11:15:15
    什么是寄存器 提到单片机,就不得不提到寄存器。根据百度百科介绍,寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,... 存放数据的寄存器是最好理解的,如果你需要读取个数据,直接到这个...
  • Linux详解寄存器

    千次阅读 2022-04-19 22:03:39
    操作系统的设计者必须在硬件相关的代码与硬件无关的代码之间划出清楚的界限,以便将个操作系统很容易地移植到不同的平台。 在X86系列中,8086和8088是16位的处理器,而从80386开始为 32 位处理器。这种变化看起来...
  • 部分 寄存器

    千次阅读 2021-03-02 22:36:52
    个CPU是由运算器、寄存器、控制器、内部总线组成。那么,为什么汇编语言要学习寄存器呢? 肯定和它的作用有关,寄存器是用来存储信息。重要的是,它是程序员可以用指令读写的部件,方式呢就是通过改变各种寄存器...
  • ARM寄存器

    千次阅读 2022-03-30 09:09:31
    文章目录前言、ARM架构简介二、ARM 寄存器组介绍1.引入库2.读入数据总结 前言 arm学习笔记 提示:本人自己整理笔记仅供参考 、ARM架构简介 ARM架构过去称作进阶精简指令集机器,是个32位精简指令集(RISC)...
  • MIPS 寄存器

    千次阅读 2021-12-26 09:27:15
    因为寄存器的存取可以在个时钟周期内完成,同时简化了寻找方式,所以,MIPS的指令中除了加载/存储指令以外,都使用寄存器或者立即数作为操作数,以便让编译器通过保持对寄存器内数据的频繁存取进一步优化代码的...
  • STM32 应该可以理解为 意法半导体微电子企业的个 32 位处理器内核的产品系列。 引用段话: 在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32 1、基本型系列 2、增强型系列 3、USB基本...
  • 寄存器和内存的区别

    千次阅读 2021-07-28 11:04:02
    寄存器和内存的区别1、寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器...
  • 寄存器的作用

    千次阅读 2021-07-28 07:23:41
    [From]AX/EAX: 累加器,算术通用寄存器,与端口的通讯也用这个寄存器.BX/EBX: 基址寄存器.CX/ECX: 计数器,结合串处理指令使用.DX/EDX: 算术通用寄存器.和累加器结合表示双字长的数,其中累加器用于存低位数.[From]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 341,093
精华内容 136,437
关键字:

寄存器是一种