Поскольку я не хочу делать твою школьную домашнюю работу, я дам только несколько советов:
Как разделить ... используя сложение?
Это не быстрый метод, но вы можете сделать следующее:
; Calculate C = A / B
Set C to 0
As long as A >= B:
Increment C by 1
Subtract B from A
Если A и B могут быть отрицательными, выполните следующие действия:
Set D to 0
If A is negative:
Set D to 1
Negate A
If B is negative:
Xor D with 1
Negate B
Perform C = A / B (see above)
If D != 0:
Negate C
Игрушечная архитектура ... имеет 2 дополнения дополнения и побитовые операции И / ИЛИ / XOR ...
... и инструкция условного перехода, которая переходит, если два регистра равны, а также операция поворота.
Это очень важно, потому что только с битовыми операциями и сложением бит 0 результата какой-либо операции будет зависеть только от бита 0 операндов. Это означает, что бит 0 конечного вывода некоторой программы будет зависеть только от бита 0 входов.
Однако для двух делений 0x30 / 0x10 = 3 и 0x20 / 0x10 = 2 бит 0 всех входов равен 0, но в одном случае бит 0 на выходе равен 1, а в другом случае бит 0 на выходе равен 0.
но не вычитание напрямую
Некоторые подсказки о некоторых операциях, которые ваш ЦП не имеет:
- Инвертировать все биты числа можно с помощью операции XOR.
- Пожалуйста, помните, как отрицать число в дополнении к двум.
- Если вы можете отрицать число и добавлять числа, вы также должны иметь возможность вычитать числа.
- Пожалуйста, помните, как узнать, отрицательно ли число дополнения до двух.
- Если вы работаете только с числами в диапазоне 0 ... 127, проверка «A
Обратите внимание, что это тот случай, когда вы разрешаете отрицательные входы!
- Если вы работаете со всем диапазоном 0 ... 255, проверить «A
Если бит 7 равен «1» в A, но «0» в B, то A
Если бит 7 равен «0» в A, но «1» в B, то A
Если бит 7 имеет одинаковые значения в A и B (либо оба бита равны «0», либо оба бита равны «1»), проверка «(A-B) отрицательна» может быть сделана