;
; Programmodul 'MULTI' zur Multiplikation
; von zwei 16 Bit Zahlen
;
; IN reg bc : Multiplikator
; reg de : Multiplikand
;
; OUT reg bc : Multiplikator (bleibt erhalten)
; reg de : hoeherwertige 16 Bit des Produkts
; reg hl : niederwertige
;
; REG a,f,d,e,h,l
;
0000 multi:
0000 3E10 ld a,16 ; Zaehler vorbelegen
0002 210000 ld hl,0
0005 29 mloop: add hl,hl ; <dehl> links schieben
0006 CB13 rl e ; hochwertiges Bit
0008 CB12 rl d ; ueberpruefen
000A 3004 jr nc,nosum
000C 09 add hl,bc ; aufaddieren
000D 3001 jr nc,nosum
000F 13 inc de ; Uebertrag in hochwertiges
; Wort eintragen
0010 3D nosum: dec a
0011 20F2 jr nz,mloop ; fuer jedes Bit in de
; wiederholen
; Produkt in dehl
0013 C9 ret
;
; Programmodul 'DIVI' zur Division von
; zwei 16 Bit Zahlen
;
; IN reg bc : Divisor
; reg de : Dividend
;
; OUT reg bc : Divisor (bleibt erhalten)
; reg de : Rest der Division
; reg hl : Quotient
;
; REG a,f,d,e,h,l
;
0014 divi:
0014 AF xor a ; Zaehler vorbelegen
0015 67 ld h,a
0016 6F ld l,a
0017 3E10 ld a,16
0019 CB13 dloop: rl e ; <de> links schieben
001B CB12 rl d
001D ED6A adc hl,hl ; <hl> links schieben
001F ED42 sbc hl,bc ; Subtraktion
0021 3001 jr nc,diffok
0023 09 add hl,bc ; Sub. revidieren
0024 3F diffok: ccf
0025 3D dec a
0026 20F1 jr nz,dloop ; fuer jedes Bit in de
; wiederholen
; Quotient in hl, Rest in de
0028 C9 ret
Bild 8. Die Programme für Multiplikation und Division
|