m8div06252026d.asm

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