Przerwania i małe problemy teoretyczne

0

Cześć. Mam kilka pytań odnośnie Assemblera, którego nie jestem w stanie pojąć bez podstawowych pojęć więc:
Co to jest przerwanie? Szukałem na google, ale ich wyjaśnienie nie dawało m za wiele do myślenia.
I teraz mała rzecz której nie rozumiem w kodzie, opisze w komentarzach.

 
.model tiny ;mało zajmujący program
.code        ;pojęcia nie mam
  
start: ;etykieta
  mov ah,4ch ;przekładamy do rejestru ah(czyli ważniejszej połówki AX jeśli dobrze zakułem:P ) nazwę funkcji ms-dos, zakończenie programu
  int 21h ;przerwanie? ms-dos
  
  .stack 512 ;nie doszedłem do tego 

end start

Od razu mówię że kod skopiowany jest z kursu. No i teraz dlaczego najpierw się przekłada coś do rejestru AH, po czym stosuje się przerwanie( domyślam się że to będzie tak jakby zadeklarowanie że teraz będziemy używać funkcji z tego zakresu). Według mnie program nie powinien wiedzieć o co chodzi z "4ch" ponieważ przerwanie ms-dos jest dopiero w 2'giej linijce. Do tego po co wkładamy coś do rejestru AH jeśli tego nie używamy? No bo ja tu jakoś nie widzę niczego więcej. Czyli tak program sie uruchamia, załóżmy że wkłada sobie to swoje "4ch" do AH i koniec. 4Ch jest sobie w AH i nic. Może mi ktoś to wytłumaczyć/

1

Przerwania to coś na kształt funkcji. Przekazywanie parametrów odbywa się przez rejestry w tym przypadku AH.
Z tym że musisz pamiętać że istnieją również przerwania hardwerowe, które tymczasowo przerywają działanie kodu aby pilnie obsłużyć jakieś zdarzenia.

1

Najpierw dajesz do ah nr funkcji 4C - a potem wykonujesz przerwanie.
Procesor w tym przerwaniu pobiera sobie wartość rejestru ah i wie że ma (w tym przypadku) zakończyć program.

1

Odnośnie przerwań programowych, skoro znalezione wyjaśnienia nie dają Ci do myślenia to może to pomoże: Wywołanie przerwania powoduje wstrzymanie wykonywania programu i przekazanie kontroli systemowi operacyjnemu. System operacyjny sprawdza numer przerwania i na jego podstawie wywołuje funkcje odpowiedzialną za jego wykonanie(funkcje obsługi przerwania). Ignorując poziom abstrakcji związany z ingerencją systemu operacyjnego można powiedzieć, że wywołanie przerwania to po prostu wywołanie jakiejś funkcji określonej identyfikatorem, będącym numerem przerwania(int numer). Co do tego kopiowania wartości do rejestrów przed wywołaniem przerwania, w ten sposób przekazujesz argumenty do funkcji obsługującej dane przerwanie, w przypadku AH(dla przerwań dos) chyba jest to określenie numeru funkcji, która ma być wywołana przez funkcje obsługi przerwania.

0

Aha czyli wywołanie przerwania

int 21h automatycznie przekazuje wartość rejestru AH jako parametr? Dobrze to zrozumiałem?

1
MakeMeHappy napisał(a)

int 21h automatycznie przekazuje wartość rejestru AH jako parametr? Dobrze to zrozumiałem?

Zależy co rozumiesz poprzez parametr. Chodzi o to, że kopiujesz wartości do rejestrów przed wywołaniem przerwania po to, aby funkcja obsługi przerwania mogła sobie je odczytać i na ich podstawie coś tam zrobić. W dokumentacji każdej funkcji obsługi przerwania masz opis w jakich rejestrach co ma być i po co. Przykład: http://www.ctyme.com/intr/rb-2554.htm

0

Dokładnie o to mi chodziło. +iki lecą :)

0

Jeszcze jedno pytanko, czy znacie jakikolwiek kompilator ze środowiskiem który nie składa się w 100% z debugerów i konfiguracji? Bo po zainstalowaniu TASM jakos nie mogę znaleźć nic innego...

0

Pod Linuksem (i pod każdym systemem), używając dowolnego asemblera nie musisz obawiać się żadnych debuggerów. Chyba, że właśnie tego sobie życzysz.
Środowiska takie jak Visual Studio mają na celu ułatwić ci debuggowanie. Konfiguracja projektów to druga sprawa. Jeżeli nie życzysz sobie, aby twoje środowisko robiło coś bez twojej wiedzy, to używaj asemblerów z poziomu wiersza poleceń.

1 użytkowników online, w tym zalogowanych: 0, gości: 1