Kurs programowania w C cz. 158

Nasza ocena:

5
Wyświetleń: 476
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 158 - strona 1

Fragment notatki:

178 ROZDZIAŁ 25. ŁĄCZENIE Z INNYMI JĘZYKAMI _f1: pushl %ebp movl %esp, %ebp movl $4, %eax /* 4 to funkcja systemowa "write" */ movl $1, %ebx /* 1 to stdout */ movl $tekst, %ecx /* adres naszego napisu */ movl $len, %edx /* długość napisu w bajtach */ int $0x80 /* wywołanie przerwania systemowego */ popl %ebp ret .data tekst: .string "Hello world\n" len = . - tekst W systemach z rodziny UNIX należy pominąć znak ” ” przed nazwą funkcji f1 Teraz kolej na f2.c: extern void f1 (void); /* musimy użyć słowa extern */ int main () { f1(); return 0; } Teraz możemy skompilować oba programy: as f1.S -o f1.o gcc f2.c -c -o f2.o gcc f2.o f1.o -o program W ten sposób uzyskujemy plik wykonywalny o nazwie “program”. Efekt działania programu powinien być następujący: Hello world Na razie utworzyliśmy bardzo prostą funkcję, która w zasadzie nie komunikuje się z ję- zykiem C, czyli nie zwraca żadnej wartości ani nie pobiera argumentów. Jednak, aby zacząć pisać obsługę funkcji, która będzie pobierała argumenty i zwracała wyniki musimy poznać działanie języka C od trochę niższego poziomu. Argumenty Do komunikacji z funkcją język C korzysta ze stosu. Argumenty odkładane są w kolejności od ostatniego do pierwszego. Ponadto na końcu odkładany jest tzw.  adres powrotu , dzięki czemu po wykonaniu funkcji program “wie”, w którym miejscu ma kontynuować działanie. Ponadto, początek funkcji w asemblerze wygląda tak: pushl %ebp movl %esp, %ebp Zatem na stosie znajdują się kolejno: zawartość rejestru EBP, adres powrotu a następnie argumenty od pierwszego do n-tego. ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz