进位标志CF(无符号):如果运算结果的最高位产生了一个进位或错位,那么,其值为1,否则其值为0。运算结果的最高位包括字操作的第15位和字节操作的第7位。移位指令也会将 操作数的最高位或最低位移入CF。
CF:什么是最高位进位,什么是最高位错位
1000 0000
1000 0001
1111 1111
80-81=FF=-1 CF=1
PF:奇偶标志:用于反映运算结果低8位中“1”的个数。“1”的个数为偶数,则PF置1,否则置0。
803
1000 0000 0011
1000 0000 0100
804
1000 0000 0100
814
1000 0001 0100
OF(Overflow Flag)溢出标志:反映有符号数加减运算是否溢出。如果运算结果超过了8位或者16位有符号数的表示范围,则OF置1,否则置0。
加法:若同符号数相加,而结果符号与之相反,则OF=1,否则OF=0。
加法:若不同符号相加,一定没有溢出。
减法:被减数与减数异号,而结果的符号与减数相同则OF=1,否则OF=0。
符号位有进位:1
最高有效数值位向符号位产生的进位:0
1 xor 0==1 所以OF=1
1.JMP指令(无条件跳转指令):修改EIP的值
JMP是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。
2.CALL指令:CALL 指令调用一个过程,指挥处理器从新的内存地址开始执行。过程使用 RET(从过程返回)指令将处理器转回到该过程被调用的程序点上。
从物理上来说,CALL 指令将其返回地址压入堆栈,再把被调用过程的地址复制到指令指针寄存器。当过程准备返回时,它的 RET 指令从堆栈把返回地址弹回到指令指针寄存器。32 位模式下,CPU 执行的指令由 EIP(指令指针寄存器)在内存中指岀。16 位模式下,由 IP 指出指令。
- 比较指令:
- CMP指令:
cmp指令格式: cmp 操作对象1,操作对象2
功能: 计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进行设置.比如cmp ax,ax 是做ax - ax 的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位.
该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。
只是根据相减的结果来改变零标志位,当两个操作数相等的时候,零标志位置1。
② TEST 指令:
指令格式:TEST R/M,R/M/IMM
TEST 指令在两个操作数的对应位之间进行 AND 操作,并根据运算结果设置符号标志位、零标志位和奇偶标志位。
TEST 指令与 AND 指令唯一不同的地方是,TEST 指令不修改目标操作数。TEST 指令允许的操作数组合与 AND 指令相同。在发现操作数中单个位是否置位时,TEST 指令非常有用。
1 and 1 =1
1 and 0= 0
0 and 1= 0
0 and 0= 0
常见用法:用这个指令,可以确定某寄存器是否等于零。