【2020.11.16】JCC

  • 能修改EIP的指令有:JMP、CALL、RET

  • JCC指令修改EIP寄存器属于无条件修改

  • 但JCC指令修改EIP寄存器需要前置条件:标志寄存器中的值

null

null

  • CF:Carry flag(bit 0)

  • 若算数操作产生的结果在最高有效位(most-significant bit)发生进位或借位,则将其置1,反之清零。

  • 这个标志通常用来指示无符号整数运算的溢出状态。

例:
MOV AL, 0xFE
ADD AL, 0x2

MOV AL, 0x7F
SUB AL, 0xFF

  • PF:Parity flag(bit 1)

  • 如果结果的最低有效字节(least-significant byte)包含偶数个1位,则将其置1,反之清零。

利用PF可进行奇偶校验检查:
需要传输"1100 1110",数据中包含5个"1",所以其奇校验位位"0",同时把"1100 1110 0"传输给接收方,接收方收到数据后再一次计算奇偶性,"1100 1110 0"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。

例:
MOV AL,0xCE
ADD AL,0x0

  • AF:Auxiliary Carry flag(bit 4)

如果算数操作在结果的第三位发生进位或错位,则将其置1,反之清零。

这个标志在BCD(binary-code decimal)算数运算中被使用。

  • ZF:Zero flag(bit 6)

  • 若结果为0,则将其置1,反之清零。

经常与CMP或TEST等指令一起使用:
例:判断2个值是否相等
MOV EAX, 0x100
MOV ECX, 0x100
CMP EAX, ECX
CMP指令相当于SUB指令,但是两个操作数不会被改变。
例:判断某个值是否为0
TEST EAX, EAX
TEST指令相当于AND指令,但是两个操作数不会被改变。

  • SF:Sign flag(bit 7)

  • 该标志被设置为有符号整型的最高有效位。

  • 0指示结果为正,反之则为负。

例:
MOV AL, 0x7F
ADD AL, 0x2

MOV AL, 0xFE
ADD AL, 0x2

  • OF:Overflow flag(bit 11)
    通常用于反映有符号数相减运算所得结果是否溢出。

可以这样理解:
如果是无符号数运算,是否溢出看CF位。
如果是有符号数运算,是否溢出看OF位。

例:
MOV AL, 0x7F
ADD AL, 0x2

  • DF:Direction flag(bit 10)

这个方向标志控制串指令(MOVS、CMPS、SCAS、LODS以及STOS)。设置DF标志使得串指令自动递减(从高地址向低地址方向处理字符串),清除该标志则使得串指令自动递增。
STD以及CLD指令分别用于设置以及清除DF标志位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值