;***************** ;** UP Division ** ;***************** div16: ;FU: klassische vzl. Ganzzahldivision 16bit/8bit=8bit Rest 8bit ;PE: D_HI:D_LO=Dividend, DIV=Divisor (unverändert) ;PA: D_HI=Rest, D_LO=Ergebnis, bei Division durch Null D_LO=0FFh ;VR: D_LO, D_HI, cl, flags, w ;TA: 200..250 (inkl. return) movlw 8 movwf cl div16_loop: CLRC ;CY löschen rlf D_LO,f ;von rechts Null-Bit einschieben rlf D_HI,f ;Bit durchschieben SKPNC goto div16_overbit ;ein Bit wurde rausgeschoben! movfw DIV ;W mit Nenner laden subwf D_HI,w ;w=HI-DIV, CY=0 wenn HI zu klein SKPC goto div16_zerobit ;wenn HI zu klein war: Null-Bit div16_overbit: movfw DIV subwf D_HI,f ;HI-=DIV, Subtraktion wahr machen bsf D_LO,0 ;ein Bit setzen - das Ergebnis div16_zerobit: ;wird mitgeschoben! decfsz cl,f goto div16_loop ;und voilà: der Rest bleibt in HI einfach stehen! return