MCS-51
Architektura

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.

Uwaga 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.