我如何在 Z80 Assembly 中执行 "greater than" 跳转,而不是 "greater than or equal to"?
How do I do a "greater than" jump in Z80 Assembly, rather than "greater than or equal to"?
我正在尝试学习 Z80 装配 - 如果这非常明显,请原谅我 - 但我对整个装配相当陌生。
在与 cp
进行比较后,我已经熟悉了跳跃的工作原理以及它们如何等同于我所知道的东西,即 NZ
等同于“!=”,C
与 "<" 等相关。尽管据我所知,“>”并不那么容易。
NC
与 C
相反,NC
- 据我所知 - 在我的场景中与“>=”相关。我的假设是我可以在同一个跳转条件下组合 NC
和 NZ
来删除“=”,但它似乎不起作用。
我能做些什么来使我的跳跃条件是a
比比较的数量多,没有允许他们等于零?
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:
...
我正在尝试学习 Z80 装配 - 如果这非常明显,请原谅我 - 但我对整个装配相当陌生。
在与 cp
进行比较后,我已经熟悉了跳跃的工作原理以及它们如何等同于我所知道的东西,即 NZ
等同于“!=”,C
与 "<" 等相关。尽管据我所知,“>”并不那么容易。
NC
与 C
相反,NC
- 据我所知 - 在我的场景中与“>=”相关。我的假设是我可以在同一个跳转条件下组合 NC
和 NZ
来删除“=”,但它似乎不起作用。
我能做些什么来使我的跳跃条件是a
比比较的数量多,没有允许他们等于零?
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:
...