【X86寄存器学习笔记】这玩意到底是个啥?

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值