Програма за събиране на четирибайтови числа

Програма за събиране на четирибайтови числа

Операндите трябва да се заредят най-напред в оперативната памет. За първия операнд са отделени клетките 0х60, 0х61, 0х62 и 0х63; като първата от тях е за най-старшия байт. В следващите четири клетки трябва да се зареди втория операнд, а резултата се записва след още четири клетки.

.include “m16def.inc”
LDI XL,0×64
CLR XH
LDI YL,0×68
CLR YH
LDI ZL,0×6C
CLR ZH
LDI R17,0×04
CLC
L1:
LD R5,-X
LD R6,-Y
ADC R5,R6
ST -Z,R5
DEC R17
BRNE L1

Използват се трите адресни регистъра. Първият адресира клетките на първия операнд, втория – на втория операнд, а третият адресен регистър адресира третия операнд. Обработването на числата започва в низходящ ред, поради което при идентификатора на съответния регистър е поставен знака -. Това означава, че всеки път той ще намалява с единица. Трябва да се отбележи, че при това действие съответният адресен регистър намалява най-напред с 1, а след това се извършва действието на инструкцията. За това базовите адреси в адресните регистри са избрани с един адрес нагоре.
Организиран е цикъл, чиито брояч на итерациите е поместен в R17. След всяка итерация той намалява, а BRNE следи, дали е станал нула. Всеки път числата се четат от SRAM и се записват в оперативните регистри, в които АЛУ извършва събирането. Използва се събиране с пренос, като за първата итерация CLC нулира флага с, за да не остане в него стара информация.
В следващия пример е показана същата програма, но с използването само на един адресен регистър и индексно адресиране. Използват се същите клетки за операндите, като младшият байт е записан в клетката с най-голям адрес. За първият операнд това е 0х63.

. include “m16def.inc”
LDI ZL,0×63
CLR ZH
LDI R16,04
CLC
L1:
LD R5,Z
LDD R6,Z+4
ADC R5,R6
STD Z+8,R5
DEC R16
BRNE L1

В регистъра R16 е организиран брояч до 4. След това флагът С е нулиран. Организиран е също цикъл на четири итерации. При първата итерация се чете младшият байт на първия операнд и се записва в R5. На четири адреса нагоре се чете младшият байт на втория операнд и се записва в R6. Резултатът от събирането се изпраща на 8 адреса след базовия адрес. При следващата итерация базовият адрес намалява с единица, а отместванията остават същите, което означава, че и при втория операнд, и при резултата ще бъдат достъпни следващите байтове.
Втората програма е по-проста. Освен това оставя свободни другите два адресни регистъра, които могат да се използват от програмиста за други цели при по-сложни програми.

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

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

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