;原码有符号四节加法程序(R0R1R2R3+R4R5R6R7)=(R0R1R2R3)
;占用资源:ACC,SR0,NADDN,NSUBN,NCMPT
;堆栈需求:4字节
;入口 :R0,R1,R2,R3,R4,R5,R6,R7
;出口 :R0,R1,R2,R3,CF
NDADD: MOV A,@R0
MOV C,ACC.7
MOV SR0,C
XRL A,R4
MOV C,ACC.7
MOV A,@R0
CLR ACC.7
MOV @R0,A
MOV A,R4
CLR ACC.7
MOV R4,A
JC DAB2
LCALL NADDN
MOV A,@R0
JB ACC.7,DABE
DAB1: MOV C,SR0
MOV ACC.7,C
MOV @R0,A
CLR OV
RET
DABE: SETB OV
RET
DAB2: LCALL NSUBN
MOV A,@R0
JNB ACC.7,DAB1
LCALL CMPT
CPL SR0
SJMP DAB1
;原码有符号四节减法程序(R0R1R2R3-R4R5R6R7)=(R0R1R2R3)
;占用资源:ACC,SR0,NADDN,NSUBN,NCMPT
;堆栈需求:4字节
;入口 :R0,R1,R2,R3,R4,R5,R6,R7
;出口 :R0,R1,R2,R3,CF
NDSUB: MOV A,@R4
CPL ACC.7
MOV R4,A
LCALL NDADD
RET
;双字节无符号数加法程序 (R0R1R2R3+R4R5R6R7)=(R0R1R2R3)
;入口 :R0,R1,R2,R3,R4,R5,R6,R7
;占用资源:ACC
;堆栈需求:2字节
;出口 :R0,R1,R2,R3,CF
NADDN: MOV A,R3
ADD A,R7
MOV R3,A
MOV A,R2
ADDC A,R6
MOV R2,A
MOV A,@R1
ADDC A,R5
MOV @R1,A
MOV A,@R0
ADDC A,R4
MOV @R0,A
RET
;4字节无符号数减法程序 (R0R1R2R3-R4R5R6R7)=(R0R1R2R3)
;入口 :R0,R1,R2,R3,R4,R5,R6,R7
;占用资源:ACC
;堆栈需求:2字节
;出口 :R0,R1,R2,R3,CF
NSUBN: CLR C
MOV A,R3
SUBB A,R7
MOV R3,A
MOV A,R2
SUBB A,R6
MOV R2,A
MOV A,@R1
SUBB A,R5
MOV @R1,A
MOV A,@R0
SUBB A,R4
MOV @R0,A
RET
;双字节取补程序 /(R0R1R2R3)=(R0R1R2R3)
;入口 :R0,R1,R2,R3
;占用资源:ACC
;堆栈需求:2字节
;出口 :R0,R1,R2,R3
NCMPT: MOV A,R3
CPL A
ADD A,#01H
MOV R3,A
MOV A,R2
CPL A
ADDC A,#00H
MOV R2,A
MOV A,@R1
CPL A
ADDC A,#00H
MOV @R1,A
MOV A,@R0
CPL A
ADDC A,#00H
MOV @R0,A
RET