Ich habe ein paar einfach Funktionen die die Fakultät einer Zahl berechnen und wollte spaßeshalber mal es mit inline Assembler probieren. Ich bekomme aber immer komisch Fehler Meldungen. Daher hab ich mal was auskommentiert und schwupps geht es??? Kann mir jemand verraten was die "Magie" dahinter ist? MfG Im Anhang die der gesamte Quellcode, der gibt Compiler-Warnungen (gcc -std=gnu99). Der Ausschnitt der nicht geht:
1 | int fakultaet_pro(int a){ |
2 | int i; |
3 | asm( |
4 | "mov cx, %1\n\t" |
5 | "mov ax, 1\n\t" |
6 | "mov bx, 1\n\t" |
7 | "wh: mul bx\n\t" |
8 | "inc bx\n\t" |
9 | "loop wh\n\t" |
10 | "mov ah, 4Ch\n\t" |
11 | "int 21h\n\t" |
12 | "mov %0, ax"
|
13 | : "+r" (i) |
14 | : "g" (a)); |
15 | return i; |
16 | }
|
Und hier die Änderung, die das richtige Ergebnis ausspuckt:
1 | int fakultaet_pro(int a){ |
2 | int i; |
3 | asm( |
4 | "nop"
|
5 | /*"mov cx, %1\n\t"
|
6 | "mov ax, 1\n\t"
|
7 | "mov bx, 1\n\t"
|
8 | "wh: mul bx\n\t"
|
9 | "inc bx\n\t"
|
10 | "loop wh\n\t"
|
11 | "mov ah, 4Ch\n\t"
|
12 | "int 21h\n\t"
|
13 | "mov %0, ax"*/
|
14 | : "+r" (i) |
15 | : "g" (a)); |
16 | return i; |
17 | }
|