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
