Programowanie: Mnożenie 16-bitowe z wynikiem 32-bitowym: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
 
Nie podano opisu zmian
Linia 6: Linia 6:


         clc
         clc
         lda    fr0    ;if one of the numbers is 0
         lda    fr0    ;gdy mnoznik albo mnozna jest zerem
         ora    fr0+1  ;the result is 0 as well
         ora    fr0+1  ;to zerem jest rowniez wynik.
         beq    ?clr
         beq    ?clr


Linia 14: Linia 14:
         beq    ?clr
         beq    ?clr


         ldx    #$01    ;copy fr0 to frf
         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    ;clear the fr0 (result)
         jsr    ?clr    ;zerujemy bajty wyniku


         ldx    #16
         ldx    #16
?mul    lsr    fr1+1  ;main loop
?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