Asembler x86/Pierwszy program/FASM: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m nawigacja |
→Hello World!: pod linuxa |
||
Linia 3:
=== Hello World! ===
Zacznijmy od dawki kodu, aby w ogóle mieć pojęcie, jak wygląda kod w języku Asembler. Będzie to tradycyjny już program Hello World, który można napotkać w niemal każdym podręczniku do nauki programowania w dowolnym języku (za zadanie ma po prostu wyświetlenie napisu Hello World!). Uwaga: jak już wcześniej było wspomniane, konkretny kod zapisany w Asemblerze wykonuje się na konkretnej maszynie. Poniższy program uruchomi się tylko pod systemem
<source lang="asm">
format MZ
entry
segment
tekst db "Hello World!
segment
mov ax,
mov ds, ax
mov
mov
mov
int
mov eax, 1
dec ebx
int 80h
</source>
A teraz postaram się zrozumiale wyjaśnić poszczególne fragmenty kodu.
Linia 28 ⟶ 31:
Informuje asemblera FASM, że ma utworzyć dosowy plik wykonywalny MZ.
<source lang="asm">entry
Powiadamia gdzie znajduje się adres wejściowy dla pliku wykonywalnego (z którego adresu ma rozpocząć się wykonywanie kodu); ''
<source lang="asm">segment
Tworzy segment o nazwie ''dane'' i przechodzi do jego definiowania.
<source lang="asm">tekst db "Hello World!
Tworzy wewnątrz obecnie definiowanego segmentu (tj. segmentu ''dane'') ciąg "Hello World" zakończony znakiem nowej linii
<source lang="asm">
Definiuje etykietę o nazwie ''
<source lang="asm">
mov ax,
mov ds, ax
</source>
Linia 47 ⟶ 50:
<source lang="asm">
mov
mov
mov ebx, 1
int 0x21▼
mov edx, 13
</source>
Ten fragment kodu zacznę tłumaczyć od końca. Instrukcja [[../Instrukcje/Różne#int|int]] wywołuje ''podprogram obsługi przerwania'' o podanym numerze (
<source lang="asm">
mov
dec ebx
int
</source>
Wywołuje funkcję przerwania
<noinclude>
|