原文参见http://www.brokenthorn.com/Resources/OSDev7.html
General Purpose Registers
These are 32 bit registers that can be used for almost any purpose. Each of these registers have a special purpose as well, however.
- EAX - Accumlator Register. Primary purpose: Math calculations
- EBX - Base Address Register. Primary purpose: Indirectly access memory through a base address.
- ECX - Counter Register. Primary purpose: Use in counting and looping.
- EDX - Data Register. Primary purpose: um... store data. Yep, thats about it :)
Segment Registers
The segment registers modify the current segment addresses in real mode. They are all 16 bit.
- CS - Segment address of code segment
- DS - Segment address of data segment
- ES - Segment address of extra segment
- SS - Segment address of stack segment
- FS - Far Segment address
- GS - General Purpose Register
Remember: Real Mode uses the segment:offset memory addressing model. The segment address is stored within a segment register. Another register, such as BP, SP, or BX can store the offset address.
It is useually refrenced like: DS:SI, where DS contains the segment address, and SI contains the offset address.
Segment registers can be used within any program, from Ring 0 to Ring 4. Because they are basic assembly language, I will assume you already know how they work.
Index Registers
The x86 uses several registers that help when access memory.
- SI - Source Index
- DI - Destination Index
- BP - Base Pointer
- SP - Stack Pointer
Each of these registers store a 16 bit base address (that may be used as an offset address as well.)
On 32 bit processors, these registers are 32 bits and have the names ESI, EDI, EBP, and ESP.
On 64 bit processors, each register is 64 bits in size, and have the names RSI, RDI, RBP, and RSP.
The 16 bit registers are a subset of the 32 bit registers, which is a subset of the 64 bit registers; the same way with RAX.
The Stack Pointer is automatically incremented and decremented a certain amount of bytes whenever certain instructions are encountered. Such instructions include push*, pop* instructions, ret/iret, call, syscall etc.
The C Programming Language, in fact most languages, use the stack regularly. We will need to insure we set the stack up at a good address to insure C works properly. Also, remember: The stack grows *downward*!
Instruction Pointer / Program Counter
The Instruction Pointer (IP) register stores the current offset address of the currently exectuting instruction. Remember: This is an offset address, *Not* an absolute address!
The Instruction Pointer (IP) is sometimes also called the Program Counter (PC).
On 32 bit machines, IP is 32 bits in size and uses the name EIP.
On 64 bit machines, IP is 64 bits in size, and uses the name RIP.