汇编语言--32位寄存器详解

汇编语言–32位寄存器详解

1. 寄存器概述(16个):

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

2.数据寄存器

32位CPU有4个32位通用寄存器:EAX、EBX、ECX和EDX。8086CPU下的16位寄存器分别为AX、BX、CX和DX。
这4个16位寄存器又可分割成8个独立的8位寄存器(AX: ah、al BX:bh、bl CX:ch、cl DX:dh、dl)。

  • AX和al通常称为累加器,累加器可用于乘、除、输入/输出等操作, 它们的使用频率很高。

  • BX称为基地址寄存器,它可作为存储器指针来使用。

  • CX称为计数寄存器,在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用cl来 指明位移的位数。

  • DX称为数据寄存器,在进行乘、除运算时,它可以为默认的操作数参与运算,也可用于存放I/O的端口地址。

    在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

3.段寄存器

32位CPU有6个段寄存器,分别如下:
CS:代码段寄存器 ES:附加段寄存器
DS:数据段寄存器 FS:附加段寄存器
SS:堆栈段寄存器 GS:附加段寄存器
在16位CPU系统中,只有4个段寄存器(CS、DS、ES、SS)。

4.变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI,其低16位对应8086CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
ESI、EDI、SI和DI称为变址寄存器,它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器。

5.指针寄存器

32位CPU有2个32位通用寄存器EBP和ESP,其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
EBP、ESP、BP和SP称为指针寄存器,主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器。

  • BP为基指针寄存器,用它可直接存取堆栈中的数据。
  • SP为堆栈指针寄存器,用它只可访问栈顶。

6.指令指针寄存器

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。
指令指针EIP、IP是存放下次将要执行的指令在代码段的偏移地址。

7.标志寄存器

汇编语言--32位寄存器详解_第1张图片

8、 32位地址的寻址方式

注意:在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为偏移地址的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、和ESP)都可以是偏移地址的一个组成部分。

比如,指令:mov ebx, [eax+edx*2+300]
eax就是基址寄存器,edx就是变址寄存器,300H就是偏移常量。

注意:

  1. 地址中寄存器的书写顺序决定该寄存器是基址寄存器还是变址寄存器。如:[ebx+ebp]中的ebx是基址寄存器,ebp是变址寄存器,而[ebp+ebx]中的ebp是基址寄存器,ebx是变址寄存器,可以看出,左边那个是基址寄存器,另一个是变址寄存器。

  2. 默认段寄存器的选用取决于基址寄存器。

  3. 基址寄存器是ebp或esp时,默认的段寄存器是SS,否则,默认的段寄存器是DS。

  4. 在指令中,如果显式地给出段寄存器,那么显式段寄存器优先。

你可能感兴趣的:(汇编语言)