AK D Lab 5

background image

Informatyka Studia Dzienne

Laboratorium Architektury Komputerów

Ćwiczenie 5

Struktura programu typu COM.

Podstawowe procedury systemowe MS-DOS.

Przygotowanie:
Krzysztof Tokarz

background image

1. Cel ćwiczenia.

Celem ćwiczenia jest poznanie:

- struktury programu asemblerowego,
- struktury pliku typu COM,
- funkcji obsługi standardowego wejścia i wyjścia w MS-DOS,
- przebiegu asemblacji programu COM.

2. Dyrektywy i instrukcje.

Instrukcją nazywamy słowo kluczowe, które zostanie przetłumaczone przez program asemblera na
wykonywalny kod dla procesora.
Dyrektywą nazywamy polecenie sterujące przebiegiem asemblacji – nie są one bezpośredniego
tłumaczone na kod wynikowy dla procesora.

3. Segmentacja pamięci.

Pamięć widziana przez mikroprocesory rodziny 8086 jest podzielona na segmenty o rozmiarze
64kB. Podział na segmenty pozwala na operowanie wewnątrz programu lub bloku programu na
adresach 16-bitowych co ma korzystny wpływ na szybkość działania programu i zmniejsza jego
wymagania pamięciowe. Jedynie skoki i odwołania między segmentami muszą być przechowywane
w postaci pary liczb szesnastobitowych, z których jedna oznacza początek segmentu, druga
przemieszczenie wewnątrz segmentu (SEGMENT:OFFSET). Procesor jednocześnie może
operować na 4 segmentach. Adres segmentu musi być załadowany do jednego z rejestrów
segmentowych:

CS – segment kodu,

DS – segment danych,

ES – dodatkowy segent danych,

SS – segment stosu.

Przemieszczenie (offset) może być podane w innym rejestrze, lub jako stała. Może być również
sumą zawartości dwóch rejestrów oraz stałej – mówimy w takim przypadku o adresie efektywnym.
Para segment:offset tworzy adres logiczny. Adres logiczny jest przekształcany na adres fizyczny
dostarczany do pamięci RAM w następujący sposób:

adres_fizyczny = segment * 16 + offset

Proces oblicznia adresu można również przedstawić za pomocą następującego schematu:

zawartość wybranego rejestru segmentowego jest przesuwana o 4 pozycje bitowe w lewo i
uzupełniana czterema zerami,

do przesuniętej zawartości rejestru jest dodawana wartość przemieszczenia wewnątrz segmentu
(OFFSET),

otrzymana 20-bitowa liczba jest adresem fizycznym doprowadzonym do pamięci.

Oznacza to że początek segmentu musi być liczbą podzielną przez 16 (czyli mieć w zapisie
szesnastkowym najmłodszą cyfrę = 0). W ten sposób mikroprocesor może zaadresować obszar 1
MB pamięci.

4. Opis struktury programu typu COM.

Programy typu COM mają bardzo prostą strukturę. Ich rozmiar nie może przekroczyć rozmiaru
pojedynczego segmentu, czyli 64kB. Zarówno kod jak i dane muszą się zmieścić w tym segmencie.
Na początku programu musi być zarezerwowane miejsce na tworzony podczas ładowania programu
do pamięci blok PSP o rozmiarze 256 bajtów. Ponieważ całość programu mieści się w jednym
segmencie to rejestry CS i DS wskazują na to samo miejsce w pamięci, a przemieszczenia (offset),
na których operuje program są 16-bitowe. Ponadto w programie typu COM nie występuje stos.

background image

5. Tworzenie segmentów.

W języku asemblera 8086 segmenty tworzymy za pomocą dyrektyw segmentowych. Najwygodniej,
dla prostych programów użyć do tego celu uproszczonych dyrektyw deklaracji segmentu. Aby użyć
tych dyrektyw najpierw należy zdefiniować model pamięci. W zależności od wybranego modelu w
programie może być jeden lub wiele segmentów. Segmenty mogą być grupowane. Większość
modeli pamięci grupuje segmenty danych w grupie o nazwie DGROUP.
Nazwy segmentów, grup segmentów i przypisanie ich do rejestrów segmentowych dla różnych
modeli pamięci:

Model

CS

DS

ES

SS

TINY

DGROUP

DGROUP

DGROUP

DGROUP

SMALL

_TEXT

DGROUP

