精华内容
下载资源
问答
  • 相对于传统的宏定义方式,F28335的...大小(*16) 描述 PLLSTS 0x7011 1 PLL状态寄存器 保留 0x7012~0x7019 8 HISPCP 0x701A 1 高速外设时钟分频寄存器 LOSPCP 0x701B 1 低速外设失踪分频寄存器 PCLKC...

    相对于传统的宏定义方式,F28335的寄存器定义方式更加复杂。为了说清楚这个问题,以系统控制寄存器为例。

    系统控制寄存器

    名称地址大小(*16)描述
    PLLSTS0x70111PLL状态寄存器
    保留0x7012~0x70198
    HISPCP0x701A1高速外设时钟分频寄存器
    LOSPCP0x701B1低速外设失踪分频寄存器
    PCLKCR00x701C1外设时钟控制寄存器0
    PCLKCR10x701D1外设时钟控制寄存器1
    LPMCR00x701E1低功模式控制寄存器0
    保留0x701F1
    PCLKCR30x70201外设时钟控制寄存器
    PLLCR0x70211PLL控制寄存器
    SCSR0x70221系统控制和状态寄存器
    WDCNTR0x70231看门狗计数寄存器
    保留0x70241
    WDKEY0x70251看门狗复位寄存器
    保留0x7026~0x70283
    WDCR0x70291看门狗控制寄存器
    保留0x702A~0x702F6

    1.相关结构体

    //---------------------------------------------------------------------------
    // System Control Register File:
    //起始地址应该是0x7010
    struct SYS_CTRL_REGS {
       Uint16              rsvd7;     // 0
       union   PLLSTS_REG  PLLSTS;    // 1
       Uint16              rsvd1[8];  // 2-9
       union   HISPCP_REG  HISPCP;    // 10: High-speed peripheral clock pre-scaler
       union   LOSPCP_REG  LOSPCP;    // 11: Low-speed peripheral clock pre-scaler
       union   PCLKCR0_REG PCLKCR0;   // 12: Peripheral clock control register
       union   PCLKCR1_REG PCLKCR1;   // 13: Peripheral clock control register
       union   LPMCR0_REG  LPMCR0;    // 14: Low-power mode control register 0
       Uint16              rsvd2;     // 15: reserved
       union   PCLKCR3_REG PCLKCR3;   // 16: Peripheral clock control register
       union   PLLCR_REG   PLLCR;     // 17: PLL control register
       // No bit definitions are defined for SCSR because
       // a read-modify-write instruction can clear the WDOVERRIDE bit
       Uint16              SCSR;      // 18: System control and status register
       Uint16              WDCNTR;    // 19: WD counter register
       Uint16              rsvd4;     // 20
       Uint16              WDKEY;     // 21: WD reset key register
       Uint16              rsvd5[3];  // 22-24
       // No bit definitions are defined for WDCR because
       // the proper value must be written to the WDCHK field
       // whenever writing to this register.
       Uint16              WDCR;      // 25: WD timer control register
       Uint16              rsvd6[6];  // 26-31
    };
    
    

    此处通过一个结构体,将系统控制寄存器中所有寄存器都包含其中。

    2.定义结构体变量

    volatile struct SYS_CTRL_REGS SysCtrlRegs;
    

    这个结构体变量就具有了系统控制寄存器的整体结构了。下面的任务就是将这个变量映射到对应的寄存器地址。通过对比可以知道,SysCtrlRegs变量的映射地址应该是0x7010;

    在DSP编程中,用#pragma的编程方式将变量映射到对应的地址。其具体的格式为:

    //为变量分配地址
    #ifdef __cplusplus
    #pragma DATA_SECTION("SysCtrlRegsFile")//C++语法
    #else
    #pragma DATA_SECTION(SysCtrlRegs,"SysCtrlRegsFile");//C语言语法,若是C开发,可以只写这一句。
    #endif
    //定义结构体变量
    volatile struct SYS_CTRL_REGS SysCtrlRegs;
    

    上面代码,即通过#pragma的编程方式,将SysCtrlRegs变量与SysCtrlRegsFile文件所连接的地址连接起来。下面就是解决如何将数据块文件与寄存器地址连接起来。这就需要cmd文件来解决了。

    补充
    DATA_SECTION函数
    //在C语言中
    #pragma DATA_SECTION ( symbol , " section name ");
    //在C++语言中
    #pragma DATA_SECTION (" section name ");
    

    在C语言中,这条代码的含义就是为symbol变量申请数据空间。将symbol变量的数据存储在section name对应的地址。
    举例:

    #pragma DATA_SECTION(bufferB, "my_sect")
    char bufferB[512];//此处不可以是指针,是已经分配空间的数据类型。
    
    CODE_SECTION函数
    #pragma CODE_SECTION (symbol , "section name ")
    

    在C语言中,这条代码的含义就是为symbol变量申请程序空间。将symbol变量的数据存储在section name对应的地址。
    举例

    char bufferA[80];
    char bufferB[80];
    #pragma CODE_SECTION(funcA, "codeA")
    char funcA(int i);//fancA放入codeA映射的位置
    char funcB(int i);//fanB放入.txet映射的位置
    void main()
    {
    char c;
    c = funcA(1);
    c = funcB(2);
    }
    char funcA (int i)
    {
    return bufferA[i];
    }
    char funcB (int j)
    {
    return bufferB[j];
    }
    

    3.cmd文件

    MEMORY
    {
     PAGE 0:    /* Program Memory */
       ...
     PAGE 1:    /* Data Memory */
       ...                 
       SYSTEM      : origin = 0x007010, length = 0x000020     /* System control registers */
       ...
    }
    
     
    SECTIONS
    {
       ...
       SysCtrlRegsFile   : > SYSTEM,      PAGE = 1
       ...
    }
    

    如上代码所示,cmd文件中分成MEMORY和SECTIONS两个部分。需要注意的是,在cmd文件中注释方式只能是/**/,不可以为//。(我在CCS6.1上验证发现,//注释方式也是可以的。)
    在MEMORY中,最多可以256个PAGE(PAGE0~PAGE255)。习惯上,将PAGE0作为程序空间,将PAGE作为数据空间。程序中的SYSTEM : origin = 0x007010, length = 0x000020,很容易理解,就是将SYSTEM的实际地址的起始地址为0x7010,长度为0x20(32个字长) 。
    在SECTIONS中,将SysCtrlRegsFile 和SYSTEM链接起来。因而,上面定义的SysCtrlRegs就与系统控制寄存器建立起了以上关系。

    结构体的位定义

    取系统控制的第1个寄存器(锁相环状态寄存器)为例。

    PLLSTS(锁相环状态寄存器)

    名称描述
    15~9保留
    8~7DIVSEL时钟分频选择;
    00,01:4分频;
    10:2分频;11:1分频
    6MCLKOFF时钟检测电路关闭位;
    0:默认模式,时钟检测使能;
    1:时钟检测电路关闭,系统不会进入limp-mode模式
    5OSCOOF振荡器时钟禁止位;
    0:晶振时钟信号会被送到PLL电路;
    1:晶振时钟信号不会被送到PLL电路。
    当此位=1时,
    此时不要进入HALT或STANDBY模式,不要写入PLLCR寄存器,否则会倒追不可预知的后果;
    看门狗行为与输入时钟有关,若X1或X1与X2,看门狗不工作。XCLKIN:看门狗工作。
    OSCOFF用于测试时钟监视逻辑电路。
    4MCLKCLR时钟丢失状态清除位
    0:写无影响,读取返回0;
    1:强制将时钟检测电路进行复位。如果OSCCLK(晶振时钟)依然丢失,时钟检测电路会再次产生一次系统复位信号,并将MCLKSTS置位,此时CPU的工作时钟为limp-mode模式产生的低速时钟
    3MALKSTS对该位写无效,写MCLKCLR或者外部复位时候,该位被清除
    0:正常模式,时钟信号没有丢失;
    1:晶振信号丢失,CPU工作在limp-mode
    2PLLOFFPLL电路关闭位,只有PLLCR=0时候,才能将PLL电路关闭
    0:PLL电路正常工作
    1:PLL电路关闭
    1保留
    0PLLLOCKSPLL电路状态位
    0:表示锁相环依然正在锁相,此时最好等待
    1:PLL电路已经锁相完成

    位区结构体

    struct PLLSTS_BITS   {    // bits  description
       Uint16 PLLLOCKS:1;     // 0     PLL lock status
       Uint16 rsvd1:1;        // 1     reserved
       Uint16 PLLOFF:1;       // 2     PLL off bit
       Uint16 MCLKSTS:1;      // 3     Missing clock status bit
       Uint16 MCLKCLR:1;      // 4     Missing clock clear bit
       Uint16 OSCOFF:1;       // 5     Oscillator clock off
       Uint16 MCLKOFF:1;      // 6     Missing clock detect
       Uint16 DIVSEL:2;       // 7:8   Divide Select
       Uint16 rsvd2:7;        // 15:9  reserved
    };
    

    上面结构体定义了PLL状态寄存器的每一位的名称。位区结构体定义时需要注意:

    • 位定义由低位到高位
    • 每个名称后面带有冒号,冒号后接着是位长。
    • 并不是所有的寄存器都需要定义位区,从前面SYS_CTRL_REGS结构体中也可看出!

    下面需要将位区与整个寄存器链接起来。在DSP的编程中,使用的方法是共同体。

    共同体

    union PLLSTS_REG 
    {
       Uint16              all;
       struct PLLSTS_BITS  bit;
    };
    

    通过共同体,将结构体PLLSTS_REG中all变量和bit变量共享一块存储空间,而此时,通过操作结构体PLLSTS_REG变量即可方便操作整个寄存器或者寄存器的每一位。这里从上篇博客(F28335第二篇——系统控制初始化)中选取一个例子 。

    SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;//保证PLL是4分频
    

    整体操作的也是类似:

    SysCtrlRegs.PLLSTS.all = 0
    
    展开全文
  • GPU片上高速缓存器,基本单元时寄存器文件,每个寄存器文件大小为32bit。 计算能力1.0/1.1版本硬件中,每个SM中寄存器文件数量为8192;而在1.2/1.3硬件中,每个SM中寄存器文件数量为16384. 一般情况下,内核线程中的...

    寄存器

    GPU片上高速缓存器,基本单元时寄存器文件,每个寄存器文件大小为32bit。

    计算能力1.0/1.1版本硬件中,每个SM中寄存器文件数量为8192;而在1.2/1.3硬件中,每个SM中寄存器文件数量为16384.

    一般情况下,内核线程中的简单局部变量都在寄存器存储器中。

    局部存储器

    对于每个线程,局部存储器也是私有的,如果寄存器被消耗完,数据将被存储在局部存储其中。如果每个线程使用了过多的寄存器,或声明了大型结构体或数组,或者编译器无法确定数组的大小,线程的私有数据就有可能会被分配到local memory中。一个线程的输入和中间变量将被保存在寄存器或者局部存储器中。局部存储器中的数据被数保存在显存中,因此对local memory的访问速度很慢。

    如下,mt会被存入local memory中

    __global__ void localmemDemo(float* A)
    {
      unsigned int mt[3];
    }
    

    如果在定义线程私有数组的同时,对其就进行了初始化,那么如果数组尺寸不大,这个数组仍然有可能被分到寄存器中。

    __global__ void localmemDemo(float* A)
    {
      unsigned int mt[3] = {1, 2, 3};
    }
    

    在编译时,输出ptx(parallel thread execution)汇编代码(在编译时加上-ptx或者-keep选项),就能观察变量在编译的第一阶段是否被分配到了local memory中,如果一个变量在ptx中以.local助记符声明,可使用ld.local和st.local助记符访问,这个变量就被存放在local memory中。不过,即使初次编译的变量不位于local memory中,在编译的第二阶段仍然有可能根据目标硬件中存储器的大小将变量存放在local memory中。这时,可以通过加上–ptxas-options=-v编译选项用来观察lmem的使用情况。

    如果数组较小,并且一定要分配在寄存器中,用以下方法:

    __global__ void localmemDemo(float* A)
    {
      unsigned int mt0, mt1, mt2;
    }
    
    展开全文
  • 寄存器

    千次阅读 2016-09-04 22:24:52
    8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。 通用寄存器 有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及...

    8086寄存器

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

    通用寄存器

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

    指令指针IP

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

    标志寄存器

    8086有一个16位的标志性 寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。 标志寄存器(Flags Register,FR)又称 程序状态字(Program Status Word,PSW)。这是一个存放条件标志、控制 标志寄存器,主要用于反映处理器的状态和运算 结果的某些特征及控制 指令的执行。
    标志寄存器位置图: [4]  
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
            OF DF IF TF SF ZF   AF   PF   CF
    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:( Assistant Carry Flag)下列情况下, 辅助进位标志AF的值被置为1,否则其值为0:
    (1)、在字操作时,发生低 字节向高字节进位或借位时
    (2)、在 字节操作时,发生低4位向高4位进位或借位时。
    PF:奇偶标志PF用于反映运算 结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    CF:进位标志CF主要用来反映无 符号数运算是否产生进位或借位。如果运算 结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

    段寄存器

    为了运用所有的 内存空间,8086设定了四个 段寄存器,专门用来保存 段地址
    寄存器 寄存器
    CS(Code Segment): 代码段寄存器
    DS(Data Segment):数据 段寄存器
    SS(Stack Segment): 堆栈段 寄存器
    ES(Extra Segment):附加 段寄存器
    当一个程序要执行时,就要决定程序代码、数据和 堆栈各要用到 内存的哪些位置,通过设定 段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可 寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以 内存作为战场,用 寄存器做为军事基地,以加速工作。
    备注:由于所讲的是16位cpu(IP 寄存器的位数为16,即: 偏移地址为16位)2的16次幂就是64K,所以16位 段地址不能超过64K,超过64K会造成64K以上的地址找不到。

    展开全文
  • 8086寄存器

    2017-04-25 13:19:10
    8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。 通用寄存器 有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址...
    8086 有14个16位 寄存器,这14个寄存器按其用途可分为(1) 通用寄存器、(2)指令指针、(3) 标志寄存器和(4) 段寄存器等4类。

    通用寄存器

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

    指令指针IP

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

    标志寄存器

    8086有一个16位的标志性 寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。 标志寄存器(Flags Register,FR)又称 程序状态字(Program Status Word,PSW)。这是一个存放条件标志、控制 标志寄存器,主要用于反映处理器的状态和运算 结果的某些特征及控制 指令的执行。
    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:( Assistant Carry Flag)下列情况下, 辅助进位标志AF的值被置为1,否则其值为0:
    (1)、在字操作时,发生低 字节向高字节进位或借位时
    (2)、在 字节操作时,发生低4位向高4位进位或借位时。
    PF:奇偶标志PF用于反映运算 结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    CF:进位标志CF主要用来反映无 符号数运算是否产生进位或借位。如果运算 结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

    段寄存器

    为了运用所有的 内存空间,8086设定了四个 段寄存器,专门用来保存 段地址
    CS(Code Segment):
    代码段寄存器
    DS(Data Segment):数据 段寄存器
    SS(Stack Segment): 堆栈段 寄存器
    ES(Extra Segment):附加 段寄存器
    当一个程序要执行时,就要决定程序代码、数据和 堆栈各要用到 内存的哪些位置,通过设定 段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可 寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以 内存作为战场,用 寄存器做为军事基地,以加速工作。
    备注:由于所讲的是16位cpu(IP 寄存器的位数为16,即: 偏移地址为16位)2的16次幂就是64K,所以16位 段地址不能超过64K,超过64K会造成64K以上的地址找不到。

    展开全文
  • 寄存器详解

    2014-11-12 13:32:25
    寄存器  英文名称:Register 寄存器定义  寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令...
  • EIP寄存器

    2020-04-05 16:32:13
    EIP寄存器,用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。每次CPU执行完相应的汇编...1. 首先PE loader装载我们的PE文件,读取PE文件的基地址和入口RVA地址(相对于基地址的偏移),并且...
  • 寄存器,寄存器是什么意思寄存器定义寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器...
  • 2-段寄存器

    千次阅读 多人点赞 2016-09-14 14:50:05
    寄存器寄存器有96位 段寄存器数据来源从 ds 说起如果你稍稍懂一点汇编,当你执行下面这行代码的时候,它会把 32 位整数 5 写入到地址 0x0012f000 这个位置处。dword 就表示这是一个 double word 宽度的数,一个...
  • 寄存器定义

    千次阅读 2014-03-14 14:39:11
    寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件...
  •  本文以STM32F103RBT6为例介绍了片上Flash(Embedded Flash)若干问题,包括Flash大小(内存映射)、块大小、页面大小寄存器。这些知识,有利于写Flash驱动。 一、怎么看Flash大小 1.1 通过型号  型号会印...
  • 通用寄存器和段寄存器

    千次阅读 2016-01-18 08:45:25
    8086/8088通用寄存器的通用性表现在:  这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;  8个通用寄存器的专门用途如下:  AX 字乘法,字除...
  • 什么是段寄存器,数据寄存器

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

    万次阅读 多人点赞 2019-06-04 07:57:47
    8086 CPU 中寄存器总共为 14 个,且均为 16 位 。 即AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES共 14 个。 而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。 通用寄存器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,457
精华内容 42,182
关键字:

寄存器文件大小