文章标题

EFLAGS寄存器
文章标题_第1张图片

  必记  : CF  PF  AF  ZF  SF   OF  

  1.进位标志寄存器 CF
    运算结果的最高位产生了  个进位 或借位,那么,其值位1,否则其值为0
     mov  al,0xef   mov al,0xfe
     mov  al,0xff      add al,2
  2.奇偶标志寄存器PF  
    奇偶标志PF用于反应运算结果中“1”的个数的奇偶性。
    如果 1  的个数为偶数,则PF的值为1 ;否则为0
  3.辅助进位标志AF
    a.在字操作时,发生低字节向高字节进位或错位时,
    b.在字节操作时,发生低字节向高字节进位或错位时
      mov eax,0x5555ffff              mov ax,0x5eff
      add eax,0x1                     add ax,1
  4.零标志位ZF
    零标志ZF反应计算结果是否为零
    运算结果最低字节为0,其值为1;否则为0.判断运算结果是否为0时,可用此标志位。
     xor eax,eax  
     mov eax,2 
     sub eax,2
   5.符号标志位SF 
     符号标志位SF用来反应运算结果的符号位,它与最高位相同。
      mov al,7f
      add al,2
   6.溢出标志OF
     溢出主要是给有符号运算使用的,在有符号的运算中,有如下规律:
     正 +  正 = 负  结果是负数,则说明有溢出;
     负 +  负 = 正  结果是正数,则说明有溢出。
     正 +  负  永远都不会有溢出

     1.无符号、有符号都不溢出
       mov al,8
       add al,8 
     2.无符号溢出、有符号不溢出
       mov al,0ff
       add al,2
     3.无符号不溢出,有符号溢出
       mov al,7f
       add al,2 
     4.无符号,有符号都溢出
       mov al,0fe
       add al,80
       ![这里写图片描述](https://img-blog.csdn.net/20170119211913469?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRHJlYW1SRQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

     无符号数只关注CF位
     无符号加起来是否超FF,有符号 正+正=负  负+负=正

0x02 指令
1.ADC指令:带进位加法
格式:ADC R/M , R/M /IMM
adc al,cl
adc byte ptr ds:[12ffc4],2
2.SBB指令:带借位减法
格式:SBB R/M , R/M /IMM
3.XCHG指令:交换数据
格式:XCHG R/M,R/M 两边宽度相同
xchg al,cl
xchg dword ptr ds:[0x12345663],eax
xchg word ptr ds:[0x12345663],ax
4.MOVS指令:移动数据 内存-内存
byte word dword
movs byte ptr es:[edi],byte ptr ds:[esi] 简写为 :MOVSB
movs word ptr es:[edi],word ptr ds:[esi] 简写为 :MOVSW
movs dword ptr es:[edi],dword ptr ds:[esi] 简写为 :MOVSD
DF 为1 则 -
5.STOS指令:将AL/AX/EAX中的值存储到[EDI]指定的内存单元
stos byte ptr es:[edi] 简写为stosb
stos word ptr es:[edi] 简写为stosw
stos dword ptr es:[esi] 简写为stosd
DF 位 为1,edi加4
DF 位 为0,edi减4

  6.rep指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令
    mov ecx,10
    rep stosd

你可能感兴趣的:(标志寄存器,逆向学习)