2013-09-29 2 views
0

Итак, у меня есть проблема. У меня есть только 25 инструкций в моем наборе инструкций (без умножения, деления, вычитания, приращения). сейчас, я пытаюсь создать двоичное деление. Моя проблема в том, как я могу узнать, меньше ли дивизор, чем дивиденд, чтобы вычесть их обоих (в форме комплимента 2)?Разделение двух двоичных чисел

ИНСТРУКЦИЯ ПО SET: enter image description here

+1

Как мы сможем рассказать вам, если мы не знаем, какие инструкции у вас есть * есть? – us2012

+0

@ us2012 ok загрузится. –

+0

@ us2012 обновленный, посмотрите пожалуйста. –

ответ

2

Я предполагаю, что AC представляет собой регистр (аккумулятор). Итак, вам нужна команда SPA, а AC - результат вычитания двух чисел. Или SNA, зависит от того, что вы вычитаете из чего.

Опять же, вы не имеете вычитания. Замените его добавлением одного числа и отрицанием другого. Отрицательный - дополнение плюс два, как сказал Ферруччио.

EDIT: SPA/SNA работает, пропуская следующую команду, если переменный ток положительный/отрицательный. Поэтому, если вы хотите иметь оператор if с нетривиальным телом, вы хотите поместить Sxx, за которым следует BUN (ветка безоговорочно). Если условие истинно, ветвь пропускается, если условие ложно - выполняется ветвь.

Обратите внимание, что это инверсия традиционной логики сборки. Обычно это «ветка, если условие истинно»; на этой машине это «ветвь, если условие ложно».

Для записи ваш набор инструкций намеренно отстает. Реальные процессоры для работы в реальном времени более дружелюбны программистам, чем к RISC.

+0

Его машина -Мано; даже я не уверен в SPA.No docs! –

+0

Спасибо за ссылку :) –

2

Многие инструкции можно разложить на более простые инструкции.

Кажется, вам нужна инструкция compare.

Если у вас нет инструкции compare, вы можете имитировать ее с помощью subtract и проверки состояния флагов процессора после вычитания.

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

Если вы не имеете negate инструкции, вы можете имитировать его в дополнительном арифметике, щелкая значения всех битов и добавления 1.

+0

В дополнении 2, как я узнаю, меньше ли делителя? Там не будет лишнего 1 бит для знака? –

+1

Вычтите дивизор из дивиденда, если результат меньше нуля, тогда делитель меньше дивиденда. Похоже, вы можете использовать инструкции SPA или SNA. – Ferruccio

+0

Я не уверен о SPA и SNA, что в какое время должно быть 0 ot 1 –

Смежные вопросы