📄 b4sqr.asm
字号:
;********************MBSQR********************
;本程序实现四字节二进制数开平方。
;入口参数:四字节的原数据N的地址在SADR中,6字节的缓冲区地址在SADRH中。
;出口参数:结果在SOUH:SOU中。
;占用资源:W,STATUS,023H,024H,025H,026H,028H,029H,02AH,02BH
;说明: 1.加载本文件的同时也加载了另外1个文件"SUDIV.ASM"
; 故用户在使用这个子程序时可直接调用,不必重新加载.
; 2.结果小于或等于真实值.
SADR EQU 020H
SADRH EQU 021H
DADR EQU 022H
CNT EQU 023H
SOU EQU 024H
SOUH EQU 025H
RLT EQU 026H
RLTH EQU 027H
TEMP1 EQU 028H
TEMP2 EQU 029H
TEMP3 EQU 02AH
TEMP4 EQU 02BH
MBSQR
MOVLW 3
ADDWF SADR,W
MOVWF FSR
MOVF INDF,F
BTFSS STATUS,Z
GOTO NZEROX
DECF FSR,F
MOVF INDF,F
BTFSS STATUS,Z
GOTO NZEROX1
DECF FSR,F
MOVF FSR,F
BTFSS STATUS,Z
GOTO NZEROX2
DECF FSR,F
MOVF INDF,W
MOVWF SOU
CALL SBSQR
RETLW 0
NZEROX2 MOVF INDF,W
MOVWF SOUH
DECF FSR,F
MOVF INDF,W
MOVWF SOU
CALL DBSQR
RETLW 0
NZEROX1 MOVLW 0FFH
MOVWF SOU
CLRF SOUH
INCF FSR,F
GOTO NEXTX1
NZEROX MOVLW 0FFH
MOVWF SOU
MOVWF SOUH
NEXTX1 CLRF RLT
CLRF RLTH
MOVF INDF,W
MOVWF TEMP4
DECF FSR,F
MOVF INDF,W
MOVWF TEMP3
DECF FSR,F
MOVF INDF,W
MOVWF TEMP2
DECF FSR,F
MOVF INDF,W
MOVWF TEMP1 ;保护N
INCF SADRH,F
INCF SADRH,F ;缓冲区
LOOPX CLRF RLT
CLRF RLTH
DECF SADRH,W ;LOOPX未登记
MOVWF FSR
MOVF SOUH,W
MOVWF INDF
DECF FSR,F
MOVF SOU,W
MOVWF INDF ;保存加数
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
MOVWF INDF
INCF FSR,F
MOVF TEMP2,W
MOVWF INDF
INCF FSR,F
MOVF TEMP3,W
MOVWF INDF
INCF FSR,F
MOVF TEMP1,W
MOVWF INDF ;恢复N
MOVLW SOU
MOVWF DADR ;除数
MOVLW 4
CALL MUDIV
MOVF SADR,W
MOVWF FSR
MOVF INDF,W
MOVWF SOU
INCF FSR,F
MOVF INDF,W
MOVWF SOUH
MOVLW 2
SUBWF SADRH,W
MOVWF FSR
MOVF INDF,W
ADDWF SOU,F
INCF FSR,F
BTFSC STATUS,C
INCF INDF,F
MOVF INDF,W
ADDWF SOUH,F ;相加
BCF STATUS,C
RRF SOUH,F
RRF SOU,F ;除以2
DECF SADRH,W
MOVWF FSR
MOVF SOUH,W
SUBWF INDF,W
BTFSC STATUS,Z
GOTO NEXTX
BTFSC STATUS,C
RETLW 0
GOTO LOOPX
NEXTX DECF FSR,F
MOVF SOU,W
SUBWF INDF,W
BTFSC STATUS,Z
RETLW 0
BTFSC STATUS,C
RETLW 0
GOTO LOOPX
INCLUDE "MUDIV.ASM"
INCLUDE "SBSQR.ASM"
INCLUDE "DBSQR.ASM"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -