Ustawianie i kasowanie znaczników: Różnice pomiędzy wersjami
Nie podano opisu zmian |
mNie podano opisu zmian |
||
| (Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
| Linia 12: | Linia 12: | ||
ror znacznik | ror znacznik | ||
</pre> | </pre> | ||
Analogicznie, do skasowania bitu 7 | 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, | 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/ | 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 | ||
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 z 4 wrz 2011, 07:02
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