;(四字節(jié)除四字節(jié),被除數(shù)或者除數(shù)小于四字節(jié),則前面填0即可) ; 后面還有一個雙字節(jié)除雙字節(jié)的程序,如果除數(shù)是單字節(jié),則字高位填為00即可) ;51單片機多字節(jié)的除法 ;R4R5R6R7放被除數(shù) R0R1R2R3放除數(shù) ;當(dāng)除數(shù)的長度為4字節(jié)時 R3R4R5R6是余數(shù) R7是商 ;當(dāng)除數(shù)的長度為3字節(jié)時 R3R4R5是余數(shù) R6R7是商 ;當(dāng)除數(shù)的長度為2字節(jié)時 R3R4是余數(shù) R5R6R7是商 ;當(dāng)除數(shù)的長度為1字節(jié)時 R3是余數(shù) R4R5R6R7是商 ;被除數(shù)是雙字時,將R4R5置為0即可,這個程序包打天下 ;用一個單元來放中間值 單元名為danyuan danyuan equ 3BH MOV R7,#0ffh MOV R6,#0ffh MOV R5,#0ffh MOV R4,#0ffh MOV R3,#100 MOV R2,#0H MOV R1,#0H MOV R0,#0H MOV B,#08H CJNE R0,#00H,DVDL MOV B,#10H CLR A XCH A,R3 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 JMP END_DIV DVDL: MOV danyuan,#00H DVDL2: CLR C MOV A,R7 RLC A 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,danyuan RLC A XCH A,danyuan JC DVDL1 DVDL4: SUBB A,R3 MOV A,R5 SUBB A,R2 MOV A,R4 SUBB A,R1 MOV A,danyuan 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,danyuan SUBB A,R0 MOV danyuan,A INC R7 DVDL3: DJNZ B,DVDL2 END_DIV: MOV R3,danyuan NOP ;停在這里看結(jié)果 END ;雙字節(jié)除雙字節(jié)的程序如下: ;51單片機雙字節(jié)的除法 ;51單片機只是8位的,但有時候需要實現(xiàn)雙字節(jié)除法,里面的指令只支持8位。 ;想來想去,只好用減法來實現(xiàn)了。下面這個子程序是雙字節(jié)除以雙字節(jié),商、余數(shù)結(jié)果都是雙字節(jié)保存,可能有點消耗資源,但這樣可以整合在一塊。 ;**************************************** ;函數(shù)名稱:Div2Byte ;功能描述:無符號數(shù)雙字節(jié)除法 ;傳入?yún)?shù):R0R1被除數(shù) R2R3除數(shù) ;返回數(shù)據(jù):R4R5商 R6R7余數(shù) ;其他說明:比如雙字節(jié)數(shù)R0R1,R0高字節(jié) R1低字節(jié) ;**************************************** Div2Byte: mov r0,#0ffh mov r1,#0ffh mov r2,#0 mov r3,#254 mov R4,#0 mov R5,#0 ;商賦初值零 mov A,R0 mov R6,A mov A,R1 mov R7,A ;余數(shù)賦初值,保證商為零時余數(shù)正常 Div2Byte_1: mov A,R1 clr c subb A,R3 ;低字節(jié)相減 mov R1,A mov A,R0 subb A,R2 ;高位相減 mov R0,A jc Div2Byte_3 ;如果高字節(jié)都需要借位則退出循環(huán) clr c mov A,R5 add A,#1 ;之后JNC判斷,故不用INC mov R5,A jnc Div2Byte_2 inc R4 ;商加1 Div2Byte_2: mov A,R1 mov R7,A mov A,R0 mov R6,A ;更新余數(shù) LJMP Div2Byte_1 Div2Byte_3: nop END ;兩個程序均驗證無誤!我也是在網(wǎng)上抄來,然后調(diào)試的。在這里特別感謝提供這個程序并發(fā)到網(wǎng)上的同行們! ;我覺得我們搞單片機這一塊的人都非常非常的友好,不象有的行當(dāng),學(xué)會了一點點就開始保密保守,那樣事 ;業(yè)怎么可能發(fā)展?我的口號是: 不保密,不保守,共同提高。要想比別人更強更高,那就付出更多吧!