title: 汇编达人视频学习8(EFL标志寄存器、JCC指令)
date: 2021年8月5日 09点40分
tags: 汇编达人
categories: 汇编达人
27、标志寄存器(EFLAGS)
1、CF(bit 0)【Carry flag】
若算术操作产生的结果在最高有效位发生进位或借位则将其置为1,反之清零。
这个标志通常用来指示无符号整型运算的溢出状态。
例:
进位:mov al,0xfe
add al,2
借位:mov al,0x7f
sub al,0xff
2、PF(bit 2)【parity flag】奇偶检验位
如果结果的最低有效字节(就是最后一个字节)包含偶数个1位,则置1,反之清零。
利用PF可进行奇偶检验检查
例子:
需要传输"11001110",数据中含5个"1",同时最低有效位包含3个1所以其奇偶验位为"0",同时把"11001110"传输给接收方,接收方收到数据后再一次计算奇偶性,“11001110"中仍然含有5个"1”,且最低有效位还是3个1,所以接收方计算出的奇偶验位还是"0",与发送方一致,表示在此次传输过程中未发生错误
3、AF(bit 4)【Auxiliary Carry flag】
如果算术操作在结果的第3位发生进位或借位则将该标志置为1,否则清零
这个标志在BCD算术运算中被使用。
4、ZF(bit 6)【Zero flag】
若运算(加减乘除左移右移)的结果为0,则将它置为1,反之清零。
经常与CMP(相当于SUB)或者TEST(相当于AND)等指令一起使用
例1:判断2个值是否相等
mov eax ,100
mov ecx,100
sub eax,ecx // 这里sub相减之后,会改变eax的值,所以用cmp指令
(CMP指令相当于SUB指令,但是相减的结果并不保存到第一个操作数中)
例2:判断某个值与运算之后是否为0
AND eax,eax
TEST eax,eax
(TEST指令相当于AND指令,但是与的结果并不保存到第一个操作数中)
5、SF(bit 7)【Sign flag】
该标志被设为有符号整型的最高有效位
(0指示结果为正,反之则为负)
例子:
mov al,0x7f
add al,2
mov al,0xfe
add al,2
6、OF(bit 11)【Overflow flag】
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
可以这样理解:
如果是无符号位运算,是否溢出看CF位
如果是有符号位运算,是否溢出看OF位
有符号和无符号,取决与我们本身
例子:
mov al,0x7f
add al,2
7、DF(bit 10)【Direction flag】
这个方向标志控制串指令(MOVS,CMPS,SCAS,LODS以及STOS)设置DF标志(也就是让DF为1)使得串指令自动递减(从高地址向低地址方向处理字符串),清除该标志(也就是DF为0)则使得串指令自动增加。
STD(把DF设置成1)以及CLD(把DF设置成0)指令分别用于设置以及清除DF标志
我们知道DF是1的时候,用完MOVS指令,那么EDI、ESI就会自减1 2 4,反之为0的时候,自加1 2 4
8、JCC指令
JCC指令要不要修改EIP的值,跟标志寄存器的位有关。