MCS51算术运算程序
双字节取补程序 /(R3R4)=(R3R4)
;入口 :R3,R4
;占用资源:ACC
;堆栈需求:2字节
;出口 :R3,R4
CMPT :MOV A,R4
CPL A
ADD A,#01H
MOV R4,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
RET
;N节取补程序 /([R0])=([R0])
;入口 :R0,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0
NCMPTN :MOV B,R0
SETB C
NCPT1 :MOV A,@R0
CPL A
ADDC A,#00H
MOV @R0,A
INC R0
DJNZ R7,NCPT1
MOV R0,B
RET
;双字节无符号数加法程序 (R3R4+R6R7)=(R3R4)
;入口 :R3,R4,R6,R7
;占用资源:ACC
;堆栈需求:2字节
;出口 :R3,R4,CF
NADD :MOV A,R4
ADD A,R7
MOV R4,A
MOV A,R3
ADDC A,R6
MOV R3,A
RET
;N字节无符号数加法程序 ([R0]+[R1])=([R0])
;入口 :R0,R1,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,CF
NADDN :MOV B,R0
CLR C
NADN1 :MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,NADN1
MOV R0,B
RET
;双字节无符号数减法程序 (R3R4-R6R7)=(R3R4)
;入口 :R3,R4,R6,R7
;占用资源:ACC
;堆栈需求:2字节
;出口 :R3,R4
NSUB :MOV A,R4
CLR C
SUBB A,R7
MOV R4,A
MOV A,R3
SUBB A,R6
MOV R3,A
RET
;N字节无符号数减法程序 ([R0]-[R1])=([R0])
;入口 :R0,R1,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,CF
NSUBN :MOV B,R0
MOV R7,N
CLR C
NSUBN1 :MOV A,@R0
SUBB A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,NSUBN1
MOV R0,B
RET
;单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4)
;入口 :R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R2,R3,R4
NMUL21 :MOV A,R4
MOV B,R7
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
CLR OV
RET
;单字节无符号数乘法程序 (R2R3R4*R7)=(R5R2R3R4)
;入口 :R2,R3,R4,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R5,R2,R3,R4
NMUL31 :MOV A,R4
MOV B,R7
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
XCH A,R2
MOV B,R7
MUL AB
ADD A,R2
MOV R2,A
CLR A
ADDC A,B
MOV R5,A
CLR OV
RET
;单字节无符号数乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4)
;入口 :R5,R2,R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R7,R5,R2,R3,R4
NMUL41 :MOV A,R4
MOV B,R7
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
XCH A,R2
MOV B,R7
MUL AB
ADD A,R2
MOV R2,A
CLR A
ADDC A,B
XCH A,R5
MOV B,R7
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R7,A
CLR OV
RET