x86 寄存器

在x86汇编编程中一个主要的工具就是CPU中的寄存器。这些寄存器就像是在建立在CPU中的变量。使用寄存器代替内存来存储值可以使得处理过程更快和更干净。x86系列处理器有多个不同的寄存器提供使用。这篇文章就是描述每个寄存器的主要用途以及使用方法。需要说明的是,这里描述的规则更像是使用的建议,而不是严格的标准。一些操作确实需要某些特定类型的寄存器才能完成,但大部分的操作你可以自由的使用任意的寄存器。

以下列出的是386处理器提供的一些处理器。需要说明的是,虽然列出的是32位的处理器,但可以分解为用16位或甚至8位的寄存器来使用。

通用寄存器:
EAX EBX ECX EDX

段寄存器
CS DS ES FS GS SS

索引和指针寄存器
ESI EDI EBP EIP ESP

指示寄存器
EFLAGS

通用寄存器

通用寄存器是使用最频繁的寄存器,大部分的指令都会用到这些寄存器。32位的通用寄存器有相应的16位和8位寄存器。

32位: EAX EBX ECX EDX
16位: AX BX CX DX
8位 : AH AL BH BL CH CL DH DL

8位寄存器的前缀“H”和“L”代表高字节和低字节部分。下面来看一下他们主要使用的地方:

EAX,AX,AH,AL:这些称为累加器寄存器(Accumulator registers)
其主要用于I/O端口访问、计算、中断等。

EBX,BX,BH,BL:这些称为基址寄存器(Base registers)
其主要用于作为基指针访问内存、获得一些中断的返回值等。

扫描二维码关注公众号,回复: 58568 查看本文章

ECX,CX,CH,CL:这些称为计数寄存器(Counter register)
其主要用于循环计数以及转移、获得一些中断值等。

EDX,DX,DH,DL:这些称为数据寄存器(Data register)
用于I/O端口访问、计算、中断等。

段寄存器

段寄存器负责保存分段的地址。这些寄存器只有16位,它们只可以被通用寄存器或者一些特殊指令设置。段寄存器起了指针的作用,它指向一个段描述符,描述了一个段落的起始地址和大小。

CS:保存你所运行的程序的代码段。改变它的值回使得计算机当机。

DS:保存你的程序访问的数据段。改变它的值可能会获得错误的数据。

ES,FS,GS:这些事额外的段寄存器,用于远指针寻址。

SS:保存你的程序所使用的栈段。有时它的值与DS的值相等。改变它的值可能会导致不可预测的错误。

索引和指针

通过索引和指针寄存器可以表示地址的偏移部分。这些寄存器可以通过与段寄存器结合区指示一个远地址。带有“E”前缀的寄存器只能用于保护模式下。

ES:EDI
EDI DI:目的地索引寄存器,用于字符串、内存序列的拷贝和设置,以及结合ES可指向远地址。

DS:ESI
ESI SI:源索引寄存器。用于字符串和内存序列的拷贝。

SS:EBP
EBP BP:栈基址寄存器,保存栈的基地址。

SS:ESP
ESP SP:栈帧指针寄存器。保存栈顶的地址。

CS:EIP
EIP IP:索引指针。保存下一条指令的偏移量。只读。

EFLAGS寄存器

EFLAGS寄存器保存处理器的状态。它被很多指令用于比较一些参数、条件循环以及条件跳转。每一位保存最后一条执行指令的特定参数。

Bit Label Desciption

0 CF Carry flag
2 PF Parity flag
4 AF Auxiliary carry flag
6 ZF Zero flag
7 SF Sign flag
8 TF Trap flag
9 IF Interrupt enable flag
10 DF Direction flag
11 OF Overflow flag
12-13 IOPL I/O Priviledge level
14 NT Nested task flag
16 RF Resume flag
17 VM Virtual 8086 mode flag
18 AC Alignment check flag (486+)
19 VIF Virutal interrupt flag
20 VIP Virtual interrupt pending flag
21 ID ID flag

其他的一些寄存器

还有其他的一些寄存器如控制寄存器、调试寄存器、测试寄存器以及保护模式段寄存器等。
控制寄存器为CR0到CR4;
调试寄存器为DR0到DR7;
测试寄存器为TR3到TR7;
保护模式下的段寄存器有GDTR、IDTR、LDTR以及TR等。

参考资料:http://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html

猜你喜欢

转载自blog.csdn.net/leasonw/article/details/80067404
今日推荐