88 10. Arytmetyka mikrokontrolerów
Z przytoczonych form zapisów liczb można wysnuć następujące wnioski:
• podając wartość liczby należy podać podstawę systemu w postaci pojedynczej litery: dla systemu binarnego B lub b, dla systemu ósemkowego Q lub q lub O lub o, dla systemu dziesiętnego D lub d, a dla systemu szesnastkowego II lub h; w systemie dziesiętnym można pominąć podstawę systemu (podstawa p=10 jest domyślna),
• w systemie szesnastkowym oprócz cyfr pojawia się 6 dodatkowych liter A..F lub a..f dla oznaczenia wartości z przedziału 10..15,
• w kodzie binarno-dziesiętnym BCD stosowane są tylko cyfry z przedziału 0..9.
Interpretacja liczb ujemnych zależy od sposobu zapisu znaku i wartości liczby, np. znak-modul, kod uzupełnienia do dwóch itp. 161. W mikroprocesorach przyjęto do zapisu N-bajtowych liczb ujemnych metodę kodu uzupełnienia do 2™. W szczególności liczba ujemna 1-bitowa jest reprezentowana przez uzupełnienie do 2, stąd nazwa kodu. W metodzie tej najbardziej znaczący bit niesie informację o znaku liczby, a pozostałe o jej wartości w kodzie uzupełnienia do dwóch. Jeśli rozpatruje się liczby 8-bitowe to bit by jest bitem znakowym, a bity b^ q są bitami wartości:
+ 3 = 0000 001 lb, bit by = 0, liczba dodatnia
-3 = 1111 llOlb, bit by = 1, liczba ujemna
Zamiana liczby dodatniej na ujemną i odwrotnie (negacja arytmetyczna) dokonywana jest przez negację logiczną wszystkich bitów liczby, a następnie na dodaniu 1. Zamiana liczby +53 na liczbę ujemną realizowana jest następująco:
+53d = 35h = 0011 OlOlb
+1 _1
-53d = OCBh = 1100 101 lb
W praktyce negację arytmetyczną liczby w kodzie uzupełnienia do 2 wykonuje się przez negację logiczną wszystkich bitów po pierwszym bicie niezerowym:
• testowanie bitów rozpoczyna się od bitu najmniej znaczącego (LSB),
• pozostawia się niezmienione wszystkie zera oraz pierwszą napotkaną jedynkę,
• neguje się logicznie wszystkie pozostałe bity.
W systemach mikroprocesorowych do zapisu porcji informacji oprócz bitów stosowane są bajty i słowa (zmienne 16-bitowe). Zakres zmiennych binarnych zależy od liczby bajtów wykorzystanych do zapisu liczby:
zmienna typu: |
liczby całkowite bez znaku |
liczby całkowite ze znakiem |
bajt |
0.. 255 |
-128.. +127 |
słowo |
0.. 65.535 |
-32.768 .. +32.767 |
Arytmetyka mikrokontrolerów jest arytmetyką binarną z jednym wyjątkiem, który dotyczy dodawania liczb w kodzie BCD. Zasadnicza grupa instrukcji arytmetycznych związana jest z akumulatorem A. Jeden z argumentów i wynik operacji zawarty jest zawsze w akumulatorze A, z wyjątkiem instrukcji inkrementacji (zwiększania o jeden) i dekrementacji (zmniejszania o jeden) zawartości rejestrów Rn, rejestrów specjalnych SFR oraz komórek wewnętrznej pamięci RAM. Wyjątkiem są również instrukcje mnożenia i dzielenia, z którymi związany jest rejestr B.
Związanie większości instrukcji arytmetycznych z akumulatorem A powoduje, że akumulator jest najbardziej obciążonym rejestrem mikrokontrolera. Również czas wykonania programu, który odwołuje się co chwilę do akumulatora jest długi.
W rejestrze słowa statusowego PSW znajdują się znaczniki (C, AC, OV i P), które zmieniane są w trakcie wykonywania instrukcji arytmetycznych. Przeznaczenie każdego z nich jest inne:
rejestr
PSW
CY AC
FO
OV
FI
adres
ODOh
• znacznik przeniesienia C sygnalizuje przekroczenie zakresu (O..OFFh) 8-bitowych liczb całkowitych bez znaku w operacji dodawania i odejmowania oraz przekroczenie zakresu 0..99d przy operacji korekcji dziesiętnej. Oznacza przeniesienie między kolejnymi dodawanymi bajtami lub pożyczkę przy wielobajtowym odejmowaniu.