Pod haubom PSW registra: Asemblerski vodič kroz banke registara na Intel 8051
Uvod i teorija
U prethodnom uvodnom tekstu definisali smo logičku
mapu unutrašnjeg RAM-a i dotakli se koncepta hardverskog preusmeravanja adresa
pomoću dekodera. Da bismo razumeli kako procesor u realnom vremenu zna koju od
četiri banke registara treba da koristi, moramo detaljno analizirati njegovu
„kontrolnu tablu“ – statusni registar PSW (Program Status Word).
PSW je 8-bitni registar specijalne namene (SFR)
smešten na adresi D0H. Svaki bit u ovom registru ima
jedinstvenu hardversku ulogu i direktno utiče na ponašanje procesora nakon
aritmetičkih operacija ili pri donošenju odluka. Anatomija PSW registra izgleda
ovako:
- Bit
7 – CY (Carry Flag): Koristi se kao akumulator za bit-operacije i beleži prenos (ili
pozajmicu) iz najvišeg bita (Bit 7) prilikom aritmetičkih operacija.
- Bit
6 – AC (Auxiliary Carry Flag): Beleži prenos iz donjeg polu-bajta (bita 3 u
bit 4), što je ključno za BCD (Binary-Coded Decimal) aritmetiku.
- Bit
5 – F0 (Flag 0):
Opšti fleg koji je potpuno na raspolaganju programeru za bilo kakve
logičke potrebe u softveru.
- Bit
4 – RS1 (Register Bank Select 1): Viši bit za odabir aktivne banke registara.
- Bit
3 – RS0 (Register Bank Select 0): Niži bit za odabir aktivne banke registara.
- Bit
2 – OV (Overflow Flag): Setuje se ako aritmetička operacija sa
označenim brojevima (signed) napravi prekoračenje kapaciteta 8-bitnog
registra.
- Bit
1 – UD (User-Definable Flag): Još jedan fleg slobodan za potrebe
programera.
- Bit
0 – P (Parity Flag): Hardverski fleg koji uvek pokazuje paritet (paran/neparan broj
jedinica) u Akumulatoru (A). Ako Akumulator ima neparan broj jedinica, P
se postavlja na 1.
Za našu priču o optimizaciji najvažniji su bitovi RS1 i RS0. Direktnom manipulacijom ovih bitova, programer naređuje unutrašnjem dekoderu memorije da promeni fizičke lokacije registara R0-R7, stvarajući savršen softverski izolovan prostor bez upotrebe steka.
Ovaj tekst, kao i duboka konceptualna analiza
statusnih registara, nastali su u saradnji sa veštačkom inteligencijom (AI
Gemini) kao asistentom u učenju, koji pomaže u strukturiranju i mapiranju
hardverskih koncepata u razumljive celine.
Praktični deo
; =====================================================================
; EPISODA 2: DEMONSTRACIJA MANIPULACIJE BANKE PREKO PSW REGISTRA
; =====================================================================
ORG 0000H ; Reset vektor - odavde mikrokontroler pocinje rad
LJMP START ; Dug skok na glavni program
ORG 0030H ; Pocetak glavnog programa (zaobilazimo prekide)
START:
; 1. ZLATNO PRAVILO: Inicijalizacija steka iznad kriticnih zona
MOV SP, #2FH ; Stack Pointer postavljen na 2FH, stek raste od 30H navise
; --- RAD U PODRAZUMEVANOJ BANKI 0 (RS1=0, RS0=0) ---
MOV R0, #55H ; Upisi vrednost 55H u R0 (Banka 0, adresa 00H)
MOV A, R0 ; Prebaci vrednost iz R0 u Akumulator (A = 55H)
; --- MAGICNI PRELAZAK U BANKU 1 (RS1=0, RS0=1) ---
SETB RS0 ; Postavljamo bit RS0 na 1 (RS1 ostaje 0)
; --- RAD U BANKI 1 ---
MOV R0, #AAH ; Upisi vrednost AAH u R0 (Banka 1, adresa 08H)
; --- POVRATAK U BANKU 0 ---
CLR RS0 ; Resetujemo bit RS0 na 0. Vracamo se u Banku 0.
MOV A, R0 ; Ponovo citamo R0. Akumulator ponovo dobija 55H!
SJMP $ ; Beskonacna petlja (kraj programa)
END
Za razliku od programa na računaru koji po
završetku vraćaju kontrolu operativnom sistemu, mikrokontroler nema operativni
sistem i nikada ne sme da prestane sa radom.
Znak $ u
asembleru predstavlja trenutnu adresu na kojoj se procesor nalazi. Instrukcija SJMP $ (Short Jump) bukvalno naređuje procesoru da skoči
sam na sebe, ostajući zarobljen u beskonačnoj petlji na istom mestu. Bez
ove linije, Program Counter (PC) bi nastavio da linearno čita prazan prostor u
ROM memoriji (đubre od bajtova), što bi dovelo do nepredvidivog „divljanja“
procesora (engl. runaway code). Ovo je standardan način za bezbedno
„parkiranje“ mikrokontrolera na kraju programa.
📦 Članak i prateći materijali licencirani su pod Creative Commons CC BY 4.0 licencom uz navođenje izvora zilsel-invent.com, dok je izvorni kod pod MIT licencom.
Comments
Post a Comment