51单片机汇编语言做16位除法

2024-12-21 13:35:20
推荐回答(3个)
回答1:

;双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7
;入口: R5,R2,R3,R4,R6,R7
;占用资源: ACC,B,F0
;堆栈需求: 4字节
;出口: (R2),R3,R4,R6,R7,OV
NDIV42 : MOV A,R1
PUSH A
MOV B,#00H
NDV421 : MOV A,R2
CLR C
SUBB A,R7
MOV R1,A
MOV A,R5
SUBB A,R6
JC NDV422
MOV R5,A
MOV A,R1
MOV R2,A
INC B
SJMP NDV421
NDV422 : PUSH B
MOV B,#10H
NDV423 : CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
XCH A,R5
RLC A
XCH A,R5
MOV F0,C
CLR C
SUBB A,R7
MOV R1,A
MOV A,R5
SUBB A,R6
JB F0,NCV424
JC NDV425
NCV424 : MOV R5,A
MOV A,R1
MOV R2,A
INC R4
NDV425 : DJNZ B,NDV423
POP A
CLR OV
JNZ NDV426
SETB OV
NDV426 : XCH A,R2
MOV R7,A
MOV A,R5
MOV R6,A
POP A
MOV R1,A
RET

回答2:

可用16位数减法来实现的,思路:先判断被除数>=除数,16位被除数-16位除数
再判断被除数>=除数,16位被除数-16位除数,如此循环,直到被除数 <除数结束

回答3:

;R2R3/R6R7=R4R5 (CY=1: OVER)
DIVD: CLR C
MOV R4,#0
MOV R5,#0
DIVD0:
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DIVD2
INC R5
MOV A,R5
JNZ DIVD1
INC R4
DIVD1: SJMP DIVD
DIVD2:
RET