认识标志寄存器:CF/PF/AF/ZF/SF/OF
本帖最后由 niucaidi 于 2021-7-8 22:52 编辑##标志寄存器
- `进位标志CF(Carry Flag)`:如果`加法`运算结果的`最高位`产生了一个进位,或者在`减法`运算过程中`最高位不够减,向最高位的前面一位进行了借位`,那么其值为`1`,否则为`0`
- 例1:观察Mov al,0xEF 丨 ADD,al,2的结果
- 例2:观察Mov al,0xFE 丨 ADD,al,2的结果
- `奇偶标志PF(Parity Flag)`:奇偶标志PF用于反映运算结果的`最低有效字节`中`1的个数`的奇偶性。如果`1的个数`为偶数,则PF的值为`1`,否则为`0`.
- MOV AL,3
- ADD AL,3
- ADD AL,2
- `辅助进位标志AF(Auxiliary Carry Flag)`:在发生下列情况时,辅助进位标志AF的值为`1`,否则为`0`
- 1.在字操作时,发生低字节向高字节进位或借位时
- 2.在字节操作时,发生低4位向高4位进位或借位时
- 例1:观察Mov eax,0x55EEFFFF 丨 ADD EAX,2的结果
- 例2:观察MOV AX,5FEF 丨 ADD AX,2的结果
- 例3:观察MOV AL,4E 丨 ADD AL,2
- `零标志ZF(zero Flag)`:零标志位用来反映运算结果是否为`0`,如果运算结果是`0`,那么其值为`1`,否则为`0`.在判断运算结果是否为`0`时可以使用此标志位
- 例1:XOR EAX,EAX
- 例2:MOV EAX,2 丨 SUB EAX,2
- `符号标志SF(Sign Flag)`:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
- 例1:MOV AL,7F
- 例2:ADD AL,2
- `溢出标志位OF(Overflow Flag)`:溢出标志位`OF`用于反映有符号数加减运算所得到的结果是否溢出,如果运算结果超出当前位数所能表示的范畴,则称为溢出,`OF`的值被置为`1`,否则`OF`的值为`0`,在具体运算过程中`OF`会进行两个判断,分别为:`一.符号位有没有进位,有进位得到1,无进位得到0`,`二.最高有效数值位向符号位产生的进位,有进位得到1,无进位得到0`,最后将上述两个结果进行`异或运算(xor)`,若运算结果为`1`,则将`oF`置为`1`,否则为`0`
- 最高位进位与溢出的区别
- 进位标志`CF`表示`无符号`数运算结果是否超出范围
- 溢出标志`OF`表示`有符号`数运算结果是否超出范围
- 溢出标志主要是给`有符号`运算使用的,在有符号运算中有如下规律
- `正 + 正 = 正`,倘若结果为`负`,则说明有溢出
- `负 + 负 = 负`,倘若结果为`正`,则说明有溢出
- `正 + 负`永远不会溢出
- 附作业:
还是要结合实践来,直接看这个只有概念,很容易忘记,自己可以看编译原理的书,写一写例子就了解了,现在很多高级语言,已经屏蔽了寄存器等概念,但是对于破解来说,却是很重要的
编程就像是造房子,做规划做设计,可能不用了解每一块砖,但是破解的思路却完全不一样,有些时候从一个小洞,就能进入这所房子 以前学汇编,专门买了一本书,时间和精力有限,只学了一半就停止了。
今天看到楼主写得帖子,又想起曾经学汇编的那个时期。
个人感觉学汇编,最好是带着兴趣,加上实践磨练才行。 我没基础呀,这是汇编方面的知识点吗?
支持你 若梦丶陌兮 发表于 2021-7-8 19:59
我没基础呀,这是汇编方面的知识点吗?
支持你
是的这些内容是最基础的 了 回想起来当年学汇编的恐惧:rggrg DEvK0 发表于 2021-7-8 20:12
回想起来当年学汇编的恐惧
还好吧 我是先学的正向不然肯定也是一个头两个大 谢谢分享,ZF标志位破解还是经常用到的 我觉得非常好
很好的总结,谢谢分享。 谢谢分享,已收藏 谢谢楼主分享........................
页:
[1]
2