用左移減法做單字節(jié)除法運算
;只能整數(shù)運算及非0運算
ORG0000H
JMPA1
ORG002BH
A1:MOVR0,#00001001B;被除數(shù)
MOVR1,#0;余數(shù)
MOVR2,#0;商
MOVR5,#00000011B;除數(shù)
MOV33H,#8;左移8次16位除法左移16次
A2:MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
JMPA1
ORG002BH
A1:MOVR0,#00001001B;被除數(shù)
MOVR1,#0;余數(shù)
MOVR2,#0;商
MOVR5,#00000011B;除數(shù)
MOV33H,#8;左移8次16位除法左移16次
A2:MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
CLRC;清C因為減法A=A-C-R5
SUBBA,R5;用移位后的數(shù)減去商
JCA3;比較大小
MOVR1,A;大的則把余數(shù)保存起來下次再減
A3:CPLC;商值處理
MOVA,R2;商值移位
RLCA
MOVR2,A
DJNZ33H,A2;是否完成
JMP$
;思路---只要R1-R5不小于0商就置1并將余數(shù)賦值給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,余數(shù)為00000001賦值給R1
;8、00000011-00000011等于0,商值為00000011,余數(shù)為00000000
;至此算法完成
;注:單字節(jié)是循環(huán)8次,如果是雙字節(jié)就要循環(huán)16次,依次類推
SUBBA,R5;用移位后的數(shù)減去商
JCA3;比較大小
MOVR1,A;大的則把余數(shù)保存起來下次再減
A3:CPLC;商值處理
MOVA,R2;商值移位
RLCA
MOVR2,A
DJNZ33H,A2;是否完成
JMP$
;思路---只要R1-R5不小于0商就置1并將余數(shù)賦值給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,余數(shù)為00000001賦值給R1
;8、00000011-00000011等于0,商值為00000011,余數(shù)為00000000
;至此算法完成
;注:單字節(jié)是循環(huán)8次,如果是雙字節(jié)就要循環(huán)16次,依次類推
end
評論