Programowanie: Dzielenie 16-bitowe z wynikiem 32-bitowym
From Atariki
(Różnice między wersjami)
Wersja z dnia 07:07, 21 gru 2005 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 07:14, 21 gru 2005 KMK (Dyskusja | wkład) Next diff → |
||
Linia 1: | Linia 1: | ||
- | Procedura dzieli 16-bitową liczbę bez znaku umieszczoną we FR0 ($D4) przez takąż liczbę umieszczoną w FR1 ($E0). 16-bitowy wynik umieszczany jest w FR0, a 16-bitowa reszta z dzielenia w FR0+2. Opuszczenie procedury z ustawionym znacznikiem C sygnalizuje przepełnienie. | + | Procedura dzieli 16-bitową liczbę bez znaku umieszczoną we FR0 ($D4) przez takąż liczbę umieszczoną w FR1 ($E0). 16-bitowy wynik całkowity umieszczany jest w FR0, a 16-bitowa reszta z dzielenia w FR0+2. Opuszczenie procedury z ustawionym znacznikiem C sygnalizuje przepełnienie. |
<pre> | <pre> | ||
Linia 61: | Linia 61: | ||
rts | rts | ||
</pre> | </pre> | ||
+ | |||
+ | Procedura jest "kompatybilna" z procedurą [[Programowanie: Mnożenie 16-bitowe z wynikiem 32-bitowym|mnożenia]] (quod vide). | ||
+ | |||
+ | Główna pętla zajmuje - w zależności od składników - od 832 do 1456 cykli maszynowych. | ||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] |
Wersja z dnia 07:14, 21 gru 2005
Procedura dzieli 16-bitową liczbę bez znaku umieszczoną we FR0 ($D4) przez takąż liczbę umieszczoną w FR1 ($E0). 16-bitowy wynik całkowity umieszczany jest w FR0, a 16-bitowa reszta z dzielenia w FR0+2. Opuszczenie procedury z ustawionym znacznikiem C sygnalizuje przepełnienie.
int16div lda fr1 ;dzielnik musi byc wiekszy od zera ora fr1+1 beq ?e lda fr0 ;dzielnik wiekszy od dzielnej cmp fr1 ;daje w wyniku zero, a dzielna lda fr0+1 ;stanowi reszte sbc fr1+1 bcs ?div ldx #$01 ?d lda fr0,x sta fr0+2,x dex bpl ?d lda #$00 sta fr0 sta fr0+1 rts ?div lda #$00 ;kasujemy reszte sta fr0+2 sta fr0+3 ldx #16 ?l asl fr0 rol fr0+1 rol fr0+2 rol fr0+3 lda fr0+2 cmp fr1 lda fr0+3 sbc fr1+1 bcc ?s lda fr0+2 sbc fr1 sta fr0+2 lda fr0+3 sbc fr1+1 sta fr0+3 inc fr0 bne ?s inc fr0+1 bne ?s ?e sec rts ?s dex bne ?l clc rts
Procedura jest "kompatybilna" z procedurą mnożenia (quod vide).
Główna pętla zajmuje - w zależności od składników - od 832 do 1456 cykli maszynowych.