|
Ćwiczenie 3 - wprowadzenie polecenia CALL RET
W ćwiczeniu tym poznamy polecenie Call Ret pozwalajace na wywolanie podprogramow znajdujacych sie w naszym programie. Zatem jak to działa.
Polecenie Call służy do wywołania podprogramu umieszczonego w naszym programie. Składnia tego polecenia wygląda następująco:
Call nazwa_podprogramu
Każde podprogram wywołany przez Call musi zostac zakończony poprzez instrukcję Ret. Samo Ret oznacza nic innego jak Ret, zatem podprogram ten może zwracać pewną wartość uzyskaną poprzez jego działanie. Jeżeli po wykonaniu Call nie zostanie odnaleziona instrukcja Ret program wyrzuci błąd. Dlatego jeżeli korzystamy z większej ilości wywołań podprgramów najlepiej jest umieścić je na koniec programu a na samym początku tegż programu użyć instrukcji JMP(poznanej w poprzednim ćwiczeniu), aby przenieść sie automatycznie przy instrukcjach wywołania Call. Po wykonaniu określonego podprogramu (czyli po dotarciu do instrukcji Ret) kolejną instrukcja wykonywaną będzie ta znajdująca sie bezpośrednio po Call.
Zobaczmy zatem jak to wygląda w praktyce. Zajmiemy się odrazu częścią danych, a zatem instrukcjami zawartymi pomiędzy .Starup a .Exit
JMP wywolanie |
skok do etykiety wywołanie |
napis |
poczatek podprogramu napis |
mov dx, offset tekst |
wprowadzenie parametrów wywołania |
mov ah, 09h |
procedury wyświetlenia komunikatu |
Ret |
zakończenie podprogramu |
wywołanie: |
etykieta |
Call napis |
wywołanie podprogramu napis |
Call napis |
wywołanie podprogramu napis |
Call napis |
wywołanie podprogramu napis |
Call napis |
wywołanie podprogramu napis |
Powyższy program czterokrotnie wyświetli nam na ekranie napis Hello World (deklaracja jaki tekst wyświetlamy jest w ćwiczeniu 1 na podstawie którego wciąż bazujemy). Przyjżyjmy się zatem, co jest pokolei wykonywane. Najpierw mamy skok do etykiety wywołanie (jest to najczęściej używany sposób jeżeli w programie mamy wywołania). Następnie wykonujemy instrukcję Call która przenosi nas do podprogramu Napis. Po jego wykonaniu jesteśmy przenoszeni do następnej instrukcji za naszym Callem ktory został właśnie wykonany. Kolejną instrukcja jest także Call, a zatem następuje jego wykonanie, i tak do końca programu.
|
|
|