Ustawianie i kasowanie znaczników

From Atariki

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 można 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, zamiast JMP:

    lsr argument
    jmp adres

można użyć BPL:

    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. Zamiast:

    lda znacznik
    and #$80
    bne ustawiony

piszemy:

    bit znacznik
    bmi ustawiony

Sprawdzenie z automatycznym skasowaniem (jeśli pozostałe bity bajtu mają wartość 0), zamiast:

    lda znacznik
    bpl skasowany
    and #$7f
    sta znacznik
    ...

możemy napisać:

    asl znacznik
    bcc skasowany

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, zamiast:

    lda znacznik
    and #$01
    bne ustawiony

oszczędzamy 1 bajt:

    lda znacznik
    lsr
    bcs ustawiony
Personal tools