首页 > 解决方案 > 如何在 Z80 装配中进行“大于”跳转,而不是“大于或等于”?

问题描述

我正在尝试学习 Z80 组装 - 如果这非常明显,请原谅我 - 但我对整个组装相当陌生。

在比较之后,我已经熟悉了跳转的工作原理cp以及它们如何等同于我所知道的事物,即NZ“!=”的等价物,C与“<”等相关。尽管据我所知,“>”并不容易。

NC是相反的C-NC据我了解 - 在我的场景中与“> =”相关。我的假设是我可以组合NCNZ在相同的跳转条件下删除“=”可以这么说,但它似乎不起作用。

我该怎么做才能使我的跳跃条件a超过比较的数量,而不让它们等于零?

标签: assemblyz80

解决方案


CP执行减法并适当地设置标志。它不存储减法的结果。

因此,要比较 A 是否大于操作数,您需要查找严格为正数的减法结果,即 1 或更大。

没有直接的途径,你必须作为一个复合来做——NC消除所有小于 0 的结果,让你大于或等于,然后NZ消除相等的可能性。但是您可能想要翻转它们以获得更直接的代码。例如

      CP <whatever>
      JR C, testFailed   ; A was less than the operand.
      JR Z, testFailed   ; A was exactly equal to the operand.

testSucceeded:
      ; A was not less than the operand, and was not
      ; equal to the operand. Therefore it must have
      ; been greater than the operand.
      ...

testFailed:
      ...

推荐阅读