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>
{{
=== 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>
▲<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) ===
|