Programowanie: Mnożenie 16-bitowe z wynikiem 32-bitowym: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| Linia 6: | Linia 6: | ||
clc | clc | ||
lda fr0 ; | lda fr0 ;gdy mnoznik albo mnozna jest zerem | ||
ora fr0+1 ; | ora fr0+1 ;to zerem jest rowniez wynik. | ||
beq ?clr | beq ?clr | ||
| Linia 14: | Linia 14: | ||
beq ?clr | beq ?clr | ||
ldx #$01 ; | ldx #$01 ;kopiujemy mnozna do rejestru pomocniczego | ||
?cp lda fr0,x | ?cp lda fr0,x | ||
sta ?frf,x | sta ?frf,x | ||
| Linia 20: | Linia 20: | ||
bpl ?cp | bpl ?cp | ||
jsr ?clr ; | jsr ?clr ;zerujemy bajty wyniku | ||
ldx #16 | ldx #16 | ||
?mul lsr fr1+1 ; | ?mul lsr fr1+1 ;glowna petla | ||
ror fr1 | ror fr1 | ||
bcc ?noad | bcc ?noad | ||
Wersja z 21 gru 2005, 07:27
Procedura mnoży dwie 16-bitowe liczby bez znaku umieszczone w rejestrach FR0 ($D4) i FR1 ($E0). 32-bitowy wynik umieszczany jest w FR0.
int16mul
?frf = fr1+2
clc
lda fr0 ;gdy mnoznik albo mnozna jest zerem
ora fr0+1 ;to zerem jest rowniez wynik.
beq ?clr
lda fr1
ora fr1+1
beq ?clr
ldx #$01 ;kopiujemy mnozna do rejestru pomocniczego
?cp lda fr0,x
sta ?frf,x
dex
bpl ?cp
jsr ?clr ;zerujemy bajty wyniku
ldx #16
?mul lsr fr1+1 ;glowna petla
ror fr1
bcc ?noad
clc
lda fr0+2
adc ?frf
sta fr0+2
lda fr0+3
adc ?frf+1
sta fr0+3
bcs ?exit
?noad lsr fr0+3
ror fr0+2
ror fr0+1
ror fr0
dex
bne ?mul
clc
rts
?clr ldx #$03
lda #$00
?cl sta fr0,x
dex
bpl ?cl
rts