返回该小组首页 回复主题
mikezhong

mikezhong

小组等级:     E币:173  (E币换礼)

#1楼主:匠人及各位书友,书中多字节除法问题,请帮忙看看

文章发表于:2008-09-02 04:07

匠人及各位书友:

你们好.针对书上的32位的除法,我DIY成16位的除法.试了很多数除后的结果不正确,肯定是我程序中哪里有问题,但查不出来,请帮忙指点下!

;---------------------------------------------------------------
;子程序DIY来自匠人手记中第147程序.
;2字节除以2字节除法程序
;入口:被除数 NUM_AH,NUM_AL
;      除数   NUM_BH,NUM_BL
;出口:商     NUM_CH,NUM_CL
;      余数   NUM_DH,NUM_DL
;---------------------------------------------------------------
DIV_16_16:
         MOV    A,@16
         MOV    COUNT_JSQ,A
         CLR    NUM_CH
         CLR    NUM_CL
         CLR    NUM_DH
         CLR    NUM_DL
         BC     STATUS,C
DIV_16_16_LP:
         RLC    NUM_AL
         RLC    NUM_AH
         RLC    NUM_DL
         RLC    NUM_DH
         JBC    STATUS,C
         JMP    DIV_16_16_LP1      ;C=1 则跳
                ;这里比较余数和除数的大小
         MOV    A,NUM_BH
         SUB    A,NUM_DH
         JBS    STATUS,C
         JMP    DIV_16_16_LP2
DIV_16_16_LP1:
         MOV    A,NUM_BL
         SUB    NUM_DL,A
         JBS    STATUS,C
         DEC    NUM_BH
         MOV    A,NUM_BH
         SUB    NUM_DH,A
         BS     STATUS,C
DIV_16_16_LP2:
         RLC    NUM_CL
         RLC    NUM_CH
         DJZ    COUNT_JSQ
         JMP    DIV_16_16_LP
         BC     STATUS,C
         RET

mikezhong

   小组等级:    E币:173  (E币换礼)

#2

文章发表于:2008-09-02 16:49

问题已经解决,谢谢匠人书的详细描述..受益非浅.附上正确的代码.

;---------------------------------------------------------------
;子程序来自程序匠人的4字节除法程序,看p147
;2字节除以2字节除法程序
;入口:被除数 NUM_AH,NUM_AL
;      除数   NUM_BH,NUM_BL
;出口:商     NUM_CH,NUM_CL
;      余数   NUM_DH,NUM_DL
;---------------------------------------------------------------
DIV_16_16:
         MOV    A,@16
         MOV    COUNT_JSQ,A
         CLR    NUM_CH
         CLR    NUM_CL
         CLR    NUM_DH
         CLR    NUM_DL
         BC     STATUS,C
DIV_16_16_LP:
         RLC    NUM_AL
         RLC    NUM_AH
         RLC    NUM_DL
         RLC    NUM_DH
         JBC    STATUS,C
         JMP    DIV_16_16_LP1      ;C=1 则跳
                ;这里比较余数和除数的大小
         MOV    A,NUM_BH
         SUB    A,NUM_DH
         JBS    STATUS,C
         JMP    DIV_16_16_LP2
         MOV    A,NUM_DH
         SUB    A,NUM_BH
         JBS    STATUS,C  
         JMP    DIV_16_16_LP1 
                               ;NUM_BH=NUM_DH
         MOV    A,NUM_BL
         SUB    A,NUM_DL
         JBS    STATUS,C
         JMP    DIV_16_16_LP2
DIV_16_16_LP1:
         MOV    A,NUM_BL
         SUB    NUM_DL,A
         JBS    STATUS,C
         DEC    NUM_DH
         MOV    A,NUM_BH
         SUB    NUM_DH,A
         BS     STATUS,C
DIV_16_16_LP2:
         RLC    NUM_CL
         RLC    NUM_CH
        
         DJZ    COUNT_JSQ
         JMP    DIV_16_16_LP
         BC     STATUS,C
         RET

程序匠人

   小组等级:    E币:1300  (E币换礼)

#3

文章发表于:2008-09-02 22:14

楼主是好样的!

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

所有小组精华文章