004-标志寄存器

本文介绍了汇编语言中标志寄存器EFLAGS的使用,特别是push和pop指令对标志寄存器的影响。通过实例解析了CF、PF、AF、ZF等标志位的含义,以及它们在不同运算中的变化。同时,提到了一些关键位如OF、SF的作用,并提供了练习题来加深理解。最后,讨论了如何根据标志位进行条件跳转,如je指令的运用。
摘要由CSDN通过智能技术生成

复习

push

push imm8/16/32(立即数): 栈顶都会-4
push r16/32(寄存器): 不一定了. 要看操作的寄存器宽度

pop

pop 具体操作 也可以弹出 指定宽度的值到寄存器

标志寄存器

EFLAGS寄存器上面的一些位上面的值.
某些汇编指令会根据这个值决定要不要执行本条指令
需要记住的位置 : 0,2,4,6-11 这几个位置
在这里插入图片描述

我们将 eflags 每一位转为 二进制数,在和 CF,PF,AF,ZF一一对应即可

第0位: CF,进位标志
这里主要指 运算结果最高位产生了进位或借位.那么它的值就是1,否则是0. 产生的进位或借位的值就是1. CF存放的就是这个值

第2位: PF,奇偶标志.
如果运算结果中1的个数为偶数,那么这个为上的值是1 否则这个位上面的值是0

第4位: AF,辅助进位标志

在 操纵字节或字的时候,低4位向高四位发生进位或借位的时候. AF位的值为1


也就是说: 32位宽度的时候: FFFFFFFF. 看哪个红的 F 是否会产生进位或借位. 产生了,AF的值是1


如果是16位的时候: FFFF. 看中间的红的是否会产生进位. 如果产生了,那么AF的值是1


以此列推,当8位的时候: FF 看最后一位是否产生进位或借位


第6位: ZF,零标志
当计算结果是0的时候,ZF的值是1. 例如: XOR EAX,EAX. 相同为0,不同为1 那么. XOR EAX ,EAX 的值是0, ZF的值就是1 而 XOR的结果也是0,EAX 的是就是零

在这里插入图片描述

第7位: SF,符号标志
SF的值和 二进制数字最高位一样.

第8位: TF,单步标志 第9位: IF,中断使能标志 第10位: DF,方向标志 第11位: OF,溢出标志
和 CF 相比. 不同的运算决定了 是否关注OF位. 如果 运算时有符号运算,那么就关注OF位.

规律:
正数 + 正数 = 负数: 说明溢出了.在计算机中,正数是有边界大小的. 受数据宽度影响. 如果过大. 则会跑到 负数的范围中.
说明溢出了.
而: 负数 + 负数 = 正数. 也说明溢出了

在这里插入图片描述
在 进行运算的时候,会同时影响各个标志位. 例如C和O位.
同一个运算. 看成有符号和无符号运算. 分别计算最后的结果,随之改变 CF 和 OF 位的值.

在这里插入图片描述

练习题

在这里插入图片描述
按照 上面的指令进行练习. 再结合 上面的那张图片. 观察对OF ,CF 标志位的影响

示例

第九集.

在这一集中, 逆向了一个 Creamk... 可以看到 je 指令的应用
例如: je 指令. 看的是 z 标志位. 如果 z 标志位是0的话,不调. 如果是1,那么就跳
还有 jmp 指令. 不管标志寄存器上面的值,直接跳转想要去的地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值