Ustawianie i kasowanie znaczników
From Atariki
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