0

如何检查 Wombat CPU 模拟器中的数字是偶数还是奇数?

在 C++ 中我们可以说 if(num%2==0) even else false,但是%Wombat 中没有取模指令,那么我如何找到偶数或奇数呢?

4

1 回答 1

2

哇,这是一个非常...有限的... CPU :-) 如果没有and指令,您可能会发现有必要先执行一个divide(乘二)该值,然后再执行一个multiply(乘二)该结果。

假设这divide是一个整数运算,如果原始值是奇数,则半值将被舍入或截断,例如,两者45减半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伪操作,但根据示例代码,其目的是提供大小(字节数)和初始值。如果我误解了它的工作原理,您需要对此进行调整。

于 2018-10-07T10:56:13.410 回答