32位汇编标志位详解

EFLAGS  32位 二进制表格

CF (进位标志)

在 EFLAGS 中占用第0位。

当运算的结果在最高有效位产生进位或借位则将CF置为1,否则为0。

如:

MOV AL,0xFF

MOV BL,0x1

ADD AL,BL

0xFF的二进制为 1111 1111,0x1的二进制为 0000 0001,相加后的结果为:1 0000 0000

运算结果的最高位发生进位,所以CF会置为1

PF (奇偶标志位)

当运算的结果有效位的二进制中的1的个数为偶数时则将PF置为1,否则为0。

如:

MOV AL,0x2

ADD AL,0x1

结果为 0x3,二进制为 0000 0011,二进制的1为两个,为偶数,则PF会置为1。

如:

MOV AX,0x1112

ADD AX,0x1

结果为 0x1113,二进制为 0001 0001 0001 0011,二进制的1为五个,为奇数,则PF会置为0。

AF(辅助进位标志位)

当运算的结果的二进制 低位向高位进位时,则将AF置为1,否则置为0。

如:

MOV AL,0xF

ADD AL,0x1

结果为 0x10,0xF的二进制为 0000 1111,加1后变成 0001 0000,向前进了一位,AF则置为1。

ZF(零标志位)

当运算的结果为0的时候,ZF将置位为1。

SF(符号标志位)

SF在 EFLAGS 寄存器占第7位,当运算的结果二进制最高位位1的时候,则SF置为1。

如:

MOV AL,0x7F

ADD AL,0x1

0x7F的二进制为:0111 1111,加1就是 1111 1111,最高位变成1,则置为SF。

OF(溢出标志位)

运算结果超出当前运算数所能表示的正,负数范围,则为溢出。

正 + 正 = 正 (如果结果为负数说明正数范围溢出)        

负 + 负 = 负(如果结果为正数说明负数范围溢出)   

正 + 负 (不会溢出)   

首先得知道什么是原码,反码,补码。

原码:

 1 的原码: 0000 0001

-1 的原码: 1000 0001

原码在正数的首位是0,负数则为1,首位也是符号位。

反码:

 1的反码:0000 0001

-1的反码:1111 1110

正数的反码不变,负数的反码符号位不变,其余的所有位进行取反。

补码:

 1的补码:0000 0001

-1的补码:1000 0010

正数的补码不变,负数的补码将最后以为加1。

进入OF正题:

0x7F 的二进制是:0111 1111,符号位是0,说明是正数,如果将0x7F + 1,结果是0x80

0x80 的二进制是:1000 0000,符号位是1,说明是负数。

整个过程就是一个正数加上一个正数,得出一个负数,结果是数据范围大小溢出了,OF置为1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值