首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序状态字中无零标志零标志的实现

程序状态字中无零标志零标志的实现
EN

Stack Overflow用户
提问于 2020-09-02 07:36:16
回答 1查看 203关注 0票数 0

在一个典型的处理器的PSW中,没有实现零标志,但是它有进位、符号、奇偶校验和溢出标志。在这种架构中,程序员将如何实现JZ (跳转到零)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-02 07:54:26

如果没有零标志,那么在任何像add reg, reg这样的任意指令之后就不能实现JZ,其他任何标志都不能携带相同的信息。例如,8位-128 + -128溢出并携带到0,但您无法将其与溢出/携带到127的-128 + -1区分开来。或者其他的组合,即使在SF和PF的帮助下,你也无法区分。

这就是为什么我们在普通的ISAs中有一个零旗,包括8080或x86,它们的标志和助记符你正在使用。

您是否真的想模仿x86 test eax,eax / jz或ARM cbz reg, target (寄存器上的条件分支为零)来测试寄存器,如果寄存器为零则跳转?

注意,0是唯一一个没有签名的数字--低于1,所以您可以使用cmp / jnc。这看上去像家庭作业,所以我不会说得更多。

或者执行MIPS所做的操作,并提供类似于beq $reg, $reg, target的指令,您可以使用该指令在任何一对规则上进行比较和分支。(MIPS根本没有PSW /标志)。MIPS有一个体系结构的零寄存器,它总是以零的形式读取,所以您可以在任何其他寄存器上分支,只要一个机器指令就等于零。

ARM拇指和AArch64提供了一个有限的版本:在单个寄存器上比较/分支为零或非零的cbzcbnz,它们独立于ARM标志寄存器。

但实际上,如果您要有一个标志/ PSW注册,实现一个零标志。这是最基本的有用的东西之一。尽管公平地说,携带标志甚至更重要。如果你只能有一个标志,它可能会被携带,因为你仍然可以有效地测试零。签署的比较,无论是大还是少,都很难与SF和OF相媲美。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63700801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档