Rozszerzenie arytmetyczne
From Atariki
(Różnice między wersjami)
| Wersja z dnia 16:11, 12 paź 2012 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 19:16, 12 paź 2012 Xxl (Dyskusja | wkład) (optymalizacja) Next diff → |
||
| Linia 5: | Linia 5: | ||
| adc #$ff | adc #$ff | ||
| eor #$ff | eor #$ff | ||
| + | |||
| + | Druga szybsza i krótsza metoda | ||
| + | |||
| + | ora #$7f | ||
| + | bmi _rts | ||
| + | lda #$00 | ||
| Pomysł został zaprezentowany przez [[mono]]. | Pomysł został zaprezentowany przez [[mono]]. | ||
| [[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] | ||
Wersja z dnia 19:16, 12 paź 2012
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
ora #$7f bmi _rts lda #$00
Pomysł został zaprezentowany przez mono.
