x86

The X86 Architecture

The X86 architecture is a set of computer language instructions executed by microprocessors. It refers to the abbreviation of the standard number of an Intel general purpose computer series and also identifies a set of general purpose computer instructions.

Posted by Dusign on 2019-09-28
Words 852 and Reading Time 3 Minutes
Viewed Times

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 —> 右移 注:以上两个移位为不循环,移入 CFEFLAGS 第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)
    • FSGS -> 是 ES 的克隆
  • 16 位通用寄存器(32 位前加 E

    • AXBXCXDX
      • 32 位为 EAXEBXECXEDX
      • 低 16 位为 AXBXCXDX
      • 低 16 为被分为两个 8 位,AHALBHBLCHCLDHDL
    • BPSIDISP
      • 低 16 位为 BPSIDISP
      • 整个 32 位为 EBPESIEDIESPESP为堆栈)
  • 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识别标志 溢出标志 方向标志 中断使能标志 符号标志 零标志 辅助进位 奇偶标志 进位标志

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 !

...

...

00:00
00:00