汇编语言16位除法子程序,怎么读不懂啊。。。用一个数带进去算的也不对??求大神帮忙解答下,谢谢
DIV0:MOVDPTR,#0;除法子程序DIV1:CLRCMOVA,SUMLSUBBA,73HMOVB,AMOVA,SUMHSUBBA,72HJCDIV2INCDPTR...
DIV0:MOV DPTR,#0 ;除法子程序
DIV1:CLR C
MOV A,SUML
SUBB A,73H
MOV B,A
MOV A,SUMH
SUBB A,72H
JC DIV2
INC DPTR
MOV SUMH,A
MOV SUML,B
SJMP DIV1
DIV2:MOV A,DPL
RET
请问这个程序算16位数的除法有问题吗??
经过计算后商,余数的高地位分辨都存到哪里啊 展开
DIV1:CLR C
MOV A,SUML
SUBB A,73H
MOV B,A
MOV A,SUMH
SUBB A,72H
JC DIV2
INC DPTR
MOV SUMH,A
MOV SUML,B
SJMP DIV1
DIV2:MOV A,DPL
RET
请问这个程序算16位数的除法有问题吗??
经过计算后商,余数的高地位分辨都存到哪里啊 展开
1个回答
展开全部
DIV0:MOV DPTR,#0 ;除法子程序
DIV1:CLR C
MOV A,SUML ;被除数低位送A
SUBB A,73H ;减除数低位
MOV B,A ;余数送B
MOV A,SUMH ;被除数高位送A
SUBB A,72H ;减除数高位
JC DIV2 ;有借位则退出(已经运算完成)
INC DPTR ;DPTR加1
MOV SUMH,A ;被除数减完本次余数回送(高位)
MOV SUML,B ;被除数减完本次余数回送(低位)
SJMP DIV1 ;转移到DIV1继续
DIV2:MOV A,DPL ;结果送A
RET
;可以看出这是一个利用减法来计算除法的方法,被除数不断地减除数直到减到不能再减,没减一次,结果加1,这里结果先放到DPTR里面,最后送给A返回。所以,结果要小于256才可以得到正确结果。
DIV1:CLR C
MOV A,SUML ;被除数低位送A
SUBB A,73H ;减除数低位
MOV B,A ;余数送B
MOV A,SUMH ;被除数高位送A
SUBB A,72H ;减除数高位
JC DIV2 ;有借位则退出(已经运算完成)
INC DPTR ;DPTR加1
MOV SUMH,A ;被除数减完本次余数回送(高位)
MOV SUML,B ;被除数减完本次余数回送(低位)
SJMP DIV1 ;转移到DIV1继续
DIV2:MOV A,DPL ;结果送A
RET
;可以看出这是一个利用减法来计算除法的方法,被除数不断地减除数直到减到不能再减,没减一次,结果加1,这里结果先放到DPTR里面,最后送给A返回。所以,结果要小于256才可以得到正确结果。
追问
可是我用3000除1000,结果算到低位减法那里出了负数。。。还怎么算??
还有你说结果小于256的话才好用,那如果在DIV2后边再加一条MOV B,DPH的话是不是就是所有的16位数都能用了
追答
最好这样才能囊括所有可能情况。不过3000/1000结果为3,倒没有这种情况。
第一次,3000-1000=2000,C=0,DPTR+1
第二次,2000-1000=1000,C=0,DPTR+1
第三次,1000-1000=0,C=0,DPTR+1
第四次,0-1000=-1000,C=1,DPTR不变
所以结果为3
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询