精华内容
下载资源
问答
  • 微机是由主机和什么组成
    千次阅读
    2021-06-28 04:33:46

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。

    微型计算机的主机由CPU和内存储器构成,微型计算机是基于冯诺依曼式结构设计的。CPU包括控制器和运算器,内存储器包括RAM和ROM。

    中央处理器(Central Processing Unit),简称CPU,是1971年推出的一个计算机的运算核心和控制核心,是信息处理、程序运行的最终执行单元。CPU包含运算逻辑部件、寄存器部件和控制部件等,并具有处理指令、执行操作、控制时间、处理数据等功能。其自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。寄存器部件,包括通用寄存器、专用寄存器和控制寄存器。通用寄存器又可分定点数和浮点数两类,它们用来保存指令执行过程中临时存放的寄存器操作数和中间(或最终)的操作结果。通用寄存器是中央处理器的重要组成部分,大多数指令都要访问到通用寄存器。通用寄存器的宽度决定计算机内部的数据通路宽度,其端口数目往往可影响内部操作的并行性。

    内存又称为内存储器,通常也泛称为主存储器,是计算机中的主要部件,它是相对于外存而言的。内存储器是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存储器中进行的,因此内存储器的性能对计算机的影响非常大。内存储器(Memory)也被称为内存,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

    更多相关内容
  • 本文主要讲了寄存器什么的重要组成部分,下面一起来学习一下
  • 寄存器,寄存器什么意思

    千次阅读 2021-07-28 06:43:33
    寄存器,寄存器什么意思寄存器定义寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)程序计数器...

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

    寄存器定义

    寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(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位。具有移位功能的寄存器称为移位寄存器。

    展开全文
  • 单片机内部有大量寄存器寄存器是一种能够存储数据的电路,触发器构成。    (1)触发器  触发器是一种具有记忆存储功能的电路,门电路组成。常见的触发器包括:RS 触发器、D 触发器 JK触发器等...
  • 什么寄存器 寄存器,是集成电路中非常重要的一种存储单元,通常触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为...
  • 我们看到的STM32芯片是已经封装好阿成品,主要内核片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU主板、内存、显卡、硬盘的关系。 STM32F103采用的是Cortex-M3内核,内核即CPU,ARM公司设计,...

    目录

    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、位功能说明

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

    展开全文
  • 计算机组成原理实验 MIPS 寄存器堆 logisim
  • 实验一 寄存器A,W实验 一、实验要求 利用COP2000实验仪上的K16..K23开关做为DBUS的数据,其它开关做为控制信号,将数据写入寄存器,这些寄存器包括累加器A,...了解模型机中AW寄存器结构、工作原理及其控制方法。
  • 什么是段寄存器,数据寄存器

    千次阅读 2020-04-01 12:18:19
    寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。 2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边...

    https://zhidao.baidu.com/question/2114222516098572027.html

     

    寄存器(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位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

     

    在汇编语言中,堆栈操作的最小单位是字,也就是说,只能以字或双字为单位。

    SS:SP指向栈顶(SS为堆栈段寄存器,SP为堆栈指针,二者一相加,就构成了堆栈栈顶的内存地址)。

    https://blog.csdn.net/andrewniu/article/details/80566277

    CS、IP和PC寄存器
    https://www.cnblogs.com/zhuge2018/p/8466288.html
     

    https://www.cnblogs.com/Erma/p/9737351.html

    展开全文
  • 1. 寄存器 在实际的数字系统中,通常把能够用来存储...由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n......
  • STM32新手入门-什么寄存器

    千次阅读 多人点赞 2022-03-28 17:01:21
    STM32的存储空间 上面说的4GB但为什么是4GB,存储空间的大小是由芯片内CPU内的地址总线的数量来决定,而stm32芯片内部的总线为32根 内存被划分为一个个的内存单元,每个内存单元的大小是一个字节,为了能有效的访问...
  • 画出用74ls194a组成16位双向移位寄存器 从逻辑结构上看,移位寄存器有以下两个显著特征:(1)移位寄存器是由相同的寄存单元所组成。一般说来,寄存单元的个数就是移位寄存器的位数。为了完成不同的移位功能,每个寄存...
  • 从结构DPTR是一个16位的特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。主要功能是存放16位地址,作为片外...
  • 移位寄存器

    2020-12-09 01:57:52
    一、特点分类 从逻辑结构上看,移位寄存器有以下两个显著特征:(1)移位寄存器是由相同的寄存单元所组成。一般说来,寄存单元的个数就是移位寄存器的位数。为了完成不同的移位功能,每个寄存单元的输出与其相邻的...
  • 满意答案puiohwqy42013.03.28采纳率:43%等级:12已帮助:7406人一、CPU的内核从结构上讲CPU内核分为两部分:运算器控制器。(一) 运算器1、 算术逻辑运算单元ALU(Arithmetic and Logic Unit)ALU主要完成对二进制...
  • 寄存器

    千次阅读 2018-08-08 18:37:35
    1.寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)程序计数器(PC)。在中央处理器的算术及逻辑...
  • 总览汇编寄存器,方便记忆复习。寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度是最快的,不需要IO传输, 但同时也决定了此类寄存器数量非常有限,有限到几乎每个存储都有自己的名字,而且有些还有多...
  • CPU和寄存器详解

    千次阅读 多人点赞 2022-01-21 18:59:04
    这是为什么为Mac写的程序不能在IBM类型PC机运行的一个原因。 电脑通过使用时钟来同步指令的执行。时钟脉冲在一个固定的频率(称为时钟频率)。当你买了一台1.5GHz的电脑,1.5GHz就是时钟频率,即每秒15亿次的时钟...
  • arm专利:在寄存器和存储器之间移动数据的数据处理设备方法
  • 寄存器什么什么作用

    千次阅读 2016-11-16 10:32:41
    寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。 寄存器的用途: 1.可将寄存器内的数据执行算术及逻辑运算。 2.存于寄存器内的地址可用来指向内存的某个位置,即...
  • 什么是运算器_运算器由什么组成

    千次阅读 2021-07-25 06:45:39
    运算器算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存器组等组成。算术逻辑运算单元(ALU)的基本功能为加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、求补等操作。计算机运行时,运算器的操作...
  • 寄存器和内存的区别

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

    万次阅读 多人点赞 2018-04-12 12:43:48
    它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核双内核以及微内核。严格地说,内核并不是计算机...
  • 1. 学习使用Verilog HDL语言进行时序电路的设计方法 2. 掌握灵活运用Verilog HDL语言进行行为级语言描述的技巧方法; 3. 学习寄存器堆的数据传送读写工作原理,掌握寄存器堆的设计方法.
  • 一、什么寄存器   STM32编程通常有两种编程方法,一种是寄存器编程;另一种是固件库编程,其中寄存器编程是基础,而固件库编程是在寄存器编程的基础上升级而来的一种易于学习开发的方法,是学习STM32编程时需...
  • w5500寄存器使用说明

    2018-03-25 20:24:02
    w5500以太网模块,这个模块本身集成了tcp/ip协议,mcu只需要通过spi协议读写他的寄存器就可以进行数据交互了。此文档有助于w5500的底层开发。
  • 用D触发器74LS74组成的移位寄存器实验电路multisim源文件,multisim10及以上版本可以正常打开仿真,是教材上的电路,可以直接仿真,方便大家学习。
  • 华中科技大学计算机组成原理实验(完整)+代码参考---自己写的 1.了解寄 MIPS 寄存器文件基本概念 2.进一步熟悉多路选择器、译码器、解复用器等 Logisim 组件的使用 3.利用相关组件构建 MIPS 寄存器文件
  • 移位寄存器及其应用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,272
精华内容 67,308
关键字:

寄存器是由什么和什么组成的