Изваждане на BCD числа
За изваждане на BCD числа не могат да се използват инструкциите SUB, SBC, SBCI, защото код BCD и двоичният код са съвсем различни неща. Тук ще бъде използван алгоритъм, който ще бъде илюстриран с пример. Нека е дадено числото А=79 и нека от него да требва да се извади В=43. Резултатът ще бъде 36. Този резултат може да се получи и по друг начин. Ако се извади от числото 100 умаляемото, ще се получи 100-43=57. Като се събере 57 с 79 ще се получи 136. Ако се игнорира единицата на стотиците, ще се получи резултатът 36.
Числото 100-В се нарича десетично допълнение на числото В.
Когато се обработват еднобайтови числа, не може в 8 битов регистър да се побере BCD число, по-голямо от 99. За това вместо действието 100-В се извършва действието (99-В)+1. Изваждането на числото В от 99 се извършва както при обикновените двоични числа. Следователно отделните стъпки на алгоритъма, по който ще бъде съставена програма за изваждане са следните:
- Задават се умаляемото и умалителя;
- Намира се отрицателната стойност на умалителя в допълнителен код;
- Събира се отрицателният умалител с 99;
- Добавя се единицата;
- Извършва се сумирането на BCD числа;
- Накрая се извършва десетична корекция на резултата.
Ако се работи с многобайтови числа, алгоритъмът 3 същият, като броят на деветките е толкова, колкото е броят на тетрадите. Например десетичното допълнение на числото 1234 ще бъде (9999-1234)+1.
В следващия пример е илюстрирано всичко това. Програмният код за десетичната корекция на резултата е оформен в отделен файл като фрагмент от програмата, а не като подпрограма. Това позволява да се премахне и инициализирането на стека, което опростява още повече нещата. Използването на подпрограми е удобно, когато се налага многократно повтаряне на един и същи код, но обръщането към подпрограма е свързано със загуба на време. Когато времето за изпълнение е най-важният показател се предпочита вместо подпрограма, програмният код да се повтаря на съответните места.
Аритметични операции над числа представени с плаваща запетая
До сега разгледаните примери използваха данни, представени с така наречената фиксирана запетая. За нея е характерно, че числата си имат цяла част и дробна част, а запетаята ги разделя и нейното място се знае точно къде е. При представяне на много големи числа е необходим огромен брой клетки за всяко число. Тогава се преминава към представяне на числата с плаваща запетая, което съответства на известната от математиката степенна форма. Например 23000000 може да се представи като 2,3*10^7. С други думи, всяко число Х може да се представи като:
Х = Мх * 10 Рх
където: Мх – мантиса
Рх – порядък
При двоичната бройна система основата е 2, а не 10. Следователно двоичните числа, представени с плаваща запетая, ще имат вида:
Х = Мх * 2 Рх
Когато се въвеждат числа с плаваща запетая, се предвиждат отделни клетки за мантисата и порядъка. Основата винаги е 2. И мантисата и порядъка се представят като числа с плаваща запетая. Те могат да бъдат многоразредни, с алгебричен знак, с цяла и дробна част.
Правилата за извършване на аритметични действия над числа с плаваща запетая са:
- Z = X + Y = (Mx + My) * 2 (Px = Py)
- Z = X – Y = (Mx – My) * 2 (Px = Py)
- Z = X * Y = (Mx * My) * 2 (Px + Py)
- Z = X / Y = (Mx / My) * 2 (Px – Py)
При съвременните персонални компютри числата, представени с плаваща запетая, се обработват от специални помощни процесори, наречени копроцесори. Съвременните процесори притежават вграден копроцесор. При по-старите компютри се предвиждаше допълнително гнездо за поставяне на копроцесор по желание на клиента. Тези които нямаха копроцесор, използваха основният процесор, който по програмен път симулираше наличието на копроцесор. Това обаче забавяше работата на програми, работещи с реални числа.
Ще бъде разгледана една проста програма за събиране, илюстрираща работата с числа, представени в режим на плаваща запетая. В нея мантисата и порядъка са еднобайтови числа без алгебричен знак.
Сходни статии:
- По-важни алгоритми Програма за преобразуване на еднобайтово число в допълнителен код Инструкцията NEG преобразува в допълнителен код, като инвертира всички 8 бита на числото и добавя единица. За знак използва флага N...
- Програма за преобразуване на четирибайтови числа в допълнителен код Програма за преобразуване на четирибайтови числа в допълнителен код Зададеното число се разполага в четири последователни клетки от паметта. И тук е прието най-старшият байт да е с най-малък адрес....
- Програма за деление на еднобайтови числа Да се разделят две числа означава, да се установи, колко пъти делителя се нанася в делимото. Това може да стане най-просто, като се изважда делителят от делимото циклично и се...
- Програма за умножение на еднобайтови числа без алгебричен знак Програма за умножение на еднобайтови числа без алгебричен знак Алгоритъм на умножението Нека е дадено множимото 1101 и множителя1001. Алгоритъмът за умножение на десетични и двоични числа е един и...
- Програма за преобразуване на еднобайтови двоични числа в BCD код Максималната стойност на еднобайтовото число е 255. За да бъде преобразувано в двоично-десетично, може да се постъпи по следния начин. От зададената стойност да се изважда най-напред100, докато се получи...