LDA zmienna
LSR A
LSR A
LSR A
STA wynik
Wartosc w zmienna jest w zakresie 00-FF, wykonujemy logiczne przesuniecie w prawo aby wywalic 3 nizsze bity.
Efektem bedzie "zaokraglenie" pewnych zakresow wartosci do jednej np:
- $00-$07 zapisze do wynik $00
- $08-$0F zapisze do wynik $01
- $10-$17 zapisze do wynik $02
- $18-$1F zapisze do wynik $03
- $20-$27 zapisze do wynik $04
(...)
- $E0-$E7 zapisze do wynik $1C
- $E8-$EF zapisze do wynik $1D
- $F0-$F7 zapisze do wynik $1E
- $F8-$FF zapisze do wynik $1F
W kodzie Z80 mam problem bo wyniki sa totalnie inne, domyslam sie, ze bit0 przenosi sie do bit7 czego nie ma w przypadku 6502
gdzie wypada i nie przenosi sie do bit7.
Probowalem uzyc rozkazu kasujacego znacznik C ale nic nie daje, z tego co czytam CCF nie kasuje ale robi invert C, niby OR A kasuje C
ale dalej nic nie zmienia - pewnie powodem sa same rozkazy shift right w Z80, ktore automatycznie przenosza bit0 do bit7??
LD A,(zmienna)
;CCF ? OR A - nic nie zmieniaja
RRC A
RRC A
RRC A
LD (wynik),A
EDIT: hmm teraz dziala - czy to jedyna metoda aby uzyskac ten sam efekt?
LD A,(zmienna)
RR A
OR A
RR A
OR A
RR A
OR A
LD (wynik),A
wychodzi na to, ze musze za kazdym RR zerowac C aby bit0 nie wlazil w bit7 ?