Ustawianie i kasowanie znaczników

From Atariki

Revision as of 13:15, 6 maj 2008; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Gdy w programie zachodzi potrzeba zastosowania globalnego, dwustanowego znacznika (tzw. flagi), najwygodniej jest w tym celu użyć bitów 7 lub 0 komórki pamięci:

Bit 7

Bit 7 komórki pamięci, gdy pozostała jej zawartość nie ma dla programu znaczenia, można ustawić rozkazem ROR. Zamiast:

    lda #$80
    sta znacznik

można zaoszczędzić 1 bajt programu w ten sposób:

    sec
    ror znacznik

Analogicznie, do skasowania bitu 7 mozna użyć rozkazu LSR. Zamiast:

    lda #$00
    sta znacznik

piszemy:

    lsr znacznik

oszczędzając dwa bajty. Dodatkową korzyścią jest ustalenie stanu bitu N rejestru znaczników procesora (zawsze skasowany po LSR), tak więc gdy zachodzi potem potrzeba wykonania krótkiego skoku bezwarunkowego, można użyć BPL. Zamiast:

    lsr argument
    jmp adres

można użyć:

    lsr argument
    bpl adres

Gdy chcemy skasować bit 7 komórki pamięci nie naruszając stanu pozostałych jej bitów, zamiast:

    lda znaczniki
    and #$7f
    sta znaczniki

oszczędzamy dwa bajty pisząc:

    asl znaczniki
    lsr znaczniki

Sprawdzenie stanu takiego znacznika robi się rozkazem BIT lub LDA/LDX/LDy i odgałęzieniem BPL/BMI zależnie od potrzeb. Sprawdzenie z automatycznym skasowaniem (jeśli pozostałe bity bajtu mają wartość 0):

    asl znacznik
    bcs ustawiony

Bit 0

Ustawianie i kasowanie bitu 0 robi się analogicznie jak wyżej opisano z bitem 7. Ustawienie:

    sec
    rol znacznik

Skasowanie, gdy pozostałe bity nie mają znaczenia:

    asl znacznik

albo, gdy mają:

    lsr znaczniki
    asl znaczniki

Sprawdzenie stanu z automatycznym skasowaniem (warunek jak powyżej):

    lsr znacznik
    bcs ustawiony

Sprawdzenie stanu bez skasowania:

    lda znacznik
    lsr
    bcs ustawiony
Personal tools