First cut at non-restoring division
authorNick Downing <nick@ndcode.org>
Mon, 10 Jun 2019 09:59:47 +0000 (19:59 +1000)
committerNick Downing <nick@ndcode.org>
Mon, 10 Jun 2019 09:59:47 +0000 (19:59 +1000)
sm.asm

diff --git a/sm.asm b/sm.asm
index 9c72f71..3b7712a 100644 (file)
--- a/sm.asm
+++ b/sm.asm
@@ -7,6 +7,46 @@
        ld      bc,0x30 ;0x38 ;0x10
        ldir
 
+       ld      hl,0x1234
+       ld      de,0x56
+       call    div_hl_de
+       ex      de,hl
+       call    print_word
+       ex      de,hl
+       call    print_space
+       call    print_word
+       call    print_crlf
+
+       ld      hl,0x6543
+       ld      de,0x21
+       call    div_hl_de
+       ex      de,hl
+       call    print_word
+       ex      de,hl
+       call    print_space
+       call    print_word
+       call    print_crlf
+
+       ld      hl,0xb975
+       ld      de,0x31
+       call    div_hl_de
+       ex      de,hl
+       call    print_word
+       ex      de,hl
+       call    print_space
+       call    print_word
+       call    print_crlf
+
+       ld      hl,0xdb97
+       ld      de,0x531
+       call    div_hl_de
+       ex      de,hl
+       call    print_word
+       ex      de,hl
+       call    print_space
+       call    print_word
+       call    print_crlf
+
        pop     de
        call    sm
 
@@ -807,26 +847,64 @@ div_hl_de:
        ld      c,l
        ld      hl,0
        ld      b,8
+       scf
 1$:    rla
        adc     hl,hl
        sbc     hl,de
        jr      nc,2$
-       add     hl,de
+       sub     1
+       jr      6$
 2$:    djnz    1$
        rla
-       cpl
+       dec     a
        push    af
+ ld a,'a
+ call print_char
        ld      a,c
        ld      b,8
+       scf
 3$:    rla
        adc     hl,hl
        sbc     hl,de
        jr      nc,4$
-       add     hl,de
+       sub     1
+       jr      8$
 4$:    djnz    3$
        rla
-       cpl
+       dec     a
+       pop     de
+       ld      e,a
+ ld a,'b
+ call print_char
+       pop     bc
+       ret
+
+5$:    rla
+       adc     hl,hl
+       add     hl,de
+       jr      nc,6$
+       add     1
+       jr      2$
+6$:    djnz    5$
+       rla
+       push    af
+ ld a,'c
+ call print_char
+       ld      a,c
+       ld      b,8
+       scf
+7$:    rla
+       adc     hl,hl
+       add     hl,de
+       jr      nc,8$
+       add     1
+       jr      4$
+8$:    djnz    7$
+       rla
+       add     hl,de
        pop     de
        ld      e,a
+ ld a,'d
+ call print_char
        pop     bc
        ret