Dwie nast❎pne procedury s⇧ bardzo uəyteczne dla pisz⇧cych programy.¢ Wykonuj⇧ one mnoəenie i dzielenia na 32 bitowych liczbach. Uəywaj⇧ do tego¢ trzech rejestrw :¢¢ v1_32 equ $B5F¢ v2_32 equ $B5B¢ v3_32 equ $B57¢¢ UWAGA : w rejestrach tych liczby zapisane s⇧ w odwrotnej notacji to znaczy¢ najstarszy-najmodszy bajt !¢¢ Pierwsza z omwionych procedur mnoəy 2 liczby 32 bitowe.¢ v1_32=v2_32*v3_32¢ Rejstry v2_32 i v3_32 ulegaj⇧ zmianie !¢¢ org $B025¢¢ v3_32 equ $B57¢ v2_32 equ $B5B¢ v1_32 equ $B5F¢¢ zv_32 equ $B051 Multipication 32 bit variable.¢¢ MUL_32 ldy #$20 Na pocz⇧tku rejestr wyniku jest zerowany.¢ jsr zv_32 Liczba powtrze dla p❎tli mnoəenia Y=32.¢¢ eB02A clc Dla kaədego przebiegu wynik mnoəony przez 2.¢ ldx #$03¢ eB02D rol v1_32,x¢ dex¢ bpl eB02D¢¢ clc¢ ldx #$03 Teraz mnoənik przesuwany w lewo.¢ eB036 rol v3_32,x¢ dex¢ bpl eB036¢ bcc eB04D¢¢ clc Gdy wyst⇧pio przepenienie (bit znacz⇧cy)¢ ldx #$03 Iloczyn zwi❎kszany o mnoən⇧.¢ eB041 lda v2_32,x¢ adc v1_32,x¢ sta v1_32,x¢ dex¢ bpl eB041¢¢ eB04D dey Na kocu zmniejszany jest licznik p❎tli¢ bne eB02A¢ rts i gdy rwny zero procedura si❎ koczy.¢¢¢ Nieco bardziej skomplikowana jest procedura dzielenia.¢ Post❎puje ona wedug wzoru v1_32=v3_32/v2_32, a rejstry v3_32 i v2_32¢ s⇧ zmieniane w czasie oblicze.¢¢ org $AFD9 DIVision 32 bit variable.¢¢ v3_32 equ $B57¢ v2_32 equ $B5B¢ v1_32 equ $B5F¢¢ zv_32 equ $B051¢¢ DIV_32 jsr zv_32 Na pocz⇧tku rejestr wyniku jest kasowany.¢¢ ldy #$01 Licznik p❎tli ustawiany jest na 1.¢¢ eAFDE clc Teraz program przesuwa w lewo dzielnik tak¢ ldx #$03 ¢ eAFE1 rol v2_32,x¢ dex¢ bpl eAFE1¢¢ iny aby ustawiony by jej najstarszy bit.¢ bit v2_32¢ bmi eAFFB¢ cpy #$21¢ bne eAFDE¢¢ eAFF1 ldx #$03 Na pocz⇧tku drugiej p❎tli programu dzielenia¢ eAFF3 rol v3_32,x dzielna mnoəona jest przez dwa.¢ dex¢ bpl eAFF3¢ bcs eB009¢¢ eAFFB ldx #$03 Gdy nie wyst⇧pi przepenienie¢ sec¢ eAFFE lda v3_32,x porwnywany jest dzilnik z dzieln⇧.¢ sbc v2_32,x¢ dex¢ bpl eAFFE¢ bcc eB019¢¢ eB009 ldx #$03 Gdy dzielna wi❎ksza od dzielnika zostaje ona¢ sec zmniejszona o dzielnik.¢ eB00C lda v3_32,x¢ sbc v2_32,x¢ sta v3_32,x¢ dex¢ bpl eB00C¢ sec Potem od③wierzony zostaje wynik porwnania.¢¢ eB019 ldx #$03 Teraz iloraz zostaje przesuni❎ty w lewo z pobraniem¢ eB01B rol v1_32,x wyniku porwnania.¢ dex¢ bpl eB01B¢¢ dey Na koniec licznik p❎tli zostaje zmniejszony i gdy¢ bne eAFF1 si❎ skasuje nast❎puje koniec procedury.¢ rts¢¢ Pomocnicza procedura kasowania zmiennej v1_32.¢¢ org $B051 Zero v1_32¢¢ v1_32 equ $B5F¢¢ zv_32 ldx #$03 Procedura wypenia tablic❎ v1_32 zerami.¢ lda #$00¢ eB055 sta v1_32,x¢ dex¢ bpl eB055¢ rts¢¢ end of doc.¢