Day2:寻址方式、标志寄存器、JCC指令

寻址方式、标志寄存器、JCC指令

寻址方式

寻址方式 示例 典型用途
立即数寻址 mov eax,42 加载常数
寄存器寻址 add eax,ebx 寄存器运算
直接寻址 mov eax,[0x8040000] 访问全局变量
寄存器间接寻址 mov eax,[esi] 指针解引用
基址寻址 mov [ebp-4],ecx 栈帧局部变量
变址寻址 mov eax,[esi*4] 数组遍历
基址变址寻址 mov eax,[ebx+esi*2+8] 结构体,多维数组
相对寻址 jmp label 跳转,函数调用

标志寄存器

标志位 名称 作用
CF Carry Flag 进位标志位 最高位发生进位/借位时置1
PF Parity Flag 奇偶标志位 1的个数为偶数时置1
AF Auxiliary Carry Flag 辅助进位标志位 bit3和bit4之间发生进位/借位时置1
ZF Zoro Flag 零标志位 为0时置1
SF Sign Flag 符号标志位 最高位为1(负数)时置1
OF Overflow Flag 溢出标志位 有符号数溢出时置1
DF Direction Flag 方向标志位 为1时从高位到低位处理字符串,std打开,cld关闭
IF Interrupt Flag 中断标志位 为1时可以响应中断请求,sti打开,cli关闭
TF Trap Flag 陷阱标志位 为1时会触发异常,被调试器捕获,用于单步调试

JCC指令

  • TEST指令:TEST op1,op2

    将两个操作数进行&操作(op1 & op2)并更新标志位:

    CF=0,OF=0

    &结果为0:ZF=1

    结果最高位为1:SF=1

  • CMP指令:CMP op1,op2

    进行减法操作(op1 - op2)并更新标志位:

    若op1 < op2(发生借位),CF=1

    若发生有符号溢出,OF=1

    op1 == op2(结果为0),ZF=1

    op1 < op2(结果为负数),SF=1

  • JCC指令:JCC Label

    指令 条件 描述
    JMP 无条件 无条件跳转
    JE / JZ ZF=1 Jump if Equal / Jump if ZF
    JNE / JNZ ZF=0 Jump if Not Equal / Jump if Not ZF
    JS SF=1 Jump if SF
    JNS SF=0 Jump if Not SF
    JP / JPE PF=1 Jump if PF / Jump if Parity Even
    JNP / JPO PF=0 Jump if Not PF / Jump if Parity Odd
    JO OF=1 Jump if OF
    JNO OF=0 Jump if Not OF
    JB / JNAE / JC CF=1 Jump if Below / Jump if Not Above or Equal / Jump if CF
    JNB / JAE / JNC CF=0 Jump if Not Below / Jump if Above or Equal / Jump if Not CF
    JBE / JNA CF=1 或 ZF=1 Jump if Below or Equal / Jump if Not Above
    JA / JNBE CF=0 且 ZF=0 Jump if Above / Jump if Not Below or Equal
    JL / JNGE SF ≠ OF Jump if Less / Jump if Not Greater or Equal
    JGE / JNL SF = OF Jump if Greater or Equal / Jump if Not Less
    JLE / JNG ZF=1 或 SF ≠ OF Jump if Less or Equal / Jump if Not Greater
    JG / JNLE ZF=0 且 SF = OF Jump if Greater / Jump if Not Less or Equal

Day2:寻址方式、标志寄存器、JCC指令

https://sydzi.github.io/2025/07/07/Day2-寻址方式/

作者

SydzI

发布于

2025-07-07

更新于

2026-02-15

许可协议

评论