《汇编、C语言基础教程》第二章 汇编基础2.3 通用寄存器上(连载) 博客
  • 滴水逆向 等级 N0
    2018-11-28 08:42

    2.3  通用寄存器

    本节必须掌握的知识点:

    u  8位、16位、32位通用寄存器

    u 寄存器逻辑结构图

    u 寄存器的编号、顺序、及能存储数据的最大值

     

        计算机存储数据的地方有三个:处理器(CPU)、内存和硬盘。处理器的读写速度比内存快,内存的读写速度高于硬盘。寄存器就是处理器中用来存储数据的地方,寄存器的读写速度要高于内存。那么寄存器有多大,取决于计算机的位数,在32位计算机里最大宽度为32位,在64位计算机里最大宽度为64位。32位和64位CPU提供的所有宽度如下:

    ·32位处理器:8位 16位 32位

    ·64位处理器:8位 16位 32位 64位

    2.3.132位通用寄存器

    32位处理器中:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI这8个寄存器通常存放一般性的数据,被称为通用寄存器。它们都有各自的用途。【本节不做详细介绍,用到时会详细介绍】

    EAX、ECX、EDX、EBX为数据寄存器;

    ESP、EBP为指针寄存器;

    ESI、EDI变址寄存器。

    每个寄存器都有自己的逻辑结构,接下来看一下它们的逻辑结构是什么样的。

    2.3.2【寄存器逻辑结构】

    以EAX为例,寄存器的逻辑结构图如图2-3-1所示。

     

                                         图2-3-1

    EAX寄存器它本身是一个32位寄存器,那么它可以存储一个32位的数据。EAX寄存器是在32位处理器中工作的,它的上一代处理器是16位处理器,而16位处理器的上一代是8位处理器,为了保证兼容,使之前的处理器经过程序的修改可以在32位处理器上运行。使得EAX寄存器包含了16位、8位的寄存器。

    EAX寄存器可分为一个可独立使用的16位寄存器:AX(16位);16位寄存器还可以分为两个可以独立使用的8位寄存器: AH(8位~15位为高8位)、AL(0位~7位为低8位)。

     

    同理可得出ECX 、EDX、 EBX。

    ·ECX可分为:CX、CH、CL;

    ·EDX可分为:DX、DH、DL;

    ·EBX可分为:BX、BH、BL。

    而ESP、EBP、ESI、EDI这四个寄存器是分成了两段。

    以ESP为例,寄存器的逻辑结构图如图2-3-2所示。

     

                                          图2-3-2

    同理可得出EBP、ESI、EDI。

    ·EBP可分为:SP;

    ·ESI 可分为:SI;

    ·EDI可分为:DI。

    举例介绍了个别的寄存器逻辑结构,接下来我们来画出32位、16位、8位的通用寄存器逻辑结构图。

    2.3.3【通用寄存器逻辑结构图】

        通用寄存器逻辑结构必须记住,对以后学习有帮助,如图2-3-3所示

     

                                         图2-3-3

    从图2-3-3可以看出,这些寄存器排列是有顺序的,都是在0~31位之间,接下来我们来简单介绍他们各自存在的顺序和编号。切记它们的编号和顺序不能错,就像你的身份证号码,是唯一的。

    2.3.4【寄存器有自己的编号】

    32位寄存器有自己的编号,16位寄存器也有属于自己的独立的编号,同样8位寄存器也有属于自己的编号。当然,他们是重叠的,当改变了32位的寄存器,相应的16位寄存器也会跟着改变。切记它们的顺序不能记错。

     

    以通用寄存器为例,展示寄存器的编号,如图2-3-4所示。

     

                                        图2-3-4

     

    根据图2-3-4简单说明一下,32位的寄存器有8个:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI,每个寄存器都对应一个编号:0号,1号,2号,3号……还有16位的寄存器:AX,CX,DX,BX,SP,BP,SI,DI。对应的编号:0号,1号,2号,3号……同样8位的寄存器:AL,CL,DL,BL,AH,CH,DH,BH。对应的编号:0号,1号,2号,3号……。

    我们知道了通用寄存器有顺序有编号,那么它们有各自的名称及用途吗?

    2.3.5【32位通用寄存器的指定名称及用途

     

    ·EAX:累加器(Accumulator),操作数和结果数据累加器;

    ·ECX:计数(Counter),字符串和循环操作的计数器;

    ·EDX:用于保存乘法形成的部分结果或者除法之前部分被除数;

    ·EBX:基地址(Base), DS段的数据指针,在内存寻址时存放基地址;

    ·ESP:堆栈(Stack)指针,被形象地称为栈顶指针;

    ·EBP:基址指针(BASE POINTER), SS段的数据指针;

    ·ESI:字符串操作的源(Source)指针,SS段的数据指针;

    ·EDI:字符串操作的目标(Destination)指针,ES段的数据指针.

    【本节只是简单的描述,详细知识请参考Intel白皮书】

    我们知道了通用寄存器有顺序有编号有名字有用途,那么它们有多大哪?

    2.3.6【寄存器能存储数据的最大值】

    ·8位寄存器能存储数据的最大值为28

    ·16位寄存器能存储数据的最大值为216

    ·32位寄存器能存储数据的最大值为232

    总结:本节需要掌握的内容比较多希望大家能记住,对以后学习有帮助。

     

    u下一节介绍通用寄存器下。

    练习:

      1、自己在纸上能够按顺序写出8位、16位、32位通用寄存。

      2、自己在纸上画一遍8位、16位、32位通用寄存器逻辑图并熟练写出它们对应的编号。


  • 浏览 98
  • 点赞 0
  • 收藏 1
  • 分享 2
  • 查看云盘地址请登录
  • 点赞 已赞 收藏 已收藏
评论
    页 到
    talk top
    展开
    >