2016-11-13 2 views
0

Мне нужно подготовить программу для процессора i8080. Моя программа должна умножить два числа 16b. Но я не знаю, как по-разному проверять множитель.Ассемблер i8080 Умножение двух номеров 16 бит

например 1111 * 1011 = первый бит 1011 1, так что я добавить +1111 второй бит 1, так что я добавить 11110 третий бит 0 поэтому я не добавляю 111100 заря 1, так что я добавить 1111000

результат 1111 + 11110 + 1111000 = 10100101

И моя единственная проблема в том, как chceck бит множителя?

Спасибо за помощь

ответ

1

Возможно, самым простым способом является сдвиг вправо, а затем проверить кэрри, в противном случае вы должны сохранить изменения, которые лечись тест, и это трудно, особенно с парой регистров. Перемещение, однако, немного раздражает на 8080, так как только A можно вращать. Скажем, множитель в BC (и множимое в HL и результат в DE, так что вы можете сдвигать множимое с DAD H и это занимает некоторое XCHG сделать надстройку для получения результата, но это бывает реже)

mov a, b 
ora a ; reset carry 
rar 
mov b, a 
mov a, c 
rar 
mov c, a 
jnc skipadd 

Использование ora a гарантирует, что множитель просто стремится к нулю, это позволяет тест выхода, такие как:

mov a, b 
ora c 
jnz looptop 

Если вы раскатать на 16 вы можете просто заполнить BC из налево с переносом из левого сдвига мул tiplicand, это не будет иметь никакого значения.

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