我想解決如何在程序集中計算模10,所以我在gcc中編譯了下面的c代碼,看看它出現了什麼。模(%)的GCC實現如何工作,爲什麼不使用div指令?
unsigned int i=999;
unsigned int j=i%10;
令我驚訝我
movl -4(%ebp), %ecx
movl $-858993459, %edx
movl %ecx, %eax
mull %edx
shrl $3, %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
addl %eax, %eax
movl %ecx, %edx
subl %eax, %edx
movl %edx, %eax
movl %eax, -12(%ebp)
凡-4(%EBP)或 「I」 是輸入和-12(%EBP)或 「J」 就是答案。我已經測試過這個功能,無論你編號爲-4(%ebp),它都能正常工作。
我的問題是這個代碼是如何工作的,它怎麼比使用div操作數更好。
您是否熟悉32位? – 2010-12-05 23:31:22