• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Assembler 8086 - Początki

Object Storage Arubacloud
0 głosów
2,940 wizyt
pytanie zadane 1 kwietnia 2016 w Assembler przez Dominik Lange Obywatel (1,700 p.)
Cześć!
Na uczelni polecili mi i moim kolegom nauczyć się na zajęcia laboratoryjne assemblera dla procesorów intela 8086, działamy w dosboxie, korzystamy z tasma i tlinka do kompilowania i linkowania programów i tak sobie dłubię w tym kilka godzin, korzystając z różnorakich źródeł, nawet udało mi się napisać hello world, no ale... Nie jestem pewien, czy wszystko dobrze rozumiem. Wrzucam kod z komentarzem do każdej linijki http://wklej.se/eaa0 . Bardzo możliwe, że jest tu napisane sporo kompletnych głupot, ale gdyby było dobrze, to bym tego nie wrzucał :p Jeśli ktoś zna się na tym nieco lepiej niż ja, będę wdzięczny za pomoc w wyjaśnieniu, jak to wszystko działa.

4 odpowiedzi

+1 głos
odpowiedź 1 kwietnia 2016 przez mbabane Szeryf (79,280 p.)

jedynie co moge podpowiedziec (sugerujac sie Twoim komentarzem) to int 21h jest to wywolanie procedury obslugi przerwania systemowego systemu MS-DOS. Jednak wczesniej trzeba przygotować odpowiednie rejestry aby wykonać konkretne zadanie, w Twoim przypadku wyswietlenie stringa i zakonoczenie programu, czesto jest to rejestr ax (ten rejestr sklada sie jakby z dwoch mniejszych rejestrow: ah (aHigh bardziej znaczaca/gorna czesc rejestru czyli po Polsku bity od polowy rejestru ax do konca) i al (aLow mniej znaczaca/dolna czesc rejestru po Polsku bity od 0 do polowy ax 
-> http://studianet.pl/kursy/proki/procesor/rejestry.htm - pierwszy rysunek)), plus jakies dodatkowe to juz zalezy od konkretnej funkcji, np. w przypadku wyswietlenia stringa trzeba uzupelnic rejestr dx. 

 

+1 głos
odpowiedź 2 kwietnia 2016 przez Porcupine Nałogowiec (31,560 p.)

To co teraz napiszę może nie być do końca poprawne, bo sam się uczę asma, więc w miarę możliwości proszę o skorygowanie:

Ogólnie rzecz biorąc to mamy coś takiego jak przerwania. Jak komputer sobie działa i coś tam wykonuje to tak jakby w tle jest cały czas przygotowany na przyjęcie i jakiegoś przerwania. Wywołać takie przerwanie może na przykład naciśnięcie jakiegoś klawisza na klawiaturze przez samego użytkownika. W assemblerze jak piszesz to przerwanie wywoływane jest przez instrukcje int. Np. właśnie int 21h. Wtedy uruchamia się program do obsługi przerwań, który ma za zadanie zrobić trzy rzeczy: zapamiętać co było wykonywane do tej pory, obsłużyć wywołane przerwanie i wrócić do wykonywania tego co robił. Z kolei to co znajduje się w rejestrze AH określa dokładnie co przerwanie powinno zrobić, bo samo int 21h ma całą listę różnych rzeczy, które może obsłużyć: http://skowi_magik.republika.pl/dos.htm 

+1 głos
odpowiedź 2 kwietnia 2016 przez jpacanowski VIP (101,940 p.)
edycja 3 czerwca 2016 przez jpacanowski

mov     ax, 4C00h ; kończy program, nie mam pojęcia dlaczego 
int             21h; podobnie jak wyżej

4Ch - zakończenie programu
00h - zwracany kod błędu (0 - bez błędu)

mov ax, 4C00h
int 21h

Wywołuje funkcję przerwania 21 (systemu DOS) o numerze 4Ch. Odpowiada ona za zakończenie działania programu i oddanie sterowania do systemu.

Polecam też:
https://pl.wikibooks.org/wiki/Asembler_x86

http://www.skowi_magik.republika.pl/

+1 głos
odpowiedź 2 kwietnia 2016 przez Blacha Mądrala (5,960 p.)
Jeśli chodzi o Assemblera to bym polecił stronkę http://bogdro.ciki.me/ ale niestety ostatnimi czasy nie działa a ja posiadam zarchiwizowane materiały jedynie pod Linuxa. Mogę jeszcze zaproponować https://pl.wikibooks.org/wiki/Asembler_x86 z którego często korzystam przy zabawie w asm.

Co do kodu, "int 21h" jest to przerwanie DOSowe, powoduje że procesor zaczyna wykonywać w tym momencie "program" systemowy. Tak w skrócie, do rejestrów wstawiasz odpowiednie wartości np. do rejestru dx wstawiasz offset "napisu" czyli wskaźnik na pierwszy bajt twojej zmiennej czyli na "H". Do rejestru ah wstawiasz 09h ( h oznacza że jest to liczba szesnastkowa) co przy przerwaniu informuje jaki typ operacji żądasz, w tym przypadku wypisania łańcucha znaków. Następnie masz "int 21h", w tym momencie procesor zaczyna wykonywać kod systemowy. Mniej więcej wygląda to tak że jakiś kod porównuje to co jest w ah, jako że jest tam wartość 09h to przeskakuje do części kodu odpowiadającej za wypisywanie liter, tam program zaczyna operować na rejestrze dx, sczytuje kolejne bajty aż napotyka '$' co oznacza że to koniec tekstu i następuje powrót do twojego programu. Analogicznie jest z zakończeniem programu, również umieszczasz w rejestrze ax wartość i wykonujemy przerwanie. Podana wartość dla systemu oznacza że program ma się zakończyć (system zwalnia pamięci, usuwa proces itp.)

A teraz dlaczego ax i ah wpływa zdawało by się tak samo na przerwanie? Masz to tutaj: https://pl.wikibooks.org/wiki/Asembler_x86/Architektura#Rejestry_og.C3.B3lnego_przeznaczenia

 

Podeślę jeszcze zarchiwizowane materiały ze strony bogdro.ciki.me dla Linuxa: https://www.zeta-uploader.com/1328114545 może się przyda.
komentarz 2 kwietnia 2016 przez jpacanowski VIP (101,940 p.)

Jeśli chodzi o Assemblera to bym polecił stronkę http://bogdro.ciki.me/ ale niestety ostatnimi czasy nie działa

Wielka strata dla polskiego internetu... Powiedziałbym, że najlepszy tutorial o ASM. 

komentarz 2 kwietnia 2016 przez Blacha Mądrala (5,960 p.)

Zrobiłem paczkę z materiałem pod Linuxa i DOSa. http://speedy.sh/pTFee/bogdro.zip Hasło:

archives

Oby szybko okazała się zbędna.

komentarz 3 czerwca 2016 przez jpacanowski VIP (101,940 p.)
Już strona działa :)
komentarz 3 czerwca 2016 przez Blacha Mądrala (5,960 p.)
Również zauważyłem że strona znów dycha.

Podobne pytania

0 głosów
0 odpowiedzi 2,660 wizyt
0 głosów
0 odpowiedzi 293 wizyt
pytanie zadane 21 września 2017 w Assembler przez Karina Klaś Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 289 wizyt
pytanie zadane 23 sierpnia 2021 w Sprzęt komputerowy przez Witut Początkujący (310 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...