Wie funktioniert die GCC-Implementierung der modulo ( % ) - Arbeit, und warum tut Sie es nicht verwenden die div-Anweisung?

War ich versucht, herauszufinden, wie die Berechnung mit modulo 10 mit Montage-so habe ich kompiliert den folgenden c-code in gcc zu sehen, was es kam mit.

unsigned int i=999;
unsigned int j=i%10;

Zu meiner überraschung bekam ich

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)

Wo -4(%ebp) oder "ich" ist der Eingang und -12(%ebp) oder "j" ist die Antwort. Ich habe diese getestet und es funktioniert, egal was Zahl, die Sie machen, -4(%ebp).

Meine Frage ist, wie dieser code funktioniert, und wie ist es besser als mit den div operand.

InformationsquelleAutor St0ner | 2010-12-05
Schreibe einen Kommentar