315775569 发表于 2012-7-6 20:07:58

章节内容 call跟ret的搭配使用(调用子程序)


;说明:计算N的三次方
;参数(bx)=n
;结果 : (dx:ax) =N^3
cube:mov ax,bx
mul bx
mul bx
ret

这一段里面 在三次的时候 乘法是不是有问题呢?

在执行第一条 mul bx 的时候 ax,bx 都是16位的 做乘法后的值高位16位放在dx里 低16放ax里面

在第二次执行 mul bx 的时候 这里我理解是(ax)*(bx) 根本没有取到第二次的值啊   
那么他们得出的值又到哪里去了?

求大虾指教下,谢谢

水之境界 发表于 2012-7-8 08:49:02

根据8086cpu的mul乘法计算,这个算法计算N^3有问题,除非N^2小于16位上限,否则必出错。

沉默=金 发表于 2012-7-9 10:35:24

我感觉是:cpu将高位dx不参与计算,只保存结果。也就是说第二个mul bx也是直接用(ax)*(bx),而且很可能第二次计算mul bx的结果dx,将覆盖第一次mul bx 中的dx....

阔怀 发表于 2015-8-21 09:49:49

{:1_1:}
页: [1]
查看完整版本: 章节内容 call跟ret的搭配使用(调用子程序)