2015-06-14 90 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的組合。