多字節(jié)無符號二進制數(shù)除法單片機匯編程序舉例
例、 將(R2R3R4R5)除于(R6R7),商送(R4R5),余數(shù)送(R2R3)。模擬手算方法:
1)從被除數(shù)高位開始對齊除數(shù),比較。
2)若前者大于或等于后者,商位為1,并把被除數(shù)減除數(shù),形成部分余數(shù)。若前者小于后者,商位為0。
3)部分余數(shù)左移一位,商也左移一位。
4)整個余數(shù)若小于除數(shù),則退出。
5)部分余數(shù)從高位開始與除數(shù)比較
6)到第2)步。
若被除數(shù)高16位大于或等于除數(shù),則溢出。
NDIV:MOV A,R3
CLR C
SUBB A,R7 ;先比較是否發(fā)生溢出
MOV A,R2
SUBB A,R6
JNC NDVE1 ;溢出
MOV B,#16 ;無溢出,16位
NDVL1:CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A ;被除數(shù)左移一位,同時也是商位左移一位
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C ;保存移出的最高位
CLR C
MOV A,R3
SUBB A,R7 ;比較部分余數(shù)與除數(shù)
MOV R1,A
MOV A,R2
SUBB A,R6
JB F0,NDVM1 ;上次最高位=1,則商位=1
JC NDVD1 ;部分余數(shù)小于除數(shù),則商位=0
NDVM1:MOV R2,A
MOV A,R1
MOV R3,A ;回送減法結(jié)果
INC R5 ;商位=1
NDVD1:DJNZ B,NDVL1 ;循環(huán)16次
CLR F0
RET
NDVE1:SETB F0 ;溢出標(biāo)志
RET