41 lines
904 B
C
41 lines
904 B
C
#include <stdio.h>
|
|
|
|
int main(){
|
|
int i = 2;
|
|
int result = 1;
|
|
int n = 12;
|
|
|
|
//int a; //für Zeitmessung einkommentieren
|
|
//int c = 100000000; //für Zeitmessung einkommentieren
|
|
//for (a = 1; a <= c; a++){ //für Zeitmessung einkommentieren
|
|
//result = 1; //für Zeitmessung einkommentieren
|
|
|
|
|
|
|
|
asm ( "subl %%ebx, %%ecx;" // %ecx = n - i
|
|
|
|
"inc %%ecx;" // Anzahl der Schleifendurchläufe + 1
|
|
|
|
|
|
".schleife: cmp $0, %%ecx \n\t" // %ecx = 0 ? -> jump .end
|
|
"je .end \n\t"
|
|
|
|
"mull %%ebx \n\t" // %eax = %eax * %ebx(result *= i)
|
|
"inc %%ebx \n\t" // %ebx++ (i++)
|
|
"dec %%ecx;" // %ecx-- (n - 1)
|
|
|
|
"jmp .schleife;" // jump .schleife
|
|
|
|
|
|
".end: "
|
|
|
|
: "=a" (result) // output operands result = %eax
|
|
: "a" (result), "b" (i), "c" (n) // input operands: %eax = result, %ebx = i, %ecx = n
|
|
|
|
|
|
);
|
|
//} //für Zeitmessung einkommentieren
|
|
|
|
printf("Fakultaet: %d\n", result);
|
|
}
|