Ustawianie i kasowanie znaczników

From Atariki

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

← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)

Linia 12: Linia 12:
ror znacznik ror znacznik
</pre> </pre>
-Analogicznie, do skasowania bitu 7 mozna użyć rozkazu LSR. Zamiast:+Analogicznie, do skasowania bitu 7 można użyć rozkazu LSR. Zamiast:
<pre> <pre>
lda #$00 lda #$00
Linia 21: Linia 21:
lsr znacznik lsr znacznik
</pre> </pre>
-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:+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:
<pre> <pre>
lsr argument lsr argument
jmp adres jmp adres
</pre> </pre>
-można użyć:+można użyć BPL:
<pre> <pre>
lsr argument lsr argument
Linia 42: Linia 42:
lsr znaczniki lsr znaczniki
</pre> </pre>
-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):+Sprawdzenie stanu takiego znacznika robi się rozkazem BIT lub LDA/LDX/LDY i odgałęzieniem BPL/BMI zależnie od potrzeb. Zamiast:
 +<pre>
 + lda znacznik
 + and #$80
 + bne ustawiony
 +</pre>
 +piszemy:
 +<pre>
 + bit znacznik
 + bmi ustawiony
 +</pre>
 +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>
Linia 68: Linia 87:
bcs ustawiony bcs ustawiony
</pre> </pre>
-Sprawdzenie stanu bez skasowania:+Sprawdzenie stanu bez skasowania, zamiast:
 +<pre>
 + lda znacznik
 + and #$01
 + bne ustawiony
 +</pre>
 +oszczędzamy 1 bajt:
<pre> <pre>
lda znacznik lda znacznik

Aktualna wersja

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