Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; hello.asm nasz pierwszy program w assemblerze :D
- ; znak ; znaczy początek komentarza
- SECTION .data ; Sekcja danych
- msg: db "Michchal bialek",10,"nie ma jajek",10 ; zdefiniowaliśmy właśnie kilka bajtów (db znaczy define byte)
- len: equ $-msg ; equ $-msg jest ciekawie $ to licznik lokacji i patrzy jak daleko W CZASIE assemblacji dotarliśmy
- ; equ wpisuję tą wartość na sztywno w to miejce gdzie leży więc
- ; każde wystąpienie napisu len w kodzie w czasie assemblacji zostanie zastąpione na policzoną wartosć
- SECTION .text ; sekcja kodu i to w niej będziemy klepać kod
- global main ; etykieta main staje się globalna, a że linker myśli że linkuje kod z C to zacznie wykonanie własnie od tej etykiety
- main: ; POCZĄTEK KODU WYKONA SIĘ WSZYSTKO ZA NIM
- ; konwencja wywoałań funkcji systemowych w linuxie jest taka że w odpowienie rejestry wkłada się odpowiednie dane
- ; aby wykonać zapisać na ekran należy
- mov edx,len ; w ostatnim argumencie podajemy jak długi ma być to string
- mov ecx,msg ; w przedostatnim (2) podajemy adres tego stringa
- mov ebx,1 ; argument pierwszy to informacja dla funkcji write gdzie ma pisać 1-> na standardowe wyjście (ekran)
- mov eax,4 ; funkcja write ma numer 4 więc podajemy go do znowu odpowiedniego rejestru
- int 0x80 ; przy pomocy przerwania 0x80 wołamy krenel by zrobił robotę. Nie ma praktycznie innej drogi do wykonania funkcji systemowej niż właśnie callgate.
- ; do tego miejsca napisaliśmy write(1,msg,len);
- ; z dokładnie tą samą logiką powstanie return 0;
- mov ebx,0 ; kod wyjścia, można niby dowolny, ale jak jest OK zwraca się 0
- mov eax,1 ; exit czyli polecenie zwalniające program ma kod 1
- int 0x80 ; wołamy krenel i myk program jest usuwany z pamięci
- ; na koniec o rozkazach z tego pliku
- ; mov <cel>, <źródło> ; przenosi ze źródła do celu to jest jasne, należy wiedzieć że nie zawsze rozmiary argumentów są dla niego jasne więc trzeba uprecyzawiać. Jedyne czego nie możesz zrobić to mov <adres_Pamięci>,<adres_pamięci> resztę można spokojnie zrobić.
- ; proponuje pobawić się z tym a jak działa MOV będzie osobno
- ; int to udawanie przerwania o odpowienich parametrach
Add Comment
Please, Sign In to add comment