Na początek przedstawię schemat pisania progamu typu exe w assemblerze.
Prawidłowo napisany program powinien składać się z conajmniej trzech segmentów , chociaż które programy mogą miec tylko jeden segment(segment kodu) jednakże ich rozmiar ograniczony jest jedynie do 64kB.
Jak już wspomniałem program powinien mieć 3 segmenty: kodu, danych i stosu. Podział ten wynika z konstrukcji procesora 8086 który zawiera takie rejestry segmentowe. W segmencie kodu powinien znajdować sie kod programu czyli instrukcje jakie powinien wykonać procesor w trakcie działania programu. W segmencie danych znajduja sie dane ktore wykorzystywane są w programie. Stos służy do tymczasowego odkładania wartości.Ważne jest by stos miał odpowiednią wielkość , taką by zmieściła się tam wystarczająca ilość danych. Gdy ilość danych odkładanych na stosie przekroczy jego zadeklarowaną wielkość może dojść do zamazania innych części programu co w efekcie może doprowadzić do błędnego wykonania się programu. Procesor w trakcie pracy wykonyje instrukcje które znajdują się pod adresem CS:IP, dane czerpie z pod adresu DS:przesunięcie dlatego kodu programu nie umieszcza sie w segmencie danych.
Ważne jest by program był zakończony wyjściem do DOS, gdyż w innym przypadku może dojść do "zawieszenia" komputera lub w najgorszym przypadku do utraty danych.
Oto schemat czytego programu typu EXE. Może on posłużyć jako szablon dla innych programów.
Komentarze rozpoczynają się znakiem średnika i są omijane poczas kompilacji programu.
.386c
;dyrektywa ASSUME przyporządkowywuje logicznie nazwy do segmentow. np. dzieki temu program sam bedzie szukal etykiet we wszystkich segmentach programu
ASSUME cs:CODE ds:DANE ss:STOSIK
;stale programu
ok equ 0
dos equ 21h
;poczatek segmentu kodu
CODE SEGMENT
;ponizej umiescimy zmienne i procedury :
;etykieta start jest punktem startowym programu
Start:
mov ax,dane ;deklaracja danych
mov ds,ax
mov ax,stosik ;deklaracja stosu
mov ss,ax
mov sp,offset szczyt
;OD TAD MOZECIE ZACZAC PROGRAM:
;KONIEC PROGRAMU:
mov ax,4C00h
int DOS
CODE ENDS
DANE SEGMENT
;tu umieszczamy dane i zmienne programu
DANE ENDS
STOSIK SEGMENT
dw 100h dup (0)
szczyt label word
STOSIK ENDS
END Start;koniec programu z zaznaczonym miejscem startu programu
Gdy skompilujemy go to nic on nie zrobi. Jest to poprawny program pusty. Nie wnikajcie w jego konstrukcję na razie, to nieistotne do pierwszych programów. Zajmiemy się tym w kolejnych lekcjach. Każdy zauważy jednak, że znajdują się już tam dwie linijki :
MOV AX,4C01h
INT 21h
To jest opuszczenie programu. Trzeba wskazać programowi, kiedy ma się skończyć no nie? Bo inaczej będzie wędrował bo zasobach pamięci w nieskończoność. Jak widzicie jest to jedna z funkcji przerwania 21h - to jest przerwanie DOSowe. W assemblerze komentarze umieszczamy po znaku ; Pamiętajcie też, że nie wolno używać polskich liter, chyba że w komentarzach. Stos w przypadku naszego pierwszego programu ma wielkość 512 B - jest to tablica 256 elementow 16 bitowych. Szczyt stosu jest deklarowany zawsze po deklaracji stosu (co jest logiczne i nie trzeba chyba tłumaczyć dlaczego nie przed).