Ustawianie i kasowanie znaczników

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 13:20, 6 maj 2008
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 15:06, 6 maj 2008
KMK (Dyskusja | wkład)
(Bit 7)
Next diff →
Linia 54: Linia 54:
</pre> </pre>
Sprawdzenie z automatycznym skasowaniem (jeśli pozostałe bity bajtu mają wartość 0), zamiast: Sprawdzenie z automatycznym skasowaniem (jeśli pozostałe bity bajtu mają wartość 0), zamiast:
 +<pre>
 + lda znacznik
 + bpl skasowany
 + and #$7f
 + sta znacznik
 + ...
 +</pre>
 +możemy napisać:
<pre> <pre>
asl znacznik asl znacznik
- bcs ustawiony+ bcc skasowany
</pre> </pre>

Wersja z dnia 15:06, 6 maj 2008

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