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