Guest User

Untitled

a guest
Feb 1st, 2017
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. ; hello.asm nasz pierwszy program w assemblerze :D
  2. ; znak ; znaczy początek komentarza
  3.  
  4.  
  5. SECTION .data ; Sekcja danych
  6. msg: db "Michchal bialek",10,"nie ma jajek",10 ; zdefiniowaliśmy właśnie kilka bajtów (db znaczy define byte)
  7. len: equ $-msg ; equ $-msg jest ciekawie $ to licznik lokacji i patrzy jak daleko W CZASIE assemblacji dotarliśmy
  8. ; equ wpisuję tą wartość na sztywno w to miejce gdzie leży więc
  9. ; każde wystąpienie napisu len w kodzie w czasie assemblacji zostanie zastąpione na policzoną wartosć
  10.  
  11. SECTION .text ; sekcja kodu i to w niej będziemy klepać kod
  12. 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
  13. main: ; POCZĄTEK KODU WYKONA SIĘ WSZYSTKO ZA NIM
  14. ; konwencja wywoałań funkcji systemowych w linuxie jest taka że w odpowienie rejestry wkłada się odpowiednie dane
  15. ; aby wykonać zapisać na ekran należy
  16. mov edx,len ; w ostatnim argumencie podajemy jak długi ma być to string
  17. mov ecx,msg ; w przedostatnim (2) podajemy adres tego stringa
  18. mov ebx,1 ; argument pierwszy to informacja dla funkcji write gdzie ma pisać 1-> na standardowe wyjście (ekran)
  19. mov eax,4 ; funkcja write ma numer 4 więc podajemy go do znowu odpowiedniego rejestru
  20. 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.
  21. ; do tego miejsca napisaliśmy write(1,msg,len);
  22. ; z dokładnie tą samą logiką powstanie return 0;
  23. mov ebx,0 ; kod wyjścia, można niby dowolny, ale jak jest OK zwraca się 0
  24. mov eax,1 ; exit czyli polecenie zwalniające program ma kod 1
  25. int 0x80 ; wołamy krenel i myk program jest usuwany z pamięci
  26.  
  27. ; na koniec o rozkazach z tego pliku
  28. ; 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ć.
  29. ; proponuje pobawić się z tym a jak działa MOV będzie osobno
  30. ; int to udawanie przerwania o odpowienich parametrach
Add Comment
Please, Sign In to add comment