Asembler x86/Pierwszy program/GNU AS: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
poprawki
zmiana kolejności segmentów
Linia 1:
<noinclude>
{{Asembler_X86Asembler X86/Nawigacja|Pierwszy program}}</noinclude>
 
=== Hello world! (POSIX) ===
Oto przykład programu, napisanego w asemblerze GNU, wyświetlającego napis "Hello World!" w systemie zgodnym z normą POSIX, uruchomionym na komputerze typu i386:
<source lang="asm">
.data
napis:
.string "Hello World!\10"
len = . - napis
.text
.globl _start
Linia 17 ⟶ 21:
xorl %ebx,%ebx
int $80h
 
.data
napis:
.string "Hello World!\10"
len = . - napis
</source>
 
Linia 38:
</source>
Omówię teraz po kolei kod tego programu:
<source lang="asm">
.data
</source>
Oznacza, że dalsza część programu będą stanowiły dane, potrzebne do wykonania instrukcji.
<source lang="asm">
napis:
</source>
Tworzymy etykietę napis.
<source lang="asm">
.string "Hello World!\10"
</source>
Tworzymy napis, który będzie widoczny pod adresem etykiety "napis", o treści "Hello World!" zakończonej znakiem nowej linii 10 (0A szesnastkowo).
<source lang="asm">
len = . - napis
</source>
Jest to zmienna, która zawiera długość napisu. Kropka oznacza "aktualny adres" w pamięci (w naszym przypadku koniec napisu), a "napis" - adres etykiety, pod którą zawarto początek napisu. Różnica koniec - początek daje długość napisu, która jest niezbędna, aby program wypisał na ekranie dokładnie tyle znaków, ile liczy sobie napis.
<source lang="asm">
.text
Linia 61 ⟶ 77:
</source>
Tym razem wywołamy funkcję exit, której argumentem będzie 0. W ten sposób "poprosimy" system operacyjny o zakończenie pracy programu.
<source lang="asm">
.data
</source>
Oznacza, że dalsza część programu będą stanowiły dane, potrzebne do wykonania instrukcji.
<source lang="asm">
napis:
</source>
Nie używamy .globl - etykieta napis ma być widoczna tylko dla kodu programu i nie jest istotna w procesie tworzenia pliku wykonywalnego.
<source lang="asm">
.string "Hello World!\10"
</source>
Tworzymy napis, który będzie widoczny pod adresem etykiety "napis".
<source lang="asm">
len = . - napis
</source>
Jest to zmienna, która zawiera długość napisu. Kropka oznacza "aktualny adres" w pamięci (w naszym przypadku koniec napisu), a "napis" - adres etykiety, pod którą zawarto początek napisu. Różnica koniec - początek daje długość napisu, która jest niezbędna, aby program wypisał na ekranie dokładnie tyle znaków, ile liczy sobie napis.
 
=== Hello World! (wersja DOS) ===