Przedmiot: SYSTEMY INFORMATYCZNE W BANKOWOŚCI
Transkrypt
Przedmiot: SYSTEMY INFORMATYCZNE W BANKOWOŚCI
Przedmiot : Programowanie w języku wewnętrznym Ćwiczenie nr 5 Stos i procedury w Asemblerze. 1. Stos – operacje. Stos to specjalny bufor w pamięci, który fizycznie umieszczony jest poza procesorem w segmencie stosu. Jest używany jako tymczasowy obszar do składowania danych i adresów. Na poszczególne 16-bitowe położenia na stosie wskazuje rejestr SP – wskaźnik stosu. SP przechowuje adres ostatniego elementu jaki został umieszczony na stosie. Dane umieszczane są na stosie wg zasady LIFO – ostatni na wejściu, pierwszy na wyjściu. 1.1. Umieszczanie wartości na stosie. Do skopiowania wartości na stos służy polecenie PUSH. Przed wykonaniem tej operacji wartość rejestru SP jest zmniejszana. push bx ; umieszcza zawartość rejestru BX na stosie push cx ; umieszcza zawartość rejestru CX na stosie Polecenie push nie zmienia zawartości kopiowanego na stos rejestru, a jedynie go kopiuje. Zakładając, że rejstry bx i cx zawierają odpowiednio wartości 0001 i 0002 to stos po wykonaniu operacji puch bx oraz push cx będzie wyglądał następująco : Tablela 1. - pokazuje stos po wykonaniu operacji push bx i push cx. pamięć górna 0008 0FA0 0001 0002 pamięć dolna SP po wykonaniu tych operacji będzie wskazywał na wartość „0002”. Wartości „0008” i „0FA0” są zawartością stosu przed wykonaniem operacji push bx i push cx. 1.2. Zdejmowanie wartości ze stosu. Do zdejmowania wartości ze stosu służy polecenie POP, które umieszcza wartość w rejestrze lub zmiennej. Rejestry CS i IP nie mogą być użyte jako operandy. pop cx ; zdejmuje wartość ze stosu i zapisuje w rejestrze CX pop bx ; zdejmuje wartość ze stosu i zapisuje w rejestrze BX Tablela 2. - pokazuje stos po wykonaniu operacji pop cx i pop bx. pamięć górna 0008 0FA0 pamięć dolna 1.3. Rejestry – zapisywanie i przywracanie. Strona 1 W trakcie działania programów rejestry są wielokrotnie wykorzystywane do różnych celów. Wywołanie przerwania Dos INT 21h powoduje wyświetlenie ciągu na konsoli. Używane są do tego celu rejestry DX i AX, które zawierają lub mogą zawierać ważne wartości działającego programu. Dlatego wartości tych rejestrów muszą być przywrócone po wyświetleniu ciągu na konsoli. Do tego celu jest właśnie wykorzystywany stos. .data ciag_do_wyswietlenia db „To jest komunikat do wyświetlenia.$' .code push ax push dx mov ah, 9 mov dx, offset ciag_do_wyswietlenia int 21h pop dx pop ax 2. 2.1 Procedury. Procedury – dyrektywy PROC i ENDP. Dyrektywy PROC i ENDP w asemblerze oznaczają początek i koniec procedury. Przykład poprawnego wywołania procedury. .code main proc mov ax,@data mov ds, ax call MojaPorcedura mov ax, 4c00h int 21h main endp MojaProcedura . - instrukcje procedury ret MojaProcedura endp Polecenie CALL nakazuje skok do początku procedury, natomiast polecenie RET wymusza powrót do głównego programu -> main. Procedury nie mogą się nakładać. Nakładanie się procedur jest traktowane przez asembler jako błąd. main proc . call procedura1 . procedura1 proc . main endp . ret procedura1 endp 2.2 Procedury – zagnieżdżone wywołania procedur. Strona 2 Procedura może wywoływać inne procedury. Na stosie są przechowywane adresy zwrotne, przez co procesor odnajduje drogę do poprzedniego wywołania. Przykład zagnieżdżania procedur : main proc call proc1 mov ax, 10 endp / koniec głównej procedury main proc1 proc . call proc2 ret proc1 endp proc2 proc . call proc3 ret proc2 endp proc3 proc . ret proc3 endp Instrukcja do kompilacji i konsolidacji programu w asemblerze z użyciem Microsoft Asemblera. Microsoft Asembler zawiera program ML.EXE. Asembluje on i konsoliduje jeden lub więcej plików źródłowych w języku asembler. Składnia ML.EXE : ML opcje nazwa_pliku.asm Przykłady asemblowania i konsolidowania z różnymi opcjami : ML /Zi hello.asm ; Dołączenie informacji debuggera ML /Fl hello.asm ; Utworzenie pliku wydruku ( hello.lst ) ML /Fm hello.asm ; Utworzenie pliku mapy ( hello.map ) ML /Zm hello.asm ; Tryb zgodności z MASM 5.12 ML /Zi /Zm /Fm /Fl hello.asm ; asemblacja i konsolidacja w jednej linii Strona 3 3. Ćwiczenia do wykonania : 3.1. Skompiluj przykładowy program z punktu 1.3 przy pomocy programu ML z pakietu MASM ( Microsoft Asembler ), uruchom go z wykorzystaniem debugera i zaobserwuj zmiany rejestru SP. 3.2. Bazując na przykładach z poprzednich ćwiczeń, napisz program w asemblerze, który wydrukuje na ekranie trzy linie tekstu, gdzie drukowanie każdej linii będzie oddzielną procedurą. Linie tekstu : „Linia 1” „Linia 2” „Linia 3” 3.3. Napisz program, który wydrukuje na ekranie następujący układ znakowy : ******** * * ******** Program ma zwierać procedurę drukowania znaku „*” i procedurę drukowania znaku spacji. Powtarzanie się znaków ma być zrealizowane z wykorzystaniem pętli LOOP ( poprzednie ćwiczenia ) i procedur drukowania znaku „*” i spacji. Przejście kursora do nowej linii zrealizuj jako procedurę z użyciem zmiennej typu DB : ... .data nowa_linia_data db '' '', 0dh, 0ah, '$' ... .code main proc ... endp nowa_linia proc mov ax, @data mov ds, ax mov ah, 9 mov dx, offset nowa_linia_data int 21h ret nowa_linia endp end main 3.4. Drukowanie całego znaku graficznego z punktu 3.3 wykonaj jako jedną procedurę do wielokrotnego użycia. Wydrukuj 3 razy wywołując procedurę Znak_Graficzny z użyciem pętli LOOP. 4. Literatura : • Abel P. Programowanie Asembler IBM PC. RM, W-wa 2004 • Kruk S. Asembler. Wykłady i ćwiczenia. ..mikom, W-wa 2003. Strona 4