📄 ssdiv.asm
字号:
;********************SSDIV********************
;本程序实现单字节有符号数除法。
;入口参数:被除数在SOU中,除数在RLT中。
;出口参数:商在SOU中,余数在RLT中.
;占用资源:W,STATUS,023H,024H,026H,028H,029H,02AH,一重堆栈。
;说 明: 1.用户在调用该子程序之前必须确定除数不为零,否则得不到正确结果.
; 2.余数一定为正数.
; 3.被除数绝对值一定要大于除数的绝对值,否则将出错.
IFNDEF SSDIV1
#DEFINE SSDIV1
SSDIV MOVLW 8 ;循环8次
MOVWF CNT
MOVF RLT,W
XORWF SOU,W
MOVWF TEMP3 ;暂存相除后的符号位
BTFSS SOU,7
GOTO NEXT43
COMF SOU,F
INCF SOU,F ;负数取相反数
NEXT43 BTFSS RLT,7
GOTO NEXT44
COMF RLT,F
INCF RLT,F ;负数取相反数
NEXT44 MOVF SOU,w
MOVWF TEMP2 ;TEMP2暂存被除数
CLRF SOU
CLRF TEMP1
LOOP82 BCF STATUS,C
RLF TEMP2,F
RLF TEMP1,F
MOVF RLT,W
SUBWF TEMP1,W ;判断是否TEMP1>SOU
BTFSC STATUS,C
MOVWF TEMP1 ;TEMP1=TEMP1-SOU
RLF SOU,F
DECFSZ CNT,F
GOTO LOOP82
MOVF TEMP1,W
MOVWF RLT ;整理参数
BTFSS TEMP3,7
RETLW 0 ;结果是正数则返回
COMF SOU,F
INCF SOU,F
RETLW 0
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -