Asembler x86/Narzędzia: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Mythov (dyskusja | edycje)
Mythov (dyskusja | edycje)
m →‎Hello world!: poprawki
Linia 26:
== Zaczynamy! ==
=== Hello world! ===
Zacznijmy od dawki kodu, żeby mieć pojęcie jak to w ogóle wygląda. Będzie to tradycyjny już program Hello World:
<pre>
.model small
Linia 46:
Dyrektywa .model pozwala zdefiniować z jakiego modelu pamięci ma korzystać nasz program. Model small oznacza segmentowy model pamięci z jednym segmentem kodu i jednym segmentem danych.
.386
Ta dyrektywa określa z jakiego zbioru instrukcji będzie korzystać nasz program. W tym przypadku chodzi określamy oczywiście, że chodzi nam o zbiór instrukcji procesorów 80386.
.data
Określa, że od tego miejsca w dół definiowany jest segment z danymi.
tekst byte "Hello World!",0Ah,0Dh,"$"
Wrzuca do segmentu z danymi ciąg znaków "Hello World!" zakończony znakiem nowej linii (0A0D) oraz znakiem $ określającym, iż jest to koniec naszego ciągu znaków (dla migrantów z C/C++ - jest to odpowiednik znaku '\0'). ''tekst'' jest to nazwa dla naszego ciągu, zaś słowo ''byte'' oznacza, że ma być on ciągiem bajtów.
.stack 100h
Dyrektywa tworzy segment stosu o wielkości 100h. Umieszczenie literki ''h'' za liczbą oznacza, że '''jest zapisana szesnastkowo''' (100h = 256 dziesiętnie).
Linia 66:
Instrukcja int wywołuje podprogram obsługi przerwania (dokładnie co to są przerwania opisane jest w rozdziale [[Asembler X86/Instrukcje_specjalne|Instrukcje]]) o numerze podanym jako A (w tym przypadku chodzi o numer 21h). Podprogram obsługujący przerwanie o tym numerze wywołuje określoną funkcję o numerze przekazanym w rejestrze ah (przerwanie 21h, funkcja przerwania numer 09h).
.exit
MakroinstrukcjaJest to makroinstrukcja wywołująca przerwanie 21h, funkcję 4Ch (dla ćwiczenia spróbuj zastąpić ją właściwym kodem przy użyciu instrukcji mov oraz int), która nie przyjmuje żadnych argumentów (tzn. makroinstrukcja ta nie przypisuje żadnych wartości rejestrom innym niż ah określającymokreślającemu numer funkcji). Funkcja ta kończy działanie programu.
end
Określa że w tym miejscu kończy się kod. Asembler po napotkaniu tego słowa kończy proces asemblacji, niezależnie od tego, czy znajduje się jakiś kod jeszcze dalej.