; REGISTER DEFINITIONS .def DIVID = R16 ; Dividend .def DIVIS = R17 ; Divisor .def QUOT = R18 ; Quotient .CSEG ; CODE SEGMENT .ORG $0000 ; Startadresse INIT: LDI DIVID, 23 ; DIVIDEND setzen LDI DIVIS, 23 ; DIVISOR setzen START: CLR QUOT ; QUOTIENT auf 0 setzen CALL DIVSUB ; Subroutine aufrufen, benoetigte Werte DIVID und ; DIVIS werden in R16 und R17 uebergeben END: RJMP END ; Dauerschleife, Programm beendet ; Unterprogramm zur Berechnung des ganzzahligen Quotienten und des Restes ; DIVSUB wird so oft durchlaufen, wie "der Divisor in den Dividenden passt" DIVSUB: CP DIVID, DIVIs ; Divisor < Dividend ? BRLO ENDSUB ; nein: weiter in END SUB DIVID, DIVIS ; subtrahiere Divisor vom Dividenden INC QUOT ; Quotient um eins erhoehen RJMP DIVSUB ; wiederhole DIVSUB ENDSUB: MOV DIVIS, DIVID ; REST auf R17 legen MOV DIVID, QUOT ; QUOT auf R16 legen RET ; zurück zum Hauptprogramm, Quotient und Rest ; werden in R16 und R17 zurückgegeben