📄 msadd.asm
字号:
;********************MSADD********************
;本程序实现多字节有符号数加法。
;入口参数:被加数首地址在SADR中,加数首地址在DADR中,字节数在CNT中。
;出口参数:结果首地址在SADR中,字节数在CNT中,若溢出则STATUS:C置1。
;占用资源:W,FSR,020H,021H,022H,023H,028H,029H,02AH,一重堆栈。
;说明: 程序执行后,被加数被冲掉。
IFNDEF MSADD1
#DEFINE MSADD1
MSADD MOVF CNT,W
ADDWF SADR,W
MOVWF FSR
DECF FSR,F
MOVF INDF,W
MOVWF TEMP3
MOVF CNT,W
ADDWF DADR,W
MOVWF FSR
DECF FSR,F
MOVF INDF,W
XORWF TEMP3,F ;取得两加数最高位的异或
MOVF SADR,W
MOVWF SADRH ;保护结果首地址
CLRF TEMP2 ;进位清零
NEXT5 MOVF DADR,W
MOVWF FSR
MOVF INDF,W ;取出加数
MOVWF TEMP1 ;暂存
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
ADDWF INDF,F
RLF TEMP2,F ;暂存当前进位,并使上一次进位前移
BCF STATUS,C ;清除进位
MOVLW 1
BTFSC TEMP2,1
ADDWF INDF,F
BTFSC STATUS,C ;加进位位的过程中是否产生了进位
BSF TEMP2,0
INCF DADR,F
INCF SADR,F
DECFSZ CNT,F
GOTO NEXT5
MOVF INDF,W
XORWF TEMP3,W
RRF TEMP2,F
RRF TEMP2,F ;将最高位的进位放到TEMP2.7
XORWF TEMP2,F
MOVF SADRH,W
MOVWF SADR ;结果首地址
DECF SADR,W
SUBWF FSR,W
MOVWF CNT ;恢复字节数
RLF TEMP2,W ;溢出标志位放到C中
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -