Ustawianie i kasowanie znaczników
From Atariki
Wersja z dnia 13:20, 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. Zamiast: | + | Sprawdzenie stanu takiego znacznika robi się rozkazem BIT lub LDA/LDX/LDY i odgałęzieniem BPL/BMI zależnie od potrzeb. Zamiast: |
<pre> | <pre> | ||
lda znacznik | lda znacznik | ||
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> | ||
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