有沒有一種方法可以在不使用匯編x86語言中的DIV或IDIV的情況下計算mod操作?裝配中的模運算的替代形式x86
例如,人們可以使用DIV來完成部門的其餘部分。但是,而不是使用DIV,還有其他選擇嗎?
有沒有一種方法可以在不使用匯編x86語言中的DIV或IDIV的情況下計算mod操作?裝配中的模運算的替代形式x86
例如,人們可以使用DIV來完成部門的其餘部分。但是,而不是使用DIV,還有其他選擇嗎?
你總是可以編寫自己的除法算法,完全地不使用DIV
或IDIV
指令。
有當然的模的的範圍內,你基本上只需要一個AND
指令:
and eax, 255 ;Gives modulo 256
and eax, 15 ;Gives modulo 16
謝謝。這正是我正在尋找的!也許,在性能方面,使用比特式AND更好。這樣對嗎? –
在性能方面沒有太多可以擊敗單個'和'指令。 –
@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倍。 –
是的,但好視情況而定。這個問題有更多的背景嗎?還是更理論? – harold
是的,用於@harold練習。 8位值除以8位值。 –
我想知道爲什麼你沒有看到基本的數學天真低效的方式(你會提到它的問題,對嗎?):'while(divisor <= number)number - = divisor;'將'number'減少到'0' - 'divisor-1'範圍,這意味着它將是「餘數」(當然需要角落案例的初始值驗證)。在ASM中應該很容易編碼。 – Ped7g