assembly - 为什么我们需要一个标志来指示零结果?
问题描述
在移位、加法、增量等指令中,我们总是检查结果,如果结果为零,我们会在标志中指出这一点。在什么情况下我们使用这个零标志?这个零标志有什么用?
解决方案
我们将这些标志用于两个主要目的:
- 代码的条件执行(如果这些标志之一设置为特定值,通常会有分支/跳转指令转移执行),这包括循环,而不仅仅是高级语言中的 if/then/else 语句
- 复杂的算术和按位逻辑,包括任意精度算术(其中携带在非常长整数的寄存器大小部分的加法/减法/移位之间传播)
并非所有 CPU 都具有以零、负、无符号上溢/下溢(或进位/借位)、有符号上溢、奇偶校验等方式描述 ALU 操作结果的标志。
MIPS CPU 没有用于整数和位运算的此类标志。具有条件分支,可以在以下条件下分支:
- 登记平等/不平等
- 将相等注册为零/非零
- 寄存器小于/大于零
- 寄存器大于/小于或等于零
如果需要这些分支不支持的不同类型的比较,则有特殊说明。他们将结果设置为 0 或 1,然后条件分支可以将其用作其输入。
在 MIPS 处理器上进位和溢出有点棘手。它们需要通过多条指令获得。
推荐阅读
- tivoli-work-scheduler - TWS 作业失败。错误 jobmon 无法检索用户信息
- c# - 如何在单元测试项目中创建新对象?
- angular - 在 cpanel 上部署 Angular 应用程序
- java - Android 中的地理标记
- amazon-web-services - ECS 集群未注册 EC2
- angular - Angular 材质中具有错误验证的 ControlValueAccessor
- ubuntu - 不小心从修补板闪存中删除了 u-boot
- mysql - 无法使用套接字连接到 Google Cloud SQL,但可以使用 IP 地址连接
- javascript - 正则表达式从 Javascript 到 MySQL
- database - HANA 中的 ADBC 临时表