各个寄存器的作用

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


数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些
低16位寄存器分别命名为:AX、BX、CX、DX
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄
存器都有自己的名称,可独立存取。

AX
寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、
除、输入/输出等操作,它们的使用频率很高;

BX
寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用;

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

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

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32cpu中可以。 2、变址寄存器 ( ESI EDI )



32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响
高16位的数据。

寄存器ESI、EDI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 。
3、指针寄存器(EBP、ESP)


32位CPU有2个32位通用寄存器EBP和ESP。其低16位对先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。

寄存器EBP、ESP称为指针寄存器(PointerRegister),主要用于存放堆栈内存储单元的偏移便。

指针寄存器不可分割成 8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:

BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈 中的数据;

SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
4、段寄存器(CS、DS、ES、SS、FS、GS)


段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。



CPU内部的段寄存器:

CS——代码段寄存器(Code Segment Register)
”Jum 段地址: 偏移地址“

Jmp ax, 执行指令前:ax = 1000H, cs = 2000H, ip =0003H
执行指令后: ax = 1000H, cs = 2000H, ip = 1000H
DS——数据段寄存器(Data Segment Register)
mov ax, 1000H
mov ds, ax

ES——附加段寄存器(Extra Segment Register)

SS——堆栈段寄存器(Stack Segment Register)
mov ax, 1000H
mov ss, ax
mov sp, 0010H

FS——附加段寄存器(Extra Segment Register)

GS——附加段寄存器(Extra Segment Register)

5、指令指针寄存器(IP)

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。

指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。

...全文
524 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