|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
divdw那个子程序,
div运算是否有争议?
把一个小于4.2949673的10的9次方的数x,
装入(ax+dx)/cx=x/cx=的结果置于两个16位寄存器存商余数没毛病
但小王八的视频代码处理有错误啊,
ax / cx + dx / cx
;注释个人标注不是原视频,代码是
divdw: ;无溢出除法子程序
push ax ;压栈保存ax被除数低位
mov ax,dx ;dx被除数高位推入ax被除数寄存器
mov dx,0 ;dx置零存商余数
div cx ;高位除以除数cx
mov bx,ax ;默认ax的商存入bx=int(h/n)取商,dx=rem(h/n)取余数,
pop ax ;调出低位被除数
div cx ;L/n
mov cx,dx ;余数存入cx
mov dx,bx ;商存入dx
ret
这样做的过程有错误,高位dx的值没错,ax的值也没错
但是除完cx人数,的商和余数处理有错误啊,
误差过大,导致商值偏离太多啊
先计算低位,会比先计算高位的误差要小
可结果还不是真实数,是不要加入一段代码,细节处理
比如and 和jcxz配合处理
第一次计算的余数与第二次被除数的关系啊
求前辈处理
还是我的知识太少哪里误区了能帮忙指出吗,谢谢大家
我是0蛋初学者,没任何计算机语言基础,书里后面的知识还没学,,,,卡这里过不去了,
是不是王爽老师故意把问题留下为以后学习铺垫呢
|
|