The X86 architecture is a general processor architecture developed by Intel. It has been 40 years since the first version was released. At present, almost all PC processors use x86 architecture. The follow are some notes on previous studies of X86 architecture.
X86字符集(指令)
- 行结束(
EOL
)字符的数字值为10 POP
—> 出栈指令EQU
—> 等值语句PUSH
—> 将一个源码中指定的16位或者32位寄存器或内存值入栈PUSHF
—> 将16位标志寄存器的值入栈PUSHFD
—> 将32位EFLAGS
入栈PUSHA
—> 将所有8个16位通用寄存器入栈PUSHAD
—> 将所有8个32位通用寄存器入栈CLC
—>CF
标志位清零STC
—>CF
标志位置1
X86条件转移指令
JNZ
—> 不为零跳转(零标志位EFLAGS
第6位ZF
)JMP
—> 跳转指令(无条件)MOVSX
—> 带符号扩展一起移动MUL
—> 无符号乘DIV
—> 无符号除IMUL
—> 有符号乘IDIV
—> 有符号除CMP
—> 算数比较指令(源操作数 - 目标操作数) 注:操作数不受影响,影响标志位JE
—> 相等转(此时ZF==1
)JNE
—> 不等转(此时ZF==0
)注:ZF
为零标志位,为EFLAGS
第6位JB
—> 以下则转(此时CF==1
)JNB
—> 以下或等于转(此时CF==1&&ZF==1
)注:CF
为进位标志,为EFLAGS
第0位AND
—> 与OR
—> 或XOR
—> 异或NOT
—> 非SHL
—> 左移SHR
—> 右移 注:以上两个移位为不循环,移入CF
(EFLAGS
第0位)ROL
—> 循环左移ROR
—> 循环右移 注:以上两个移位不带进位CF
RCL
—> 循环左移RCR
—> 循环右移 注:以上两个移位连同进位位CF
一起移动
X86指令常识
- 堆栈朝着低内存的方向向下增长
- 堆栈区在内存的最高位处
- 在堆栈中读到
SP/ESP
的值,SP/ESP
不会改变 - 内存前 1024 字节存放中断向量表,编号 0-255 ,每项4字节,通过
INT 80H
调用,服务编号在寄存器EAX
中 - 在任何一个时间段中,只有一个堆栈在工作,(
ESP
指向栈顶) - UNIX 内核调用面向缓冲区而非面向字面量
- 段寄存器不能进行按位逻辑运算,可以将段寄存器中内容复制到通用寄存器中,进行逻辑运算之后再拷回段寄存器中
- 段栈帧:
push ebp
mov ebp,esp
- 之后一般不要改变
ebp
的值,若改变了也要能恢复
常用寄存器
16 位段寄存器(32 位前加
E
)CS
(代码段 code segment) -> 指向 1M 内存的某个地址DS
(数据段 data segment)SS
(堆栈段 stack segment)ES
(附加段寄存器 extra segment)FS
、GS
-> 是ES
的克隆
16 位通用寄存器(32 位前加
E
)AX
、BX
、CX
、DX
- 32 位为
EAX
、EBX
、ECX
、EDX
- 低 16 位为
AX
、BX
、CX
、DX
- 低 16 为被分为两个 8 位,
AH
、AL
、BH
、BL
、CH
、CL
、DH
、DL
- 32 位为
BP
、SI
、DI
、SP
- 低 16 位为
BP
、SI
、DI
、SP
- 整个 32 位为
EBP
、ESI
、EDI
、ESP
(ESP
为堆栈)
- 低 16 位为
IP
为指令指针寄存器,在CS
中移动- 标志寄存器
FLAGS
(16位)和EFLAGS
(32位)
… | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ID | OF | DF | IF | SF | ZF | AF | PF | CF | ||||||||||||||
CPU识别标志 | 溢出标志 | 方向标志 | 中断使能标志 | 符号标志 | 零标志 | 辅助进位 | 奇偶标志 | 进位标志 |

...
...
00:00
00:00
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !