精华内容
下载资源
问答
  • 本文主要对移位寄存器工作原理及其应用进行了说明,一起来学习一下
  • 一、移位寄存器工作原理及代码分析(以MAX7219芯片为例) 首先要明白DIN管脚的含义,其为串行数据输入端口,在时钟上升沿时数据被载入内部的 16 位寄存器。 而CLK即为时钟序列输入端,所以当要输入数据时,先得把...

    一、基于MAX7219移位寄存器工作原理及代码分析

    该图为芯片功能图表
    首先要明白DIN管脚的含义,其为串行数据输入端口,在时钟上升沿时数据被载入内部的 16 位寄存器。 而CLK即为时钟序列输入端,所以当要输入数据时,先得把CLK脚的电位拉低,输入一位数据后,再把CLK的电位拉高,此时则产生了一个时钟上升沿,使数据被载入,此时用代码表示为(注意:通过时序图可知,CS为低电平时串行数据才会被载入移位寄存器,为高电平时会被锁存。):

    void Write_Max7219_byte()         
    { 
                 Max7219_CS=0;     //CS=0有效,CS=1锁存  
                Max7219_CLK=0;
                Max7219_DIN=0;
                Max7219_CLK=1;    //通过上升沿把数据送出去,即一个0——1的跳变
                Max7219_CLK=0;
                Max7219_DIN=1;
                Max7219_CLK=1; 
                Max7219_CLK=0;
                Max7219_DIN=0;
                Max7219_CLK=1; 
                Max7219_CLK=0;
                Max7219_DIN=1;
                Max7219_CLK=1; 
               }
    

    这时会发现,在一个时钟上升沿只能传一位数据,如果想传8位甚至更多数据时,需要多次重复时钟上升的过程,特别繁琐,通过以上代码会发现一个规律,CLk的上升过程是重复的,这时就能够联想到C语言中的For循环,那如何将一字节强制转换成一位来使用呢?C语句又给出了很好的答案,因为串行数据输入端口一次只能读一位,且只能取该字节的最高位,如果强行给一个字节给它,那么它一次也只能读到最高位,可编程过程中就是需要给一位给它,如何读取到后面的字节,这是就巧妙的运用到了移位,可以每次通过左移一位的方式,让输入端口逐个接收,此时代码如下:

    void Write_Max7219_byte(uchar DATA)         
    {
          uchar i;    
        Max7219_CS=0;                   //CS=0有效,CS=1锁存  
          for(i=8;i>=1;i--)
              {      
                Max7219_CLK=0;
                Max7219_DIN=DATA&0x80; //即DATA&10000000
                DATA=DATA<<1;         //出问题的地方
                Max7219_CLK=1;       //通过上升沿再把数据送出去
               }
    

    (1)对Max7219_DIN=DATA&0x80;进行分析:

    由于串行数据输入端口一次只能读一位,且只能取该字节的最高位,那么通过与0x80的方式,可以使该字节最高位不变的情况下,后面七位全部置0(1字节强制转换成一位使用的缘故),此时的代码相对来说已经达到了最简。

    在这里插入图片描述

    二、如何移位

    由数据手册知该芯片在传输数据过程中,首先接收到的是 D15 位,那么在传输数据的过程中,先接收到的数据会往后移,可以类比于后面接收的数据把先接收的数据挤了下去,直到填满寄存器为止。

    展开全文
  • 移位寄存器工作原理,详细说明,原理图
  • 在进行复杂模型机设计时,我有一个一直困扰我的问题,那就是273这个寄存器(乃至其他所有寄存器)的工作原理是什么?他们是怎么寄存的?如果不弄清楚的话,数据寄存器的读写会发生错误,并且我对数据的产生流程会...

    在进行复杂模型机设计时,我有一个一直困扰我的问题,那就是273这个寄存器(乃至其他所有寄存器)的工作原理是什么?他们是怎么寄存的?如果不弄清楚的话,数据寄存器的读写会发生错误,并且我会对数据的产生流程模棱两可,即使编译结果也感觉是碰运气的。

    于是我自己在quartusII上导入273寄存器进行波形仿真,根据其引脚特性初始化数据,输入的数据如下:

          

    下面解释一下各个引脚的功能:

    clk——输入脉冲,高电平时将D[7..0]数据输入273寄存器;

    D[7..0]——8位数据输入端;

    Q[7..0]——8位数据输出端。

     

    接着进行波形仿真,结果如下:

          

    我们可以从图中数据得出以下几个结论:

    1、clk在上升沿时数据输入到寄存器中,接着寄存器就开始从Q[7..0]输出;

    2、寄存器被输入一次数据后会一直从输出端输出,这不像我想的那样输入数据后保存着,等着clk给一个高脉冲时再输出;

    3、在第n(n>1)高脉冲时输入端的数据会再输入到寄存器中,也就是覆盖掉原先的内容,接着寄存器开始不断输出新的内容,直到下一次clk高脉冲来临。

     

    由上面的结论,我们可以知道273乃至其他寄存器的工作原理。但是我又有一个疑问:模型机的bus总线一个时间段最多只能通过一个寄存器的数据,如果所有的寄存器都这样不断输出到数据总线中,那总线还怎么工作?

    我接着查看了一下模型机的原理图,发现寄存器不会直接连到bus总线上,他们需要经过选择器BUSMUX的处理,在微指令中会有一个总线控制信号来控制总线选择哪个寄存器的数据放到bus总线上。总线控制流程如下图所示:

     

       

    图一  微控制器(产生微指令M[24..1])

     

     

       

    图二  译码器(按照规则将相应的微指令字段转成模型机部件的控制信号,这里取M[12..10]进行译码)

     

     

       

    图三  编码器(将总线控制字段的译码(上图内容)转成SEL[2..0]来控制总线输出)

     

      

    图四  总线选择模块(通过SEL[2..0]来选择d0-d7的寄存器数据输出到bug总线上

    读者可以从图二ALU_B这个信号往下推模型机总线控制的流程。

    最终,通过以上的推导,我们就可以很清晰地了解模型机寄存器的工作原理了。

    展开全文
  • 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位...
  • 寄存器(cpu工作原理

    万次阅读 多人点赞 2016-12-02 21:06:37
    1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。 区别: 内部总线实现CPU内部各个器件之间的联系。 外部总线实现CPU和主板上其它器件的联系。 8086CPU有14个寄存器 它们...

    来源:王爽老师的《汇编语言

    1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

    区别:

    内部总线实现CPU内部各个器件之间的联系。

    外部总线实现CPU和主板上其它器件的联系。

    8086CPU有14个寄存器 它们的名称为:

       AX、BX、CX、DX、SI、DI、SP、BP、

       IP、CS、SS、DS、ES、PSW。


    8086CPU所有的寄存器都是16位的,可以存放两个字节,一个字节8位。

    AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。

    一个16位寄存器所能存储的数据的最大值为多少? 

    因为每一位存放的数据是0或1,那么最大的数值自然就是 1111 1111 1111 1111(2),也就是2^16-1。


    2、通用寄存器(重点)

    8086上一代CPU中的寄存器都是8位的,为保证兼容性,

    这四个寄存器都可以分为两个独立的8位寄存器使用。
    AX可以分为AH和AL;
    BX可以分为BH和BL;
    CX可以分为CH和CL;
    DX可以分为DH和DL。

    AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。

    AH和AL寄存器是可以独立使用的8位寄存器,如果当成是8位寄存器使用,那么他们就是独立的,没有任何关系。

    一个8位寄存器所能存储的数据的最大值是多少?二进制数值 1111 1111 ,也就是 2^8-1。


    3、字在寄存器中的存储





    注意:在进行数据传送或运算时,要注意指令的操作数的位数要匹配。


    4、物理地址的表示(重点)

    CPU访问内存单元时要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间。

    我们将这个唯一的地址称为物理地址。

    不同的CPU有不同的形成物理地址的方式。

    (1)16位结构的CPU

    8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。

    8086外部有20位地址总线,可传送20位地址,寻址能力为1M。

    那么,8086CPU如何用内部16位的数据,转换成20位的地址呢?

    8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

    段地址+偏移地址 -> 地址加法器 -> 20位的物理地址。

    地址加法器合成物理地址的方法:段地址×16+偏移地址=物理地址

    “段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位)

    二进制的数据左移4位,意味着乘以2^4=16。

    这样做的目的主要是为了弥补内部总线16位的缺陷而设计的。






    5、关于段空间

    内存没有分段,段的划分来自于CPU,

    由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,

    使得我们可以用分段的方式来管理内存。

    以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,

    用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

    (1)段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;

    (2)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。

    CPU可以用不同的段地址和偏移地址形成同一个物理地址。

    如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?

    因为偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。

    比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH。

    6、地址的描

    在8086PC机中,存储单元的地址用两个元素来描述。即段地址和偏移地址。

    “数据在21F60H内存单元中。”对于8086PC机的两种描述:

    (a)数据存在内存2000:1F60单元中;

    (b)数据存在内存的2000段中的1F60H单元中。

    可根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。


    7、段寄存器就是提供段地址的。

    8086CPU有4个段寄存器: CS、DS、SS、ES。

    CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。

    CS为代码段寄存器,IP为指令指针寄存器。

    在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H。

    即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行。

    FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。










    8、修改CS,IP

    mov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。

    8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令

    JMP 段地址:偏移地址

    JMP 2AE3:3

    功能:用指令中给出的段地址修改CS,偏移地址修改IP。CS = 2AE3H, IP = 0003H。

    仅修改IP的内容:

    jmp 某一合法寄存器

    jmp ax   (类似于 mov IP,ax)

    功能:用寄存器中的值修改IP。

    8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。



    9、关于debug指令(Win7没有这个指令,XP才有)

    R命令查看、改变CPU寄存器的内容;

    D命令查看内存中的内容;

    E命令改写内存中的内容;

    U命令将内存中的机器指令翻译成汇编指令;

    T命令执行一条机器指令;

    A命令以汇编指令的格式在内存中写入一条机器指令。

    展开全文
  • 一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件考内部总线相连。 8086CPU有14个寄存器: AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW 1、通用寄存器 8086CPU所有的寄存器都是16位的...

    CPU概述

    一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件考内部总线相连。

    8086CPU有14个寄存器:

            AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

    1、通用寄存器

    8086CPU所有的寄存器都是16位的,可以存放两个字节。

    AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。

    一个16位寄存器能存储数据的最大值为2^6-1。

     

    8086上一代CPU中寄存器都是8位,为保证兼容性,可将16位寄存器分成两个8位寄存器独立使用。

    例:16位寄存器AX可以分为8位寄存器AH和AL。

           AX的低八位构成AL寄存器,AX的高八位构成AH寄存器。

    一个八位寄存器能够存储的最大值为2^8-1。

    2、字在寄存器中的存储

          1B=8bit,1字=2字节(B)(16位寄存器)

    字节(B)是寻址的最小单位。

    字是计算机一次处理数据的最大单位。

        数制转换

       计算机能处理的数据是二进制数据,但是人阅读二进制数据是否困难,而十六进制对应二进制数据,且计算机的位数都是4的倍数,所以折中选择十六进制来处理数据。

    3、几条汇编指令

    注意:汇编指令不区分大小写。

    汇编指令:mov、add

    汇编指令 控制CPU完成操作 用高级语言描述(C语言)
    mov ax,18 将18送人ax ax=18
    add ax,8 将ax中数值加上8 ax=ax+8
    mov ax,bx 将bx中的数据送入寄存器ax中 ax=bx
    add ax,bx 将ax与bx数据相加,存入ax中 ax=ax+bx

    寄存器若发生数据溢出,寄存器只存储非溢出值,但CPU并没有丢弃溢出值,只是放在某个位置。

    若将一个16位寄存器当成两个8位寄存器时,若低八位寄存器发生溢出,其溢出值不会到高八位寄存器中。(原因:两者相互独立)

    例:只是用mov、add汇编指令,最多使用四条指令,编程计算2的四次方。

    mov al,2

    add al,al

    add al,al

    add al,al

    4、物理地址

    CPU访问内存单元时要给出内存单元的地址。所有内存单元构成的存储空间是一个一维的线性空间。

    将这唯一的地址称为物理地址

    5、16位结构的CPU

    特征:

    1.运算器一次最多可以处理16位数据。

    2.寄存器的最大宽度为16位。

    3.寄存器和运算器之间的通路是16位的。

    8086有20位地址总线,可传送20位地址,寻址能力为1M,2^20B=2^10KB=1MB

    8086内部地址总线为16位,只能传送16位地址寻址能力只有64K。

    因为8086内外地址总线不匹配,所以采用两个16位地址合成一个20位地址。

    16位段地址,偏移地址通过地址加法器变成20位地址。

    方法:物理地址=段地址x16+偏移地址。

    x16为向左移一位16进制或向左移四位2进制。

    一个数据的二进制向左移N位,二进制数据x2^N

    6、段的概念

      内存并没有分段,段的划分来自于CPU,由于CPU给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

    如:将10000H~100FFH组成一个段

    在编程时可以根据需要将若干地址连续的内存单元看成一个段。

    偏移地址为16位,寻址能力为64K,所以一个段的长度最大为64K。

    注意:数据在21F60H内存单元中,对于8086PC有两种描述:

    1.数据存在内存2000:1F60单元中。

    2.数据存在内存2000段的1F60单元中。

    7、段寄存器

    段寄存器是提供段地址的。

    8086CPU中有4个段寄存器

    CS(代码段地址寄存器)

    DS(数据段地址寄存器)

    SS(堆栈段地址寄存器)

    ES(附加段地址寄存器)

    CS和IP是8086CPU中最关键寄存器

    它们指示了CPU当前要读取指定的地址

    CS为代码段寄存器

    IP为指令指针寄存器(偏移地址寄存器)

     

    工作流程

    1.从CS:IP指的单元读取指令,读取的指令进入指令缓存器。

    2.IP=IP+所读取指令的长度(自己完成的),从而指向下一条指令

    3.执行指令(重复步骤)

     

    在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH    IP=0000H

    即在8086PC启动后,CPU从内存FFFF0H单元中读取指令。(开机执行的第一条指令)

     

    8、修改CS、IP的指令

    mov指令可以改变8086CPU中大部分的寄存器的值,被称为传送指令

    但是不能用来设置CS、IP的值(8086CPU没有提供这样的功能)

    转移指令jmp (用来改变CS、IP的值)

    1、同时修改CS、IP的内容

           jmp 2AE3:3

    2、仅修改IP的内容

            mov  ax,200H

            jmp   IP,ax

    或:jmp bx   (只修改IP的值,不修改CS的值)

    9.代码段

    CPU只认被CS:IP指向的内存单元中的内容为指令。

     

    工具介绍:debug

    debug是DOS、windows提供的实模式程序的调试工具。

    R命令  查看、改变CPU寄存器的内容

    D命令  查看内存中的内容

    E命令  改写内存中的内容

    U命令  将内存中的机器指令翻译成汇编指令

    T命令  执行一条机器语言

    A命令  以汇编指令的格式在内存中写入一条机器指令

     

     

    展开全文
  • 寄存器

    2020-12-18 13:03:51
    1. 寄存器 集成8位寄存器【74HC/HCT374】 功能表 2. 移位寄存器 (1) 基本的移位寄存器 (2) 多功能双向移位寄存器 工作原理 典型的多功能4位双向移位寄存器
  • 寄存器(CPU工作原理)

    2017-01-21 13:40:45
    CPU概述寄存器概述通用寄存器 字在寄存器中的存储关于数制的讨论几条汇编指令 物理地址 段的概念 段寄存器 ...
  • 006第二章 寄存器(CPU工作原理 )鱼C c语言教程
  • STM32跑马灯实验_库函数版GPIO工作原理和相关寄存器GPIO的模式GPIO寄存器说明: 每组GPIO端口的寄存器包括10个,共70个寄存器跑马灯实验代码 GPIO工作原理和相关寄存器 STM32f407共有7组GPIO(GPIO ~ AGPIOA),每组...
  • 寄存器部分——CPU内部工作原理 文章目录寄存器部分——CPU内部工作原理寄存器基础8086CPU工作过程:debug命令 寄存器基础 8086CPU有14个寄存器: AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,所有...
  • 2.字在寄存器中的存储 3.几条汇编指令 4.物理地址 5.16位结构的CPU 6.8086CPU给出物理地址方法 7.段地址*16+偏移地址 = 物理地址的本质含义 8.段的概念 9.段寄存器 10.cs 和 ip 11.代码段 CPU概述 x86架构 8086祖先 ...
  • 第二章 寄存器(CPU工作原理) CPU=运算器+控制器+【寄存器】, cpu内部各个器件之间通过内部总线相连。 cpu和主板其他器件通过外部总线相连。 8086CPU有14个寄存器,名称分别为: AX,BX,CX,DX,SI,DI,SP,BP,...
  • 一个典型的CPU由运算器,控制器,寄存器等器件组成,这些器件靠内部总线相连 区别: 内部总线实现CPU内部各个器件之间的联系, 外部总线实现CPU和主板上其它器件的联系 8086CPU有14个寄存器,它们的名称为: AX,BX,CX,DX,SI...
  • 通用寄存器 8086CPU有14个寄存器,他们的名字称为诶:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 8086CPU所有的寄存器都是16位的,可以存放两个字节。 为了保证兼容性,这四个寄存器都可以分为两个...
  • 文章目录CPU概述寄存器字在寄存器中的存储几条汇编指令物理地址16位结构的CPU8086CPU给出物理地址的...控制器控制各种器件进行工作 内部总线连接各种器件,在他们之间进行数据的传送 内部总线和外部总线(地址总线、数
  • 汇编语言之寄存器(CPU工作原理

    千次阅读 2016-10-30 21:17:56
    一个典型的CPU,由运算器、控制器、寄存器等器件组成,对于游戏修改者来说,重点学习寄存器,其它不必管。 不同的CPU,寄存器的个数、结构是不相同的,8086CPU有14个寄存器,每个寄存器有一个名称,我们对它进行分类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,058
精华内容 823
关键字:

寄存器工作原理