Rozszerzenie arytmetyczne: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
optymalizacja |
red. |
||
| Linia 6: | Linia 6: | ||
eor #$ff | eor #$ff | ||
Druga szybsza i krótsza metoda | Druga szybsza i krótsza metoda (zaproponowana przez [[xxl]]-a): | ||
ora #$7f | ora #$7f | ||
bmi _rts | bmi _rts | ||
lda #$00 | lda #$00 | ||
_rts | |||
Pomysł został zaprezentowany przez [[mono]]. | Pomysł został zaprezentowany przez [[mono]]. | ||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] | ||
Wersja z 12 paź 2012, 21:22
Kod dokonuje rozszerzenia arytmetycznego danej z rozmiaru bajtu do 16-bitowego słowa, tzn. powielenia bitu znaku tak, żeby z 8-bitowej wartości dodatniej powstała 16-bitowa wartość dodatnia, a z ujemnej - ujemna. Daną wejściową procedury - znajdującą się w akumulatorze - jest bajt do rozszerzenia. Daną wyjściową - do odebrania również w akumulatorze - jest starszy bajt 16-bitowego słowa powstałego po rozszerzeniu.
asl lda #0 adc #$ff eor #$ff
Druga szybsza i krótsza metoda (zaproponowana przez xxl-a):
ora #$7f bmi _rts lda #$00 _rts
Pomysł został zaprezentowany przez mono.