home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta1.arc / SPARTA11.DOC < prev    next >
Text File  |  1999-02-20  |  4KB  |  1 lines

  1.       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 rejestrw :¢¢      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-najm odszy bajt !¢¢      Pierwsza z omwionych 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 powtrze 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⇧pi o przepe nienie (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 kocu zmniejszany jest licznik p❎tli¢           bne eB02A¢           rts             i gdy rwny zero procedura si❎ koczy.¢¢¢      Nieco bardziej skomplikowana jest procedura dzielenia.¢      Post❎puje ona wed ug 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 przepe nienie¢           sec¢  eAFFE    lda v3_32,x     porwnywany 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 porwnania.¢¢  eB019    ldx #$03        Teraz iloraz zostaje przesuni❎ty w lewo z pobraniem¢  eB01B    rol v1_32,x     wyniku porwnania.¢           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 wype nia tablic❎ v1_32 zerami.¢           lda #$00¢  eB055    sta v1_32,x¢           dex¢           bpl eB055¢           rts¢¢           end of doc.¢