在百度文库下了一个(51汇编实用子程序库)发现完全看不懂,粘贴出来大家看看:
;N 字节无符号数乘法程序 ([R0]*[R1])=([R0])
;入口: R0,R1,M,N
;占用资源: ACC,B,R2,R5,R6,R7,NCNT
;堆栈需求: 2 字节
;出口: R0
NMULMN : MOV A,M
ADD A,R0
MOV R5,A
XCH A,R1
XCH A,R5
ADD A,N
XCH A,R0
MOV R6,A
MOV B,M
MOV NCNT,B NMLMN1 : DEC R0
DEC R1
CLR A
XCH A,@R1
MOV @R0,A
DJNZ NCNT,NMLMN1 MOV NCNT,B
NMLMN2 : CLR A
XCH A,@R0
MOV R2,A
MOV A,R6
MOV R0,A
MOV A,R5
MOV R1,A
MOV R7,N
CLR C NMLMN3 : MOV A,R2
MOV B,@R1
INC R1
MUL AB
ADDC A,@R0
MOV @R0,A
INC R0
MOV A,B
ADDC A,@R0
MOV @R0,A DJNZ R7,NMLMN3 INC R0
INC R6
DJNZ NCNT,NMLMN2 MOV A,R0
CLR C
SUBB A,M
SUBB A,N
MOV R0,A
RET
占用资源: ACC,B,R2,R5,R6,R7,NCNT;ncnt是神马?
;N 字节无符号除法程序(组合) ([R0]/[R1])=([R0])
;入口: R0,R1,M,N
;占用资源: ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN
;堆栈需求: 4 字节
;出口: R0
;NDIVMN : MOV A,M CLR C
SUBB A,N
MOV NCNT,A
ADD A,R0
MOV R4,A
XCH A,R0
MOV R3,A
MOV A,R1
MOV R5,A
MOV R2,#00H NDVMN1 : MOV R7,N
LCALL NSUBN MOV A,R5
MOV R1,A
JC NDVMN2
INC R2
SJMP NDVMN1 NDVMN2 : MOV R7,N
LCALL NADDN MOV A,NCNT
SWAP A
RR A
MOV NCNT,A NDVMN3 : MOV A,R3
MOV R0,A
MOV R7,M LCALL NRLCN MOV F0,C
MOV A,R4
MOV R0,A
MOV A,R5
MOV R1,A
MOV R7,N LCALL NSUBN
JB F0,NDVMN4
JC NDVMN5 NDVMN4 : MOV A,R3
MOV R0,A
INC @R0 SJMP NDVMN6
NDVMN5 : MOV A,R5
MOV R1,A
MOV R7,N LCALL NADDN
NDVMN6 : DJNZ NCNT,NDVMN3 MOV A,R4
MOV R1,A
MOV A,R2
MOV @R1,A
MOV A,R3
MOV R0,A
RET
占用资源: ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN;这些又是神马?
一周热门 更多>