OldComp.cz https://oldcomp.cz/ |
|
celočílené dělení 2 16-bitových čísel se znaménkem https://oldcomp.cz/viewtopic.php?f=47&t=10076 |
Stránka 1 z 1 |
Autor: | l00k [ 27.05.2021, 14:37 ] |
Předmět příspěvku: | celočílené dělení 2 16-bitových čísel se znaménkem |
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 |
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |