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