首页 > 解决方案 > 为什么我们需要一个标志来指示零结果?

问题描述

在移位、加法、增量等指令中,我们总是检查结果,如果结果为零,我们会在标志中指出这一点。在什么情况下我们使用这个零标志?这个零标志有什么用?

标签: assemblycpu-registersflagszero

解决方案


我们将这些标志用于两个主要目的:

  • 代码的条件执行(如果这些标志之一设置为特定值,通常会有分支/跳转指令转移执行),这包括循环,而不仅仅是高级语言中的 if/then/else 语句
  • 复杂的算术和按位逻辑,包括任意精度算术(其中携带在非常长整数的寄存器大小部分的加法/减法/移位之间传播)

并非所有 CPU 都具有以零、负、无符号上溢/下溢(或进位/借位)、有符号上溢、奇偶校验等方式描述 ALU 操作结果的标志。

MIPS CPU 没有用于整数和位运算的此类标志。具有条件分支,可以在以下条件下分支:

  • 登记平等/不平等
  • 将相等注册为零/非零
  • 寄存器小于/大于零
  • 寄存器大于/小于或等于零

如果需要这些分支不支持的不同类型的比较,则有特殊说明。他们将结果设置为 0 或 1,然后条件分支可以将其用作其输入。

在 MIPS 处理器上进位和溢出有点棘手。它们需要通过多条指令获得。


推荐阅读