我无法搞清楚如何找到的有一个甚至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,这肯定是不正确的。
我无法搞清楚如何找到的有一个甚至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,这肯定是不正确的。
麻烦很可能与EDX
做虽然你可能没有意识到它。 :)
在x86指令集的DIV
的大小由操作数决定的,如你所愿。但是,通过指定DWORD PTR
的32位分频,处理器将自动尝试分割,如下所示:EDX:EAX/DWORD [saTwo]
。 EAX
代表股息中最不重要的部分。如果EDX碰巧有一个相对较大的值,那么得到的商可能为零,其余的坐标为EDX
。
您将要清除EDX
,然后再执行您DIV
谢谢你解决它我明白我的错误! – Teragon
不要DIV。改用右移。
如果数字是无符号,进位标志包含溢出,所以使用RCR。 否则SAR。如果速度有问题,请检查清除进位标志和RCR的组合。
尽管在我们打开您的问题后我们可以看到它:请在标签中指定您正在讨论的是哪种汇编程序。我敢打赌,有一个x86标签可用,并添加这一个肯定会使ARM的家伙高兴;-) – Marged