如何检查 Wombat CPU 模拟器中的数字是偶数还是奇数?
在 C++ 中我们可以说
if(num%2==0) even else false
,但是%
Wombat 中没有取模指令,那么我如何找到偶数或奇数呢?
哇,这是一个非常...有限的... CPU :-) 如果没有and
指令,您可能会发现有必要先执行一个divide
(乘二)该值,然后再执行一个multiply
(乘二)该结果。
假设这divide
是一个整数运算,如果原始值是奇数,则半值将被舍入或截断,例如,两者4
和5
减半2
然后加倍得到4
.
因此,如果该值是偶数,则该一半然后双倍运算的结果将与原始值相同,否则它将不同。
因此,您可以使用 asubtract
后跟 ajmpn
来选择偶数或奇数代码路径。
换句话说,是这样的:
Start: read // read to accumulator and store.
store Orig
divide Two // round to even then subtract original.
multiply Two
subtract Orig
jmpn WasOdd // Choose even/odd code path.
WasEven: ...
jump Done
WasOdd: ...
Done: stop
Orig: .data 2 0 // For original data.
Two: .data 2 2 // For halving/doubling.
请记住,这是未经测试的,但它可能是一个很好的起点。我特别不确定.data
伪操作,但根据示例代码,其目的是提供大小(字节数)和初始值。如果我误解了它的工作原理,您需要对此进行调整。