OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 19.03.2024, 12:19

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvek: 1 ] 
Autor Zpráva
PříspěvekNapsal: 27.05.2021, 14:37 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 579
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 90 times
pro ty co programují v assembleru 8080 / Z80 a potřebovali by dělit nebo zbytek po dělení 2-bajtových čísel, zde je zajímavá rutina:

Kód:
;dělení DE=int(DE/HL) a HL=DE MOD HL (zbytek)
;--------------------------------------------
DELENI:   push    bc      ;uschovej BC
   ld      a,d
   xor     h
   push    af      ;výsledné znaménko ve flagu M
   call    ABSDEHL      ;DE=ABS(DE) a HL=ABS(HL)
   xor     a      ;vynuluj A
   sub     l      ;-L
   ld      c,a      ;do C
   sbc     a,a      ;přenos
   sub     h      ;-H
   ld      b,a      ;do B -> BC=-HL
   ld      hl,0   ;připrav na výpočet
   ld      a,10h      ;počítadlo 16x
del0:   add     hl,hl
   ex      de,hl
   add     hl,hl
   ex      de,hl
   jp      nc,del1
   inc     hl
del1:   push    hl
   add     hl,bc
   jp      nc,del2
   ex      (sp),hl
   inc     de
del2:   pop     hl
   dec     a      ;sniž počítadlo
   jp      nz,del0   ;opakuj 16x
   pop     af      ;obnov výsledné znaménko
   jp      m,del3   ;pro záporné odskoč
   pop     bc      ;obnov BC
   ret         ;a návrat     

del3:   ld      a,h      ;otestuj HL na 0000
   or      l
   jp      z,del4   ;pokud bylo, poskoč
   add     hl,bc      ;jinak přičti hodnotu
   call    MINHL      ;HL=-HL
del4:   ex      de,hl      ;DE do HL
   call    MINHL      ;HL=-HL
   ex      de,hl      ;a zpět
   pop     bc
   ret     

;DE=ABS(DE) a HL=ABS(HL)
ABSDEHL:   ex      de,hl      ;DE do HL
   call    ABSHL      ;HL=ABS(HL)
   ret     m      ;nemělo by nastat
   ex      de,hl

;HL=ABS(HL)
ABSHL:   ld      a,h
   or      a
   ret     p

;HL=-HL
MINHL:   xor     a
   sub     l
   ld      l,a
   sbc     a,a
   sub     h
   ld      h,a
   ret


autorem je někdo z FEL Praha - vytaženo z programu vytvořeného FEL-Pascalem (1986-7)

lze jednoduše upravit vynecháním pár řádků na dělení čísel bez znamének


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvek: 1 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz