;; david vajda ;; div command bitwise ;; 06/25/2026 .include "m8def.inc" .equ DIVIDEND = 56 .equ DIVISOR = 7 ldi r16, HIGH (RAMEND) out SPH, r16 ldi r16, LOW (RAMEND) out SPL, r16 ldi r16, 0xff out DDRD, r16 ;; r16: dividend ;; r17: divisor ;; r18: dividend tmp - nach verknuepfung mit bitmaske ;; r19: bitmaske. ;; r20: der anfang der bitmaske: die bitmaske ;; koennte immer bei 0b10000000 sein, ... ;; 0b10000000, 0b11000000, 0b11100000 ;; da sie aber wandert .. naemlich an die hinteren teile ;; 0b00010000, 0b00011000, 0b00011100 z.B. ;; gibt es ein bitmasken startflag: angefangen bei ;; 0b10000000 geht es in der auesseren schleife nach: ;; 0b01000000, 0b00100000, 0b00010000 ... usw. shiftright001: sbrc r16, 7 rjmp shiftright001en0d lsl r16 rjmp shiftright001 shiftright001end: ;; ... ldi r20, 0b10000000 div000: mov r19, r20 div001: mov r18, r16 ;; den dividenden aus dem bleiben r16 ins tmp r18 and r18, r19 ;; den divenden im tmp mit der bitmaske verknuepfen ;; hier die eigentliche subtraktion cp r18, r17 brlt subtraction001end subtraction001: sub r18, r17 subtraction001end: ;; hier die eigentliche subtraktion beendet... lsr r19 ;; die maske eines rechts um sie zu vergroessern or r19, r20 rjmp div001 lsr r17 ;; den divisor weiter nach rechts schieben lsr r20 rjmp div000 end: rjmp end