本程序实现双字节无符号数除法。
;入口参数:被除数在SOUH:SOU中,除数在RLTH:RLT中。
;出口参数:商在SOUH:SOU中,余数在RLTH:RLT中.
;占用资源:W,STATUS,023H,024H,025H,026H,027H,028H,029H,一重堆栈。
;说 明: 用户在调用该子程序之前必须确定除数不为零,否则得不到正确结果.
IFNDEF DUDIV1
#DEFINE DUDIV1
DUDIV MOVLW .16 ;循环16次
MOVWF CNT
CLRF TEMP2
CLRF TEMP1 ;TEMP2:TEMP1得到余数
BCF STATUS,C
RLF SOU,F
RLF SOUH,F
RLF TEMP1,F
RLF TEMP2,F
LOOP79 MOVF RLTH,W
SUBWF TEMP2,W ;检测是否余数大于除数
BTFSS STATUS,Z
GOTO NOCHK
MOVF RLT,W
SUBWF TEMP1,W ;如果高位相等则检测低位
NOCHK BTFSS STATUS,C
GOTO NOGO
MOVF RLT,W ;余数减除数
SUBWF TEMP1,F
BTFSS STATUS,C
DECF TEMP2,F
MOVF RLTH,W
SUBWF TEMP2,F
BSF STATUS,C ;结果中移入1
NOGO RLF SOU,F
RLF SOUH,F
RLF TEMP1,F
RLF TEMP2,F
DECFSZ CNT,F
GOTO LOOP79
BCF STATUS,C
RRF TEMP2,W
MOVWF RLTH
RRF TEMP1,W ;恢复余数
MOVWF RLT
RETLW 0
ENDIF 红 {MOD}的最后几句是什么意思?为什么要右移一次呢?是不是表示余数不够商,请高手指点,谢谢
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>