2015-06-14 87 views
1

我无法搞清楚如何找到的有一个甚至50号的量双字列表中的中间值的中间值。当我尝试按如下方式实现我的代码时查找列表

mov eax, dword[volumes+100] 
add eax, dword[volumes+104] 
div dword[saTwo] 
mov dword[vMid], eax 

其中卷100和104是列表中的第25和第26个元素。然后我除以2并将中间值存储在vMid中。当我调试程序时,问题出现vMid是0,这肯定是不正确的。

+0

尽管在我们打开您的问题后我们可以看到它:请在标签中指定您正在讨论的是哪种汇编程序。我敢打赌,有一个x86标签可用,并添加这一个肯定会使ARM的家伙高兴;-) – Marged

回答

2

麻烦很可能与EDX做虽然你可能没有意识到它。 :)

在x86指令集的DIV的大小由操作数决定的,如你所愿。但是,通过指定DWORD PTR的32位分频,处理器将自动尝试分割,如下所示:EDX:EAX/DWORD [saTwo]EAX代表股息中最不重要的部分。如果EDX碰巧有一个相对较大的值,那么得到的商可能为零,其余的坐标为EDX

您将要清除EDX,然后再执行您DIV

+0

谢谢你解决它我明白我的错误! – Teragon

4

不要DIV。改用右移。

如果数字是无符号,进位标志包含溢出,所以使用RCR。 否则SAR。如果速度有问题,请检查清除进位标志和RCR的组合。