Słowo stanu programu
Słowo stanu programu, zwane równiez rejestrem PSW od skrótu jego anglojęzycznej nazwy (ang. Program Status Word), jest 8-bitowym rejestrem adresowanym bitowo i umieszczonym w obszarze rejestrów specjalnych, który składa się z pojedynczych znaczników informujących o pewnych szczególnych właściwościach wyniku uzyskanego przez wykonanie jednego z rozkazów operacji arytmetycznych lub logicznych. Poniżej przedstawiono poszczególne bity tego rejestru.
Rejestr | PSW | |||||||
---|---|---|---|---|---|---|---|---|
Adres bitu | D7h | D6h | D5h | D4h | D3h | D2h | D1h | D0h |
Numer bitu | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Oznaczenie bitu | CY | AC | F0 | RS1 | RS0 | OV | - | P |
Bit | Symbol | Funkcja |
PSW.7 | CY | Znacznik przeniesienia (ang. carry flag). |
PSW.6 | AC | Znacznik przeniesienia pomocniczego (ang. auxiliary flag). |
PSW.5 | F0 | Znacznik programowy (ang. user controlled flag). Znacznik ogólnego przeznaczenia do dowolnego wykorzystania. Może służyć do przekazywania informacji dwójkowej pomiędzy różnymi fragmentami kodu programu. |
PSW.4 | RS1 | Znacznik 1 wybotu banku rejestrów. |
PSW.3 | RS0 | Znacznik 0 wyboru banku rejestrów. |
PSW.2 | OV | Znacznik nadmiaru (ang. overflow flag). |
PSW.1 | - | Znacznik ogólnego przeznaczenia. |
PSW.0 | P | Znaczik parzystości (ang. parity flag). Ustawiany w każdym cyklu maszynowym. Wskazuje parzystą (gdy równy 0) lub nieparzystą (gdy równy 1) liczbę jedynek w akumulatorze. |
W poniższej tabeli przedstawiono zestawienie rozkazów, kórych wykonanie modyfikuje co najmnije jeden ze znaczników CY, AC lub OV. Zastosowane oznaczenia:
- | oznacza znacznik ustawiany zgodnie z wynikiem operacji,
- 0 oznacza znacznik zerowany,
- 1 oznacza znacznik ustawiany,
- - oznacza znacznik nie zmieniany.
Rozkaz | Znaczniki | Rozkaz | Znaczniki | |||||
---|---|---|---|---|---|---|---|---|
CY | AC | OV | CY | AC | OV | |||
ADD | | | | | | | SETB C | 1 | - | - | |
ADDC | | | | | | | CLR C | 0 | - | - | |
SUBB | | | | | | | CPL C | | | - | - | |
MUL | 0 | - | | | ANL C,bit | | | - | - | |
DIV | 0 | - | | | ANL C,/bit | | | - | - | |
DA | | | - | - | ORL C,bit | | | - | - | |
RRC | | | - | - | ORL C,/bit | | | - | - | |
RLC | | | - | - | MOV C,bit | | | - | - | |
CJNE | | | - | - |
Poniżej omówiono dokładniej niektóre z bitów rejestru PSW.
Znacznik przeniesienia
Znacznik przeniesienia CY ustawiany jest w wyniku wykonania operacji arytmetycznych dodawania (ADD, ADDC) lub odejmowania (SUBB), sygnalizując wystąpienie przeniesienia z 8-ego bitu wyniku (w przypadku operacji dodawania) lub pożyczki z 9-tego bitu odjemnej (w przypadku odejmowania).
Również operacje przesunięć logicznych RRC i RLC modyfikują stan bitu CY wprowadzając do niego najmłodszy (w przypadku RRC) lub najstarszy (w przypadku RLC) bit argumentu danej instrukcji.
Modyfikacja bitu CY dokonywana jest także przez instrukcje operacji na bitach, takie jak: SETB, CLR, CPL, ANL, ORL i MOV, których jednym z argumentów lub akumulatorem przechowującym wynik jest właśnie bit CY, a także przez operacje porównania CJNE.
Modyfikacja bitu CY dokonywana jest również przy wykonaniu instrukcji korekcji dziesiętnej (DA).
Znacznik przeniesienia pomocniczego
Znacznik przeniesienia pomocniczego AC ustawiany jest w przypadku, gdy w wyniku wykonanej operacji wystąpiło przeniesienie z młodszej tetrady (ang. nibble) rejestru na starszą. Korzystając z bitu AC można dokonać korekcji wyniku operacji arytmetycznej na liczbach zapisanych w kodzie BCD, gdzie poszczególne cyfry zapisywane są na 4 bitach.
Wspomniana korekcja wymaga:
- sprawdzenia, czy 4 najmniej znaczące bity wyniku reprezentują liczbę większą niż 9 lub znacznik przeniesienia pomocniczego AC jest równy 1. Jeśli tak, to do tych czterech bitów powinna być dodana liczba 6, która w kodzie U2 reprezentuje wartość –10. Zatem w rzeczywistości następuje zmniejszenie wartości najmłoszej pozycji liczby o 10.
- sprawdzenia, czy 4 najbardziej znaczące bity wyniku reprezentują liczbę większą niż 9 lub czy bit przeniesienia CY jest równy 1. Jeśli tak, to do tych bitów powinna być dodana liczba 6.
Obydwa powyższe sprawdzenia i ewentualne dodawania realizowane są przez rozkaz DA.
Rozkaz DA realizuje poprawnie korekcję dziesiętną tylko dla operacji dodawania oraz, gdy argumenty dodawania były już zapisane jako liczby w kodzie BCD. |
Znaczniki wyboru banku rejestrów
Bity RS0 oraz RS1 służa do wyboru jednego z 4 banków rejestrów. Jak widać z poniższej tabeli potraktowanie ustawień bitów jako liczby w zapisie binarnym wskazuje numer aktywnego banku rejestrów.
RS1 | RS0 | Aktywny bank rejestrów |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 2 |
1 | 1 | 3 |
Znacznik nadmiaru
Znacznik nadmiaru OV ustawiany jest w przypadku, gdy w wyniku wykonanej operacji arytmetycznej wystąpiło przeniesienie na pozycję najstarszego bitu, który w przypadku liczb ze znakiem jest bitem znaku. Służy zatem do detekcji błędu określenia znaku wyniku w operacjach arytmetycznych na liczbach ze znakiem, np. zapisanych w kodzie uzupełnienia do 2 (U2).
Znacznik parzystości
Bit parzystości P odzwierciedla informację o ilości jedynek w akumulatorze. Jego wartość jest ustawiana sprzętowo w każdym cyklu maszynowym. Jeśli w akumulatorze znajduje się nieparzysta liczba jedynek, bit P=1. Natomiast P=0, jeśli aktualnie w akumulatorze znajduje się parzysta liczba jedynek. Zatem w sumie liczba jedynek w akumulatorze i znaczniku P jest zawsze parzysta.