x86 寄存器
权威介绍网址如下:x86 寄存器 (utoronto.ca)
在 x86 程序集中编写程序的主要工具是处理器寄存器。寄存器类似于处理器中构建的变量。使用寄存器而不是内存来存储值使该过程更快,更清晰。x86系列处理器的问题在于要使用的寄存器很少。本节介绍每个寄存器的主要用途以及使用它们的方法。请注意,这里描述的规则更多的是建议而不是严格的规则。有些操作绝对需要某种寄存器,但大多数操作都可以自由地使用任何一个。
以下是 386 及更高版本处理器上的可用寄存器列表。此列表显示 32 位寄存器。大多数可以分解为16位甚至8位寄存器。 通用寄存器 正如标题所说,通用寄存器是我们最常使用的寄存器,大多数指令都是在这些寄存器上执行的。它们都可以分解为16位和8位寄存器。 8 位寄存器上的“H”和“L”后缀代表高字节和低字节。有了这个,让我们看看他们各自的主要用途 Segment 寄存器
Segment 寄存器保存各种项目的段地址。它们仅提供 16 个值。它们只能通过通用寄存器或特殊说明进行设置。其中一些对于程序的良好执行至关重要,当您准备好进行多段编程索引和指针索引和指针
以及和地址的偏移部分时,您可能需要考虑使用它们。它们有各种用途,但每个寄存器都有特定的功能。它们有时与段寄存器一起使用以指向远地址(在1Mb范围内)。前缀为“E”的寄存器只能在保护模式下使用。 EFLAGS 寄存
器 EFLAGS 寄存器保存处理器的状态。它被许多入侵修改,用于比较某些参数,条件循环和条件跳转。每个位都保存最后一条指令的特定参数的状态。以下是列表: 未记录的寄存器
英特尔未详细记录 80386 及更高版本的处理器上有一些寄存器。它们分为控制寄存器、调试寄存器、测试寄存器和保护模式分段寄存器。据我所知,控制寄存器和分段寄存器都用于保护模式编程,除了奔腾上已卸下的测试寄存器外,所有这些寄存器都可以在80386及更高版本的处理器上使用。控制寄存器为 CR0 至 CR4,调试寄存器为 DR0 至 DR7,测试寄存器为 TR3 至 TR7,保护模式分段寄存器为 GDTR(全局描述符表寄存器)、IDTR(中断描述符表寄存器)、LDTR(本地 DTR)和 TR。
General registers EAX EBX ECX EDX Segment registers CS DS ES FS GS SS Index and pointers ESI EDI EBP EIP ESP Indicator EFLAGS 32 bits : EAX EBX ECX EDX 16 bits : AX BX CX DX 8 bits : AH AL BH BL CH CL DH DL EAX,AX,AH,AL : Called the Accumulator register. It is used for I/O port access, arithmetic, interrupt calls, etc... EBX,BX,BH,BL : Called the Base register It is used as a base pointer for memory access Gets some interrupt return values ECX,CX,CH,CL : Called the Counter register It is used as a loop counter and for shifts Gets some interrupt values EDX,DX,DH,DL : Called the Data register It is used for I/O port access, arithmetic, some interrupt calls. CS : Holds the Code segment in which your program runs. Changing its value might make the computer hang. DS : Holds the Data segment that your program accesses. Changing its value might give erronous data. ES,FS,GS : These are extra segment registers available for far pointer addressing like video memory and such. SS : Holds the Stack segment your program uses. Sometimes has the same value as DS. Changing its value can give unpredictable results, mostly data related. ES:EDI EDI DI : Destination index register Used for string, memory array copying and setting and for far pointer addressing with ES DS:ESI EDI SI : Source index register Used for string and memory array copying SS:EBP EBP BP : Stack Base pointer register Holds the base address of the stack SS:ESP ESP SP : Stack pointer register Holds the top address of the stack CS:EIP EIP IP : Index Pointer Holds the offset of the next instruction It can only be read 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 Those that are not listed are reserved by Intel.