问题描述
我正在尝试学习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:
...