CPU寄存器

通用寄存器

16位数据寄存器

AX(AH AL)

BX(BH BL)

CX(CH CL)

DX(DH DL)

32位是E开头 

EAX EBX ECX EDX

64位R开头

RAX RBX RCX RDX



指针寄存器

16位指针寄存器

IP(Instruction Pointer) - 存储下一个指令到当前指令的偏移地址,cs:ip 代码段里当前指令的绝对地址

SP(Stack Pointer) - 在程序栈里的偏移地址,ss:sp 指向程序栈里的数据或者地址的当前位置

BP(Base Pointer) - 存储参数的偏移地址 ss:bp 可以得到参数的地址,也可以和 di si 联合作为特殊寻址的基寄存器

32位以E开头

EIP ESP EBP

64位以R开头

RIP RSP RBP
x86-64 rip 就是指向下一个指令的地址


索引寄存器

用于索引寻址,有时用于加法,减法

SI(Source Index) - 可以用于字符串操作的起始索引

DI(Destination Index) - 可以用于字符串操作的目的索引

32位

ESI EDI

64位

RSI RDI


别名

R0  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10  R11  R12  R13  R14  R15
RAX RCX RDX RBX RSP RBP RSI RDI

R0D R1D R2D R3D R4D R5D R6D R7D R8D R9D R10D R11D R12D R13D R14D R15D
EAX ECX EDX EBX ESP EBP ESI EDI

R0W R1W R2W R3W R4W R5W R6W R7W R8W R9W R10W R11W R12W R13W R14W R15W
AX  CX  DX  BX  SP  BP  SI  DI

R0B R1B R2B R3B R4B R5B R6B R7B R8B R9B R10B R11B R12B R13B R14B R15B
AL  CL  DL  BL  SPL BPL SIL DIL


控制寄存器

OF(Overflow Flag) - 溢出标志,有符号算术运算高位溢出

DF(Direction Flag) - 决定移动或者比较字符串的方向,0 - 从左到右,1 - 从右到左

IF(Interrupt Flag) - 0 禁用外部中断,1 启用外部中断 

TF(Trap Flag) - 单步调试模式

SF(Sign Flag) - 算术运算结果符号标志,0 正,1 负

ZF(Zero Flag) - 0标志位,算术结果或者比较结果,非0结果为1

AF(Auxiliary Carry Flag) - 算术运算第3位进位到第4位

PF(Parity Flag) - 奇偶标志位,0 偶数,1 奇数

CF(Carry Flag) - 进位标志位,最左边高位进位,也可以存储在移位和旋转操作后的最后一位


段寄存器

段是特殊部位来存储数据、代码、栈

CS(Code Segment) - 代码段的起始地址

DS(Data Segment) - 数据段的起始地址,数据段包含数据、常量、工作区。

SS(Stack Segment) - 栈的起始地址

下面是额外的段来存储数据

ES(Extra Segment) - 是扩展段寄存器

FS(Flag Segment) - 是标志段寄存器

GS(Global Segment - )是全局段寄存器

汇编里,程序需要访问内存地址,段里的所有的内存地址一般不直接存储在寄存器里,而是存储相对于起始地址的偏移量,

段的起始地址都是16字节对齐的,即16进制地址最右边那位总是0

段寄存器存储段的起始地址,所以如果要获取段里的准确的地址,可以通过偏移量来获取


通用寄存器展示图


所有的寄存器展示图 所有寄存器

上一篇: 内联汇编
下一篇: nasm与masm与AT&T差异
作者邮箱: 203328517@qq.com