汇编标志位及操作讲解

参考网上的资料。整理了我认为比较常用的标志位知识点。

一、SF,CF,ZF,OF,PF,ZF 讲解

SF=0(最高位是什么,ZF就是什么)
CF=1(最高位有进位或借位就置1)
ZF=0(结果为0,ZF就置1)
OF=1(两个负数相加变成正数,溢出)
PF=0(反映结果“1”的个数,奇数个“1”就为0,偶数个“1”就为1)
CF(carry flag):进位标志 描述了最近操作是否发生了进位(可以检查无符号操作是否溢出)
ZF(zero flag):零标志 最近操作结果为0(列如 逻辑操作 等)
SF(sign flag):符号标志最近操作结果为负数
OF(overflow flag):溢出标志最近操作导致一个补码溢出 补码溢出通常有两种结果(正溢出或者负溢出)

二、AND OR 运算

CPU按顺序总共有9个标识位(16位CPU)
OF DF IF TF SF ZF AF PF CF
3个状态控制标示为 DF IF TF
6个运算标志位 OF SF ZF AF PF CF
AND指令影响标志位PF、SF、ZF,使CF=0、OF=0
.例如,在同一个通用寄存器自身相与时,操作数虽不变,但使CF置零.
主要用于修改操作数或置某些位为零.
OR 同上。除了进位辅助外,基本都可能受影响,
结果又很大的随机性,谁知道AND\OR 的结果是奇数还是偶数,是不是0,第一位是不是1.
但是一定的是CF OF 进位和溢出必定为0

三、TEST AX,AX

00401098 50 push eax
:00401099 8BCF mov ecx, edi
:00401056 52 push edx
:00401057 8BC8 mov ecx, eax
:00401059 E8021D0100 call 00412D60
:0040105E 85C0 test eax, eax
:00401060 7421 je 00401083
在上述的程序段中,我的不明白是两个ax的直,是相同的还test 干什么

test指令操作是目的操作数和源操作数按位逻辑“与“
运算结果不送回目的操作数
然后根据结果设置SF、ZF、和PF标志位,并将CF和OF
标志位清零。
而JE是当ZF=1时跳转。
即,当eax的值等于0时跳转。
因此说,这里的test就是检测eax的值是不是0

四、[local.1]

在OD里,[local.1] 是 ebp-4 , [local.2] 是 ebp-8 , 以每4个字节递增。

五、XOR AX,AX

等价于 mov ax,0
是异或运算,两数相反为1;两数相同为0。由于这两个数相同,异或后等于清0
由于它比mov eax,0效率高,所以一般用它!

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值