Ustawianie i kasowanie znaczników
From Atariki
Wersja z dnia 13:15, 6 maj 2008 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 13:20, 6 maj 2008 KMK (Dyskusja | wkład) Next diff → |
||
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> | <pre> | ||
asl znacznik | asl znacznik | ||
Linia 68: | Linia 79: | ||
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 |
Wersja z dnia 13:20, 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:
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, zamiast:
lda znacznik and #$01 bne ustawiony
oszczędzamy 1 bajt:
lda znacznik lsr bcs ustawiony