DGROUP

DGROUP

MEDIUM

Nazwa_TEXT

DGROUP

DGROUP

DGROUP

COMPACT

_TEXT

DGROUP

FAR_DATA

DGROUP

LARGE

Nazwa_TEXT

DGROUP

FAR_DATA

DGROUP

HUGE

Nazwa_TEXT

DGROUP

FAR_DATA

DGROUP

Dla programów typu COM jest używany model pamięci TINY. W tym modelu wszystkie segmenty
(zarówno kodu jak i danych tworzą jedną grupę DGROUP). Rozmiar tej grupy nie może
przekroczyć rozmiaru pojedynczego segmentu, czyli 64kB. Przykładowa struktura asemblerowego
programu typu COM może wyglądać następująco:

.MODEL TINY

.CODE

;... miejsce na dane i kod programu

END

Na początku programu niezbędne jest ustawienie adresu rejestru segmentowego danych DS. Można
go pobrać ze zmiennej @DATA lub bezpośrednio z nazwy grupy segmentów danych DGROUP.
Adres segmentu kodu można pobrać ze zmiennej @CODE.

6. Podstawowe funkcje systemu MS-DOS.

System MS-DOS udostępnia programiście zestaw funkcji wywoływanych za pomocą przerwania
programowego INT 21h. Najczęściej używana jest funkcja o numerze 4Ch, której wywołanie
spowoduje zakończenie programu i bezpieczny powrót do systemu operacyjnego. Numer funkcji
wpisuje się do rejestru AH, a następnie wywołuje przerwanie programowe INT 21h.

mov ah,4Ch

;numer funkcji do ah

mov al,0

;kod powrotu do al

int 21h

;wywolanie funkcji

Inne użyteczne funkcje to:

-

02h – wypisanie na ekranie znaku (DL zawiera kod ASCII znaku do wyświetlenia),

-

09h – wypisanie na ekranie tekstu (DS:DX zawiera adres początku tekstu, tekst musi być
zakończony znakiem $)

-

08h – odczytanie znaku z klawiatury (w AL jest zwracany kod ASCII naciśniętego znaku),

-

4Ch – powrót do systemu operacyjnego (AL może zawierać kod powrotu),

background image

7. Asemblacja programu w asemblerze TASM.

Kompilacja programu - program tasm
Opcje:
/l - generowanie raportu kompilacji
/la - generowanie rozszerzonego raportu kompilacji
/zi - umieszczenie w zbiorze wynikowym informacji o numerach wierszy i symbolach modułu
źródłowego
/m# - kompilacja w # przebiegach

Łączenie (konsolidacja) - program tlink
Opcje:
/l - włączenie do programu wykonywalnego informacji o liniach programu źródłowego
/u - włączenie do programu wykonywalnego informacji uruchomieniowych
/t - tworzenie pliku *.com

8. Przykładowy program typu COM.

Drukuj

EQU

9

Wyjscie

EQU

4Ch

Kod

SEGMENT

ASSUME CS:Kod

ORG 100h

Start:

jmp Poczatek

Tekst

DB 'Przykladowy tekst', 0Dh, 0Ah, '$'

Poczatek: mov ax, cs

mov ds, ax

mov dx, OFFSET Tekst

mov ah, Drukuj

int 21h

mov ah, Wyjscie

int 21h

Kod

ENDS

END Start

9. Przebieg ćwiczenia.

Na ćwiczeniu laboratoryjnym należy:

Dokonać asemblacji, konsolidacji (linkowania) i uruchomienia przykładowego programu typu
COM.

Przeanalizować działanie programu wykorzystując program uruchomieniowy (debuger) td.exe.

Sprawdzić w debugerze wersje asemblowane z włączonymi opcjami wspomagania uruchamiania
(tasm.exe /zi), (tlink.exe /l, /u).

Napisać program wyświetlający na ekranie litery naciskane na klawiaturze i kończący działanie
po naciśnięciu “ESC”.


Wyszukiwarka

Podobne podstrony:
AK D Lab 1
AK D Lab 8
AK D Lab 11 (2)
AK D Lab 10
AK D Lab 3
AK Z Lab 5
AK D Lab 2
AK Z Lab 3
AK D Lab 9
AK D Lab 7
AK D Lab 6
AK Z Lab 4
AK Z Lab 1
AK D Lab 1

więcej podobnych podstron