Нахождение четного или нечетного на ассемблере - PullRequest
0 голосов
/ 07 октября 2018

Как я могу проверить, является ли число четным или нечетным в симуляторе ЦП Wombat?

В C ++ мы можем сказать if(num%2==0) even else false, но в Wombat нет инструкции по модулю %, так как я могунайти четное или нечетное?

1 Ответ

0 голосов
/ 07 октября 2018

Вау, это очень ... ограничено ... CPU :-) Без инструкции and может возникнуть необходимость сделать divide (на два) значения, затем multiply (на два) этого результата.

Если предположить, что divide является целочисленной операцией, то половинное значение будет округлено или усечено, если исходное значение было нечетным, например,и 4, и 5 делятся пополам до 2, а затем удваиваются, что дает 4.

Следовательно, результат этой операции, равной половине, затем удвоенной, будет идентичен исходному значению, если это значение было четнымв противном случае он будет отличаться.

Таким образом, вы можете использовать subtract и jmpn для выбора четного или нечетного пути к коду.

Другими словами, что-то вроде этого:

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, но, основываясь на примере кода, намерение состоит в том, чтобы предоставить размер (количество байтов) и начальное значение.Если я неправильно понял, как это работает, вам нужно будет подстроиться под это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...