我想解决如何在程序集中计算模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