Hallo,
Ich mache gerade (gezwungenermassen) meine ersten Schritte mit Assembler und stosse da schon auf die ersten Hindernisse:
Alles anzeigen
Wenn ich das ganze nun ausführe schaltet sich bei printf der gdb dazu (a = 2, b = 3, *r = 5). Ich verstehe allerdings nicht so recht wieso? Kann ich denn innerhalb einer Funktion etwas von der Aussenwelt kapput machen?
Btw: Zu rückgabewerten bin ich noch nicht gekommen, deshalb hab ich das mit einem Pointer gemacht.
Noch ein paar allgemeine Fragen zu Assembler in Xcode:
1. Kann ich das asm() statement irgendwie schön darstellen? Ich find's ja schon verwirrend genug, da muss nicht unbedingt auch noch alles auf einer Linie stehen.
2. Kann ich mir den Assembler-Code in Xcode schön darstellen lassen? Unter Build -> Show assembly code sieht meine Funktion irgendwie komisch aus:
Alles anzeigen
Könnte ein paar Tipps gebrauchen, Danke.
Ich mache gerade (gezwungenermassen) meine ersten Schritte mit Assembler und stosse da schon auf die ersten Hindernisse:
Quellcode
- #include <stdio.h>
- void sum(int, int, int *);
- int main (int argc, const char * argv[]) {
- int a, b, *r;
- a = 2; b = 3; *r = 0;
- sum(a, b, r);
- printf("%i", *r);
- return 0;
- }
- void sum(int a, int b, int *res)
- {
- asm("movl 8(%ebp), %eax; movl 12(%ebp), %ebx; movl 16(%ebp), %ecx; leal (%eax, %ebx), %edx; movl %edx, (%ecx);"); // *res = a + b
- }
Wenn ich das ganze nun ausführe schaltet sich bei printf der gdb dazu (a = 2, b = 3, *r = 5). Ich verstehe allerdings nicht so recht wieso? Kann ich denn innerhalb einer Funktion etwas von der Aussenwelt kapput machen?
Btw: Zu rückgabewerten bin ich noch nicht gekommen, deshalb hab ich das mit einem Pointer gemacht.
Noch ein paar allgemeine Fragen zu Assembler in Xcode:
1. Kann ich das asm() statement irgendwie schön darstellen? Ich find's ja schon verwirrend genug, da muss nicht unbedingt auch noch alles auf einer Linie stehen.
2. Kann ich mir den Assembler-Code in Xcode schön darstellen lassen? Unter Build -> Show assembly code sieht meine Funktion irgendwie komisch aus:
Quellcode
- _sum:
- .stabd 46,0,0
- .stabd 68,0,17
- nop
- nop
- nop
- nop
- nop
- nop
- pushl %ebp
- movl %esp, %ebp
- subl $8, %esp
- .stabd 68,0,18
- movl 8(%ebp), %eax; movl 12(%ebp), %ebx; movl 16(%ebp), %ecx; leal (%eax, %ebx), %edx; movl %edx, (%ecx);
- .stabd 68,0,19
- leave
- ret
- .stabs "sum:F(0,1)",36,0,17,_sum
- .stabs "a:p(0,2)",160,0,16,8
- .stabs "b:p(0,2)",160,0,16,12
- .stabs "res:p(0,7)",160,0,16,16
Könnte ein paar Tipps gebrauchen, Danke.
Gruss Dominik.
Ich weiss mittlerweile, das mein Programm abschmiert, wenn ich was in %ebx schreibe.