美文网首页
(32位汇编 八)标志寄存器

(32位汇编 八)标志寄存器

作者: 1301c72 | 来源:发表于2017-09-25 22:37 被阅读0次
EFLAGS寄存器

1. 进位标志CF(Carry Flag)

如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

MOV AL, 0xEF
ADD AL, 2

MOV AL, 0xFE
ADD AL, 2

2. 奇偶标志PF(Parity Flag)

奇偶标志PF用于反映运算结果中(最低有效字节中)1个数的奇偶性。

MOV AL, 3
ADD AL, 3
ADD AL, 2

3. 辅助进位标志AF(Auxiliary Carry Flag)

在发生下列情况时, 辅助进位标志AF的值被置为1,否则其值为0:
(1)在字(worddword等)操作时,发生低字节向高字节进位或借位时;
(2)在字节操作时,发生低4位向高4位进位或借位时。

MOV EAX, 0x55EEFFFF
ADD EAX, 2

MOV AX, 5EFE
ADD AX, 2

MOV AL, 4E
ADD AL, 2

MOV AH, 4E
ADD AH, 2

4. 零标志ZF(Zero Flag)

零标志ZF用来反映运算结果是否为0。
如果运算结果为0, 则其值为1, 否则其值为0。在判断运算结果是否为0时,可使用此标志位。

XOR EAX, EAX

MOV EAX, 2
SUB EAX, 2

5. 符号标志SF(Sign Flag)

符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

MOV AL, 7F
ADD AL, 2

6. 溢出标志位OF(Overflow Flag)

溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则被清为0。

最高位进位与溢出的区别:

  • 进位标志CF表示无符号数运算结果是否超出范围。
  • 溢出标志OF表示有符号数运算结果是否超出范围。

溢出主要是给有符号运算使用的,在有符号的运算中,有如下的规律:

  • 正 + 正 = 正,如果结果是负数,则说明有溢出
  • 负 + 负 = 负,如果结果是正数,则说明有溢出
  • 正 + 负,永远都不会有溢出
8位16进制表示

总结:
(1)无符号数:0……FF
(2)有符号数: 正数:0……7F 负数:80……FF

  • 无符号、有符号都不溢出

MOV AL, 8
ADD AL, 8

  • 无符号溢出、有符号不溢出

MOV AL, 0FF
ADD AL, 2

  • 无符号不溢出、有符号溢出

MOV AL, 7F
ADD AL, 2

  • 无符号、有符号都溢出

MOV AL, 0FE
ADD AL, 80

注意:计算机如何计算OF的值?
比如 80 - 40

mov al, 80
sub al, 40

相当于(减法相当于加法)
mov al, 80
add al, 0c0

1000 0000
1100 0000  // -40的补码
---------------
符号位有进位:1(x)
最高有效数值位(左起第二位)向符号位产生的进位:0(y)
1 xor 0 == 1 所以 OF = 1 

即OF == x xor y

相关文章

  • (32位汇编 八)标志寄存器

    1. 进位标志CF(Carry Flag) 如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0...

  • 9.汇编-JCC

    9.汇编-JCC 之前可以修改EIP寄存器的指令JMP,CALL,RETN 所有JCC指令的动作->根据标志寄存器...

  • 有关汇编相关参考博客

    汇编之常识(一)汇编基础 CPU等硬件结构 数据总线 地址总线 控制总线 汇编之寄存器(二)寄存器 数据地址寄存器...

  • 汇编学习11 标志寄存器

    标志寄存器一共16位,一共只有0,2,4,6,7,8,9,10,11位有意义分别是CF(carry),PF(par...

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

  • 4. 汇编-内存复制指令

    4. 汇编-内存复制指令 标志寄存器 EFL EFL是32位寄存器其中的每一位,含义都是不同的 第十位(从下标开始...

  • 寄存器

     一、标志寄存器PSW 标志寄存器PSW(程序状态字寄存器PSW)标志寄存器PSW是一个16为的寄存器。它反...

  • ARM64 学习

    iOS汇编 真机 arm64汇编,GNU 模拟器 x86, AT&T 汇编 寄存器 指令 堆栈 通用寄存器 64b...

  • Windows汇编(2)Win64汇编

    Win64汇编 - 寄存器

  • 00-汇编语言

    程序的本质 寄存器与内存 编程语言的发展 汇编语言的种类 常见的汇编指令 寄存器 有16个常用寄存器rax、rbx...

网友评论

      本文标题:(32位汇编 八)标志寄存器

      本文链接:https://www.haomeiwen.com/subject/tfvlextx.html