📄 fdsmi.asm
字号:
;********************FDSMI********************
;本程序实现在双字节数据块中查找有符号数极小值。
;入口参数:数据块首址在SADR中,数据个数在W中。
;出口参数:极小值在SOUH:SOU中,极小值地址在SADR中。
;占用资源:W,FSR,STATUS,020H,024H,025H,028H,029H,两重堆栈。
;说 明: 1.如果有两个或两个以上相等的极大值,则只能给出第一个极大值的地址.
; 2.加载本文件的同时也加载了另外一个文件"FDUMI.ASM",
; 故用户在使用这个子程序时可直接调用, 不必重新加载.
; 3.本程序的执行对原数据块并无影响.
IFNDEF FDSMI
#DEFINE FDSMI
FDSMI MOVWF TEMP1
MOVWF TEMP2
MOVF SADR,W
MOVWF FSR
INCF FSR,F
LOOP56 BTFSS INDF,7
GOTO NOMINUS1
MOVF INDF,W
MOVWF SOUH
DECF FSR,F
MOVF INDF,W
MOVWF SOU ;SOUH和SOU赋初值
MOVF FSR,W
MOVWF SADR
MOVLW .3
ADDWF FSR,F ;FSR指向下一个数的高位字节
LOOP55 BTFSS INDF,7
GOTO NEXT26
MOVF INDF,W
SUBWF SOUH,W
BTFSS STATUS,C
GOTO NEXT26
BTFSS STATUS,Z ;判断高位是否相等
GOTO BELOW1
DECF FSR,F
MOVF INDF,W
SUBWF SOU,W ;高位相等的情况下判断低位大小
BTFSS STATUS,Z ;如果低位也相等,则直接进入下一轮
BTFSS STATUS,C
GOTO NEXT25
GOTO RELOW3
BELOW1 MOVF INDF,W
MOVWF SOUH ;SOUH中总是存放最大值
DECF FSR,F ;FSR指向低位字节
RELOW3 MOVF INDF,W
MOVWF SOU ;最小值低位
MOVF FSR,W
MOVWF SADR ;最小值地址
NEXT25 INCF FSR,F
NEXT26 INCF FSR,F
INCF FSR,F
DECFSZ TEMP1,F
GOTO LOOP55
RETURN
NOMINUS1 INCF FSR,F
INCF FSR,F
DECFSZ TEMP1,F
GOTO LOOP56
MOVF TEMP2,W ;重新获得数据个数
CALL FDUMI ;全是正数,则按无符号数算法求其最小值
RETURN
INCLUDE "FDUMI.ASM"
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -