2016-11-27 25 views
1

有沒有一種方法可以在不使用匯編x86語言中的DIV或IDIV的情況下計算mod操作?裝配中的模運算的替代形式x86

例如,人們可以使用DIV來完成部門的其餘部分。但是,而不是使用DIV,還有其他選擇嗎?

+0

是的,但好視情況而定。這個問題有更多的背景嗎?還是更理論? – harold

+0

是的,用於@harold練習。 8位值除以8位值。 –

+0

我想知道爲什麼你沒有看到基本的數學天真低效的方式(你會提到它的問題,對嗎?):'while(divisor <= number)number - = divisor;'將'number'減少到'0' - 'divisor-1'範圍,這意味着它將是「餘數」(當然需要角落案例的初始值驗證)。在ASM中應該很容易編碼。 – Ped7g

回答

3
  • 你總是可以編寫自己的除法算法,完全地不使用DIVIDIV指令。

  • 有當然的模的的範圍內,你基本上只需要一個AND指令:

    and eax, 255 ;Gives modulo 256 
    and eax, 15  ;Gives modulo 16 
    
+0

謝謝。這正是我正在尋找的!也許,在性能方面,使用比特式AND更好。這樣對嗎? –

+0

在性能方面沒有太多可以擊敗單個'和'指令。 –

+1

@GiuseppeCanto:參見http://stackoverflow.com/questions/40354978/why-is-this-c-code-faster-than-my-hand-written-assembly-for-testing-the-collat​​/40355466#40355466以瞭解除數或模數是2的冪時DIV比SHR或AND慢多少。它至少快20到30倍。 –