Програма за умножение на еднобайтови числа без алгебричен знак

Програма за умножение на еднобайтови числа без алгебричен знак

Алгоритъм на умножението
Нека е дадено множимото 1101 и множителя1001. Алгоритъмът за умножение на десетични и двоични числа е един и същи.
00001101 00001101
00001001 00001001
00001101 11010000
00000000 00000000
00000000 00000000
11010000 00001101
11011101 11011101

В първата колонка умножението е извършено по правилата. Множимото се умножава с най-младшия разред на множителя. След това процесът се повтаря със следващия разред, като частичното произведение се премества с един разред наляво. Накрая всички частични произведения се сумират.
Във втората колонка е постъпено по аналогичен начин, но частичните произведения се местят надясно. Вижда се, че резултатът е един и същ. Оказва се, че програмата се опростява значително, ако се използва преместване надясно.
Нарочно е подбран множител с две значещи цифри. Ако значещите цифри са повече, ще възникне проблем при сумирането на частичните произведения. За това в програмата е предвидено резултатът да се формира постепенно, като всяко частично произведение се натрупва към него веднага след формирането си.
В крайна сметка програмата от следващия пример ще изпълнява следния алгоритъм:
- С дясна ротация ще се въведе най-младшия бит на множителя във флага С. Там ще се анализира дали е 0 или 1 чрез инструкцията BRCC. Ако е единица, множимото ще се добави към резултата, а ако е нула 0 няма да се добавя. След това резултатът ще се премести с един разред надясно и ще се премине към обработването на следващия бит на множителя.
Резултатът при умножение е с двойна разредност. За това се предвиждат два операционни регистъра за резултата. Те могат да се ползват като един 16 битов чрез посредничеството на флага С. Като се премести старшия байт на резултата с ROR, младшия бит попада в С. При следващата ротация на втория регистър, съдържанието на С се прехвърля в него като най-старши бит.
.include “m16def.inc”

LDI XL,0×60
CLR XH
LD R5,X+
LD R6,X+
CLR R16
CLR R17
LDI R20,0×08
L2: ROR R6
BRCC L1
ADD R16,R5
L1: ROR R16
ROR R17
DEC R20
BRNE L2
ST X+,R16
ST X,R17

Програмата започва с инициализиране на адресния регистър Х. Множимото ще бъде разположено на адрес 0х0060, множителя 0 на адрес 0х0061, а резултатът се предвижда да се зареди в клетките –х0062:0х0063. Всички тези клетки са поредни и могат да се адресират последователно с нарастване на адресния регистър Х.
С инструкциите:
LD R5,X+
LD R6,X+

се зареждат двата операнда в съответните оперативни регистри. Регистрите R16 и R17 се нулират. В тях ще се формира резултата, като в R16 ще бъде старшия байт, а в R17 – младшия. В R20 е организиран брояч до 8.
Следва дясна ротация на множителя в R6. Инструкцията BRCC не предизвиква преход, ако съдържанието на С е 1. Тогава към регистър R16 се добавя съдържанието на R5. Ако C=0 сумирането се прескача. И в двата случая следват две ротации съответно на R16 и R17, при което се извършва преместването надясно на частичното произведение. Всичко това се извършва 8 пъти. Така формираният резултат се изпраща накрая в клетките на резултата.

Сходни статии:

  1. Програма за събиране на четирибайтови числа с алгебричен знак Програма за събиране на четирибайтови числа с алгебричен знак В следващия пример подпрограмата за обработване на знака е извикана три пъти. При първия път е зададен адресът на първия операнд...
  2. Програма за събиране не еднобайтови BCD числа В тази програма не би трябвало да има нещо особено. Двата операнда се задават в BCD код в клетките 0х0060 0х0061. След това се извършва сумирането им по познатия начин....
  3. Програма за преобразуване на еднобайтови двоични числа в BCD код Максималната стойност на еднобайтовото число е 255. За да бъде преобразувано в двоично-десетично, може да се постъпи по следния начин. От зададената стойност да се изважда най-напред100, докато се получи...
  4. Програма за деление на еднобайтови числа Да се разделят две числа означава, да се установи, колко пъти делителя се нанася в делимото. Това може да стане най-просто, като се изважда делителят от делимото циклично и се...
  5. Програма за преобразуване на четирибайтови числа в допълнителен код Програма за преобразуване на четирибайтови числа в допълнителен код Зададеното число се разполага в четири последователни клетки от паметта. И тук е прието най-старшият байт да е с най-малък адрес....

Студио за уеб дизайн услуги, изработка на сайтове, SEO оптимизация и Интернет реклама Seven Web Design представя своите професионални уеб дизайн умения на високо ниво. Seven Web Design е продукт на Уеб Дизайн България Груп ООД ®
Comments are closed.