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

U ovom praktičnom primeru demonstriraćemo kako se u asembleru vrši inicijalizacija steka, upis podataka u podrazumevanu Banku 0, a zatim prebacivanje u Banku 1 pomoću direktnog gađanja bitova u PSW registru. Primetićete da registar R0 u različitim bankama čuva potpuno različite vrednosti jer hardver preusmerava podatke na različite fizičke adrese u RAM-u.
; =====================================================================
; 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
📌 Inženjerska napomena: Zašto „skačemo sami na sebe“?

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.


Autor: Vladimir Savić / AI Gemini

Povezani članci:

Comments

Popular posts from this blog

Fake VC830L digital multimeter

Electrolytic capacitors and design rules

How to design LM324 Astable Multivibrator