精华内容
下载资源
问答
  • 寄存器的功能是
    千次阅读
    2021-07-28 06:13:12

    反汇编里rep stos dword ptr es:[edi] 是做什么的?

    参考资料:1.http://www.cnblogs.com/awpatp/archive/2012/08/05/2623628.html

    2.http://stackoverflow.com/questions/4024492/can-anyone-help-me-interpret-this-simple-disassembly-from-windbg

    3.http://www.cs.ubbcluj.ro/~dadi/ac/doc/ng1cf0a.html

    4.http://www.cs.ubbcluj.ro/~dadi/ac/doc/ng15a5f.html

    汇编当中 dword ptr [ ] 是什么意思?

    dword 双字 就是四个字节

    ptr pointer缩写 即指针

    []里的数据是一个地址值,这个地址指向一个双字型数据

    比如mov eax, dword ptr [12345678] 把内存地址12345678中的双字型(32位)数据赋给eax

    再比如

    MOV EAX, DWORD PTR SS:[EBP-1CH]

    MOV是一个赋值语句,这句话的意思是:将EBP寄存器的值减1CH,然后在SS(堆栈段)寻址,找到EBP-1CH这个地址的值,然后将这个值转换成 DWORD类型,也就是32位,取4字节,然后存在EAX这个寄存器里。

    寄存器 英文名称:Register

    寄存器定义:寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

    寄存器用途

    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(总线接口部件,Bus Interface Unit)从内存中取出一个指令字节后,IP就自动加1,指向下一个指令字节。注意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。

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

    8086有一个18位的标志寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。分别是:OF:溢出标志位,DF:方向标志位,IF:中断允许标志位,TF:跟踪标志位,SF:符号标志位,ZF:零标志位,AF:辅助进位标志位,PF:奇偶标志位,CF:进位标志位

    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是它的默认段寄存器或选择器。

    指针寄存器: ESP:寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

    BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。

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

    C、段选择器

    CPU内部的段寄存器:CS——代码段寄存器(Code Segment Register),其值为代码段的段值;DS——数据段寄存器(Data Segment Register),其值为数据段的段值;ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

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

    D、指令指针寄存器

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

    总结:

    4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)

    更多相关内容
  • 各个寄存器作用

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

    在此记录下寄存器的名称及作用,方便查看。

    不同体系下寄存器名称:

    |63…32|31…16|15-8|7-0|

    |AH…AL…|

         |AX......|
    

    |EAX…|

    |RAX…|

    不同寄存器作用:

    rax 作为函数返回值使用

    rsp 栈指针寄存器,指向栈顶

    rdi,rsi,rdx,rcx,r8,r9 用作函数参数,依次对应第1参数,第2参数…

    rbx,rbp,r12,r13,14,15 用作数据存储,遵循被调用者使用规则,简单说就是随便用,调用子函数之前要备份它,以防他被修改

    r10,r11 用作数据存储,遵循调用者使用规则,简单说就是使用之前要先保存原值

    参考:

    https://msdn.microsoft.com/zh-cn/library/9z1stfyw.aspx

    http://www.mouseos.com/x64/extend64.html

    https://blog.csdn.net/lidonghat/article/details/70244288?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-2.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-2.highlightwordscore

    另附上CSAPP实验里用到的GDB常用命令,方便查阅。

    -objdump -d a.out>a.s 生成反汇编文档

    gdb a.out 进入gbd

    b *0x400000 设置断点

    d 1 删除断点1

    c 继续,跳过当前断点

    info r 寄存器状态信息

    info b 断点列表

    p *0x400000 打印地址处双字(32bit)

    p/x 16进制打印

    p/s 0x400000 打印地址处字符串

    p/s *(char *)($rax) 打印地址处字符

    p/s (char *)($rax) 打印地址处字符串

    CPU中的寄存器和地址概念

    一般的CPU都是由以下部分组成:运算器、控制器和寄存器。

    这些器件之间自然也要相互交换信息,所以他们也是有导线相连的,也就是总线了。但是这个总线是内部总线,而CPU和内存、显卡之类做信息交换的是外部总线。

    他们的作用分别是:

    运算器:信息处理

    寄存器:信息储存

    控制器:控制器件

    好吧,从名字来看就很容易明白……

    通用寄存器(8086CPU):

    8086CPU寄存器都是16位的,可以存放两个字节,一个字节是八个二进制位哦。

    它的通用寄存器有:AX,BX,CX,DX,话说就是ABCD嘛。

    特殊的是这些寄存器都是可以拆成8位寄存器来使用,为了兼容。

    AX可以拆分为AH和AL

    BX可以拆分为BX和BL

    CX可以拆分为CH和CL

    DX可以拆分为DH和DL

    H代表high的意思,L代表low的意思,这样是不是很好理解。

    这个16位寄存器,说起来就是它里面可以存放0和1的小格子有16个。一个小格子就是一个二进制位。

    来张图应该会很清晰,没网……以后补充吧……

    说到这里,如果你看到这样的一个数字4E2C,不用慌张,它是一个16进制的数据。这种类型的数据,你只要死死记住,16禁止的一位,相当于二进制的四位,所以呢4E2C你要是换算成二进制,它是16个。

    书上的例子是这样的:

    4E20,这是一个16进制数,换算以后成二进制:0100111000100000,

    4就是0100,E就是1110,2就是0010,0就是0000.怎么换算还不知道,请打你的计算机老师……

    最后,有些时候我们不能一眼看出它是一个16进制数,或者说会有误解的时候,就会在十六进制数的后面加上一个H,这里的H不是high,而是Hex的意思。

    二进制数呢,就会在后面加上B,也就是byte的意思,而十进制数就不用加了,毕竟都是小学都会的。

    现在来使用寄存器吧!

    首先呢,在写汇编代码的时候,你不用区分大小写。

    比如:mov ax 22,这个是可以,他表示将22的数据送入AX寄存器

    不仅可以把数据送进寄存器,还可以把其它寄存器的数据送过来,如:mov ax bx 它表示把BX中的数据送入AX,当然,BX的数据还在的哦。

    如果你很高兴,mov AX 22 mov AX BX这种大写代码也是可以接受的……

    这里说到了mov ax bx的情况,有时候如果说ax寄存器没有数据,那么一切ok,但是如果ax里面有数据会怎么样?这个时候把bx的数据送进来,那ax的数据还在吗?

    答案是否定的,ax的数据将会被bx中传递过来的数据覆盖。

    其实很好理解,这个ax这个容器很小,当你把别的数据是送进来,它只能以这种方式存储数据。

    物理地址:

    这里说的可不是你的MAC地址……

    在内存当中,不管你的内存有多大,CPU在访问的时候都是把它当成一维的,这样确保了每个内存单元都有唯一的地址。嗯,不排除以后科技更牛逼……

    这些内存单元的地址,就是它们的物理地址。

    CPU会首先在内部安排好地址,然后再发出去。那么CPU是怎么发出地址的?自然是靠地址总线。

    这里说的内存单元,绝不仅仅是内存条,还有显存之类的也属于内存单元。

    在讨论CPU问题,其实涉及到的是计算机的工作原理,和本质,我们不应当将概念人为地局限为一个或者一种特殊器件。

    原文链接:https://blog.csdn.net/xuancailinggan/article/details/50911290
    **

    CPU中的主要寄存器

    **
    在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。

    1. 数据寄存器

    数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。

    数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。

    数据寄存器的作用是 :

    (1)作为CPU和主存、外围设备之间信息传送的中转站;

    (2)弥补CPU和主存、外围设备之间在操作速度上的差异;

    (3)在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。

    1. 指令寄存器

    指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令。

    当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。

    指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器(Instruction Decoder,ID)就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。

    指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号。

    1. 程序计数器

    程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的地址。

    在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入PC,因此PC的内容即是从主存提取的第一条指令的地址。

    当执行指令时,CPU能自动递增PC的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。若为单字长指令,则(PC)+1àPC,若为双字长指令,则(PC)+2àPC,以此类推。

    但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增PC的内容来取得。

    因此,程序计数器的结构应当是具有寄存信息和计数两种功能的结构。

    1. 地址寄存器

    地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。

    由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。

    当CPU和主存进行信息交换,即CPU向主存存入数据/指令或者从主存读出数据/指令时,都要使用地址寄存器和数据寄存器。

    如果我们把外围设备与主存单元进行统一编址,那么,当CPU和外围设备交换信息时,我们同样要使用地址寄存器和数据寄存器。

    1. 累加寄存器

    累加寄存器通常简称累加器(Accumulator,AC),是一个通用寄存器。

    累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。

    显然,运算器中至少要有一个累加寄存器。

    1. 程序状态字寄存器

    程序状态字(Program Status Word,PSW)用来表征当前运算的状态及程序的工作方式。

    程序状态字寄存器用来保存由算术/逻辑指令运行或测试的结果所建立起来的各种条件码内容,如运算结果进/借位标志(C)、运算结果溢出标志(O)、运算结果为零标志(Z)、运算结果为负标志(N)、运算结果符号标志(S)等,这些标志位通常用1位触发器来保存。

    除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。

    因此,程序状态字寄存器是一个保存各种状态条件标志的寄存器。

    原文链接:https://blog.csdn.net/kwame211/article/details/77773621

    8086寄存器简介

    https://blog.csdn.net/liukexiongjob2011/article/details/83945119?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-8.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-8.highlightwordscore

    展开全文
  • 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位...
  • 值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的初始化部分是十分必要的。说明:表中符号*为随机状态;A=00H,表明累加器已被清零;特殊功能寄存器初始状态特殊...
  • 威纶通触摸屏系统寄存器功能使用详解及地址列表一览
  • 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些...
  • 寄存器,寄存器是什么意思

    千次阅读 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位。具有移位功能的寄存器称为移位寄存器。

    展开全文
  • 寄存器作用

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

    [From]

    AX/EAX: 累加器,算术通用寄存器,与端口的通讯也用这个寄存器.

    BX/EBX: 基址寄存器.

    CX/ECX: 计数器,结合串处理指令使用.

    DX/EDX: 算术通用寄存器.和累加器结合表示双字长的数,其中累加器用于存低位数.

    [From]http://blog.csdn.net/huangwei1024/archive/2007/01/29/1496560.aspx

    2.1 寄存器组

    寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

    寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

    另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。

    由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。

    1、 16位寄存器组

    16位CPU所含有的寄存器有(见图2.1中16位寄存器部分):

    4个数据寄存器(AX、BX、CX和DX)

    2个变址和指针寄存器(SI和DI)

    2个指针寄存器(SP和BP)

    4个段寄存器(ES、CS、SS和DS)

    1个指令指针寄存器(IP)

    1个标志寄存器(Flags)

    2、 32位寄存器组

    32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS和GS。

    32位CPU所含有的寄存器有(见图2.1中的寄存器):

    4个数据寄存器(EAX、EBX、ECX和EDX)

    2个变址和指针寄存器(ESI和EDI)

    2个指针寄存器(ESP和EBP)

    6个段寄存器(ES、CS、SS、DS、FS和GS)

    1个指令指针寄存器(EIP)

    1个标志寄存器(EFlags)

    070209104014.gif

    070209104023.gif

    070209104029.gif

    图2.1 CPU寄存器组的示意图

    2.1.2、通用寄存器的作用

    通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

    表2.1 通用寄存器的主要用途

    寄存器的分类

    寄存器

    主 要 用 途

    数据

    寄存器

    AX

    乘、除运算,字的输入输出,中间结果的缓存

    AL

    字节的乘、除运算,字节的输入输出,十进制算术运算

    AH

    字节的乘、除运算,存放中断的功能号

    BX

    存储器指针

    CX

    串操作、循环控制的计数器

    CL

    移位操作的计数器

    DX

    字的乘、除运算,间接的输入输出

    变址

    寄存器

    SI

    存储器指针、串指令中的源操作数指针

    DI

    存储器指针、串指令中的目的操作数指针

    变址

    寄存器

    BP

    存储器指针、存取堆栈的指针

    SP

    堆栈的栈顶指针

    指令指针

    IP/EIP

    标志位寄存器

    Flag/EFlag

    32位

    CPU的

    段寄存器

    16位CPU的

    段寄存器

    ES

    附加段寄存器

    CS

    代码段寄存器

    SS

    堆栈段寄存器

    DS

    数据段寄存器

    新增加的

    段寄存器

    FS

    附加段寄存器

    GS

    附加段寄存器

    更详细的内容请点击:。

    2.1.3、专用寄存器的作用

    16位CPU内部有一个16位的标志寄存器,它包含9个标志位。这些标志位主要用来反映处理器的状态和运算结果的某些特征。各标志位在标志寄存器内的分布如图2.2所示。

    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

    31

    17

    16

    15

    14

    13

    12

    11

    10

    9

    8

    7

    6

    5

    4

    3

    2

    1

    0

    VM

    RF

    NT

    IOPL

    OF

    DF

    IF

    TF

    SF

    ZF

    AF

    PF

    CF

    图2.2 16位/32位标志寄存器的示意图

    上面9个标志位可分为二组:运算结果标志位(有背景色的标志位)和状态控制标志位。前者受和结果的影响,后者受一些控制指令执行的影响。

    更详细的内容请点击:。

    有些指令的执行会改变标志位(如:算术运算指令等),不同的指令会影响不同的标志位,有些指令的执行不改变任何标志位(如:MOV指令等),有些指令的执行会受标志位的影响(如:条件转移指令等),也有指令的执行不受其影响。

    程序员要想熟练运用这些标志位,就必须掌握每个标志位的含义、每条指令的执行条件和执行结果对标志位的作用。

    注意:虽然知道每个标志位在标志寄存器内的具体位置是有好处的,但通常情况下,没有这个必要。在使用第5.2.9节中的“”时,系统会自动引用相应标志位的值来决定是否需要“转移”的,所以,不必过分强调标志位在标志寄存器内的具体位置。

    展开全文
  • 对移位寄存器的使用做了详细说明,以及附有移位寄存器种类,如:层叠式移位寄存器的使用,还简单对移位寄存器和反馈节点作了区别等。
  • 寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。  寄存器的用途:  1.可将寄存器内的数据执行算术及逻辑运算。  2.存于寄存器内的地址可用来指向内存的某个位置,即...
  • 锁相环控制寄存器

    2020-11-13 00:07:10
    锁相环控制寄存器的具体功能参见图1和表1。  图1 锁相环控制寄存器(PLLCR)  表1 锁相环控制寄存器(PLLCR)功能定义  欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99
  • HISPCP和LOSPCP控制寄存器分别控制高/低速的外设时钟,具体功能参见图1、图2和表1、表2。  图1 高速外设时钟寄存器(HISPCP)  图2 低速外设时钟寄存器(△OsPCP)  表1 高速外设时钟寄存器(HISPCP)功能...
  • 将STM32F103系列单片机寄存器进行了归类,需要使用对应寄存器时可方便查询其配置方式。使用对应功能时可方便查询功能打开方式以及其时钟频率等一些列特性归类
  • 这些特殊功能寄存器颁在以下各个功能部件中:(1)CPU:ACC、B、PSW、SP、DPTR(由DPL和DPH两个8位寄存器组成);(2)中断系统:IP、IE;(3)定时器/计数器:TMOD、TCOM、TL0、TH0、TL1、TH1; (4)并行I/O口:P...
  • 公司业务需要,用到modbus协议,... 如上所示一共8种功能码。这其中有涉及到线圈、离散输入、保持、输入四种寄存器。  线圈寄存器:实际上就可以类比为开关量(继电器状态),每一个bit对应一个信号的开关状态。所以
  • 8051 单片机内部有 21 个特殊功能寄存器,在物理上是分散在片内各功能部件中,在数学上把它们组织在内部数据存储器地址空间 80H~FFH 中,以便能使用统一的直接寻址方式来访问。
  • 移位寄存器功能测试及应用.pdf
  • 所谓移位功能,是指寄存器里存储的代码能在移位脉冲的作用下依次左移或右移。因此,移位寄存器不但可以用来寄存代码,还可用来实现数据的串并转换、数值的运算以及数据处理等。  【例】 用VHDL语言设计一个8位的...
  • 移位寄存器

    2020-12-09 01:57:52
    移位寄存器是暂时存放数据的部件,同时它还具有移位功能。 一、特点和分类 从逻辑结构上看,移位寄存器有以下两个显著特征:(1)移位寄存器是由相同的寄存单元所组成。一般说来,寄存单元的个数就是移位寄存器的...
  • 什么是通用寄存器

    千次阅读 2021-12-24 16:57:02
    通用寄存器:这类寄存器在处理器中数量较多、使用频度较高,具有多种用途。例如它们可用来存放指令需要的操作数据,又可用来存放地址以便在主存或I/O接口中指定操作数据的位置。 通用寄存器(General-Purpose ...
  • 定时器周期寄存器

    2020-11-12 22:10:38
    图给出了定时器周期寄存器的各位分配,表给出了-定时器,周期寄存器的功能定义。  图 定时器周期寄存器 ... 表 定时器周期寄存器功能定义 欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99
  • 8051/89C51共有21个专用寄存器,现把其中部分寄存器简单介绍如下: (1)程序计数器(Program Counter,PC) PC是一个16位的计数器,它的作用是控制程序的执行顺序,其内容为下一条要执行的指令的地址,寻址范围达64KB...
  • SPI寄存器

    2020-11-12 22:43:59
    SPI接口寄存器的地址及功能如表所列。  表 SPI接口寄存器 欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99
  • 模块使用python实现excel到寄存器模型文件的转换功能。使用前在Windows平台需要安装python3.x 以及openpyxl模块,使用时将需要转换的模块寄存器按照examp.xlsx格式填好excel,excel文件名设置为寄存器名字,将excel...
  • 2、 时序控制器 时序控制器的作用是为每条指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就是CPU的主频;而倍频定义单元则定义了...
  • CM3 拥有通用寄存器 R0-R15 以及一些特殊功能寄存器。 R0-R12 是最“通用目的”的,但是绝大多数的 16 位指令只能使用 R0-R7(低组寄存器),而 32 位的 Thumb-2 指令则可以访问所有通用寄存器。特殊功能寄存器有预...
  • SPIFFTX寄存器

    2020-11-12 21:29:25
    下图给出了SPIFFTX寄存器的各位分配.表列出了各位的定义。  图 SPIFFTX寄存器  表 SPIFFTX寄存器功能定义 欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99
  •  SPSR用来进行异常处理,其功能包括:  (1)保存ALU中的当前操作信息。  (2)控制允许和禁止中断。  (3)设置处理器的运行模式。  程序状态寄存器的每一位的安排如图所示。  图 程序状态寄存器格式 ...
  • 目录 STM32芯片里面有什么 一、驱动单元 1、ICode总线 2、DCode总线 3、系统总线 4、DMA总线 二、被动单元... 4、位功能说明 位功能寄存器说明中最重要的部分,它详细介绍了寄存器每一个位的功能。这里不再详细讲解。
  • 在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。  <特殊功能寄存器地址映象表(一)>  <特殊功能寄存器地址映象表(二)>  <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 358,341
精华内容 143,336
热门标签
关键字:

寄存器的功能是