;只能整數運算及非0運算
ORG 0000H
JMP A1
ORG 002BH
A1: MOV R0,#00001001B;被除數
MOV R1,#0;余數
MOV R2,#0;商
MOV R5,#00000011B;除數
MOV 33H,#8;左移8次16位除法左移16次
A2: MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
JMP A1
ORG 002BH
A1: MOV R0,#00001001B;被除數
MOV R1,#0;余數
MOV R2,#0;商
MOV R5,#00000011B;除數
MOV 33H,#8;左移8次16位除法左移16次
A2: MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
CLR C;清C因為減法A=A-C-R5
SUBB A,R5;用移位后的數減去商
JC A3 ;比較大小
MOV R1,A;大的則把余數保存起來下次再減
A3: CPL C;商值處理
MOV A,R2;商值移位
RLC A
MOV R2,A
DJNZ 33H,A2;是否完成
JMP $
;思路---只要R1-R5不小于0商就置1并將余數賦值給R1
; R1 R5 R2
;1、00000000-00000011小于0,商值為00000000
;2、00000000-00000011小于0,商值為00000000
;3、00000000-00000011小于0,商值為00000000
;4、00000000-00000011小于0,商值為00000000
;5、00000001-00000011小于0,商值為00000000
;6、00000010-00000011小于0,商值為00000000
;7、00000100-00000011大于0,商值為00000001,余數為00000001賦值給R1
;8、00000011-00000011等于0,商值為00000011,余數為00000000
;至此算法完成
;注:單字節是循環8次,如果是雙字節就要循環16次,依次類推
SUBB A,R5;用移位后的數減去商
JC A3 ;比較大小
MOV R1,A;大的則把余數保存起來下次再減
A3: CPL C;商值處理
MOV A,R2;商值移位
RLC A
MOV R2,A
DJNZ 33H,A2;是否完成
JMP $
;思路---只要R1-R5不小于0商就置1并將余數賦值給R1
; R1 R5 R2
;1、00000000-00000011小于0,商值為00000000
;2、00000000-00000011小于0,商值為00000000
;3、00000000-00000011小于0,商值為00000000
;4、00000000-00000011小于0,商值為00000000
;5、00000001-00000011小于0,商值為00000000
;6、00000010-00000011小于0,商值為00000000
;7、00000100-00000011大于0,商值為00000001,余數為00000001賦值給R1
;8、00000011-00000011等于0,商值為00000011,余數為00000000
;至此算法完成
;注:單字節是循環8次,如果是雙字節就要循環16次,依次類推
end