目录
进位标志CF(Carry Flag)
如果运算结果的最高位产生了一个进位或借位,那么,其值1,否则其值为0。
最高位进位是指二进制数的最高位向前一位进1,最高位借位是指二进制数的最高位向前一位借1,例如80-81(十六进制下),其实就是1000 0000 - 1000 1111,运算可得结果为1111 1111 ,即FF
这里最高位就因为被后一位借1而小于减数的最高位,对前一位借1,因此FF的CF值就是1。
奇偶标志PF (Parity Flag)
统计操作数的最后一个字节中1的个数,如果是偶数个1则PF=1,否则PF=0。
重点是“最后一个字节”,PF位的值与其他字节中1的个数无关。
例如803(十六进制)是1000 0000 0011,它的PF值是1,804是1000 0000 0100,它的PF值是0。
溢出标志OF (Overflow Flag)
加法:若同符号数相加,而结果符号与之相反,则OF=1,否则OF=0;若不同符号数相加,一定没有溢出。
减法: 被减数与减数异号,而结果的符号与减数相同则OF=1,否则OF=0。
如何算OF?
例如:符号位有进位:1
最高有效数值位向符号位产生的进位:0
将这两个数值异或判断是否唯一,1 xor 0 == 1
为真,OF=1,为假,OF=0。
JMP指令
修改EIP,用法:jmp+地址(JMP只影响EIP,不影响堆栈和寄存器)。
CALL指令
可以与JMP指令一样修改EIP,但是CALL会将他下一行的地址压入栈中,使得ESP发生变化。
call指令执行后必须返回,也就是必须有一个retn指令,返回到call指令的下一行。