; ; 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
|