Програма за събиране на четирибайтови числа
Програма за събиране на четирибайтови числа
Операндите трябва да се заредят най-напред в оперативната памет. За първия операнд са отделени клетките 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 адреса след базовия адрес. При следващата итерация базовият адрес намалява с единица, а отместванията остават същите, което означава, че и при втория операнд, и при резултата ще бъдат достъпни следващите байтове.
Втората програма е по-проста. Освен това оставя свободни другите два адресни регистъра, които могат да се използват от програмиста за други цели при по-сложни програми.
Сходни статии:
- Програма за събиране на четирибайтови числа с алгебричен знак Програма за събиране на четирибайтови числа с алгебричен знак В следващия пример подпрограмата за обработване на знака е извикана три пъти. При първия път е зададен адресът на първия операнд...
- Програма за преобразуване на четирибайтови числа в допълнителен код Програма за преобразуване на четирибайтови числа в допълнителен код Зададеното число се разполага в четири последователни клетки от паметта. И тук е прието най-старшият байт да е с най-малък адрес....
- Програма за събиране не еднобайтови BCD числа В тази програма не би трябвало да има нещо особено. Двата операнда се задават в BCD код в клетките 0х0060 0х0061. След това се извършва сумирането им по познатия начин....
- Програма за деление на еднобайтови числа Да се разделят две числа означава, да се установи, колко пъти делителя се нанася в делимото. Това може да стане най-просто, като се изважда делителят от делимото циклично и се...
- Програма за умножение на еднобайтови числа без алгебричен знак Програма за умножение на еднобайтови числа без алгебричен знак Алгоритъм на умножението Нека е дадено множимото 1101 и множителя1001. Алгоритъмът за умножение на десетични и двоични числа е един и...