2013-02-13 5 views
-2

Задавая этот вопрос во второй раз, потому что в прошлый раз люди избегали моего вопроса и предлагаемых решений, которые я не мог использовать. Я делаю множитель на очень простом ассемблере, в котором у меня есть BEQ, NAND и ADD для создания SRL. Я также должен держать множитель менее 50 строк (16, используемых до сих пор), поэтому, надеюсь, решение может быть выбрано в цикле.Сдвиг вправо Логический из ADD и NAND?

Мой вопрос, как я могу реализовать ПМП только с NAND и ADD

Примечание: Пожалуйста, не предлагают умножения, добавляя число к себе х раз. Метод, над которым я сейчас работаю, может быть завершен с выяснением проблемы SRL.

Спасибо.

ответ

1

Я не думаю, что люди «избегали» вашего вопроса. Это не так много для работы. NAND работает поразрядным образом, поэтому единственная надежда, которую вы получаете на получение информации между битовыми позициями с инструкцией, - это перенос в добавлении. У нас есть x+x = SLL x. Вы ничего не сказали о своем процессоре. Если у вас есть пары регистров, вы можете загрузить x в нижнем регистре пары, а затем сдвинуть влево N-1 раз для N битных регистров. Высокий регистр будет иметь то, что вам нужно.

В противном случае существует тестовая и установленная петля.

ans = 0 
    test = 2 
    set = 1 
next: 
    if NAND(-1,NAND(x,test)) == 0 goto skip_set 
    ans = ans + set 
skip_set: 
    set = set + set 
    test = test + test 
    if test == 0 goto done 
    goto next 
done: 

Наконец, если ваши слова узкие, вы можете написать таблицу в памяти.

Я знаю, что вы ищете SRL, но, безусловно, возможно реализовать умножение только с SLL. Для x*y, это было бы что-то вроде:

ans = 0 
    test = 1 
next: 
    if NAND(-1,NAND(x,test)) == 0 goto skip 
    ans = ans + y 
skip: 
    y = y + y 
    test = test + test 
    if test == 0 goto done 
    goto next 
done: 
+0

Вы тоже И вместо NAND –

+0

я предполагал, каждый мог понять, что 'NAND (1, NAND (а, б)) == (а, б) '! – Gene

+0

Я должен был упомянуть, что, конечно, для слова, а не бит, вы бы хотели «NAND (все, NAND (a, b))» или если у вас есть арифметика дополнений twos, то «NAND (-1, NAND (а, б)) '. – Gene

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