/*----------------------------------------------------- 功能描述:通用多字节无符号数除法 -----------------------------------------------------*/ ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R4, #0H // 被除数赋值1000000 MOV R5, #0FH MOV R6, #42H MOV R7, #40H MOV R0, #0H // 除数赋值 MOV R1, #0H MOV R2, #0H MOV R3, #29H LCALL MULDIV // 调用除法程序 MOV R0, #0H // 除数赋值 MOV R1, #0H MOV R2, #0H MOV R3, #17H LCALL MULDIV SJMP $ /* 程序说明: 本程序中(R4R5R6R7——左边为高位)存放被除数, (R0R1R2R3——左边为高位)存放除数, (R3R4R5R6R7——左边为高位)存放结果。 当除数的长度为4字节时,(R3R4R5R6)是余数,(R7)是商; 当除数的长度为3字节时,(R3R4R5)是余数,(R6R7)是商; 当除数的长度为2字节时,(R3R4)是余数,(R5R6R7)是商; 当除数的长度为1字节时,(R3)是余数,(R4R5R6R7)是商; PS:程序并没有把余数和商放到特定的RAM 程序来源:“基于单片机汇编语言的通用多字节无符号数除法的改进” 严克剑,张淼,王丽琼 */ MULDIV: MOV B, #08H CJNE R0, #00H, DVDL MOV B, #10H CLR A XCH A, R3 ; R0R1R2R3存放除数 XCH A, R2 XCH A, R1 XCH A, R0 CJNE R0, #00H, DVDL CLR A XCH A, R2 XCH A, R1 XCH A, R0 MOV B, #18H CJNE R0, #00H, DVDL CLR A XCH A, R1 XCH A, R0 MOV B, #20H CJNE R0, #00H, DVDL SETB OV LJMP END_DIV DVDL: MOV DPL, #00H DVDL2: CLR C MOV A, R7 ; R4R5R6R7存放被除数 RLC A ; 结果存放在R3R4R5R6R7 MOV R7, A MOV A, R6 RLC A MOV R6, A XCH A, R5 RLC A XCH A, R5 XCH A, R4 RLC A XCH A, R4 XCH A, DPL RLC A XCH A, DPL JC DVDL1 DVDL4: SUBB A, R3 MOV A, R5 SUBB A, R2 MOV A, R4 SUBB A, R1 MOV A, DPL SUBB A, R0 JC DVDL3 DVDL1: CLR C MOV A, R6 SUBB A, R3 MOV R6, A MOV A, R5 SUBB A, R2 MOV R5, A MOV A, R4 SUBB A, R1 MOV R4, A MOV A, DPL SUBB A, R0 MOV DPL, A INC R7 ; 商的低位置1 DVDL3: DJNZ B, DVDL2 END_DIV: MOV R3, DPL RET END