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

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
nawigacja
inc/dec
Linia 12:
movl $napis, %ecx
movl $len, %edx
int $0x8080h
movl $1, %eax
movl $0,decl %ebx
int $0x8080h
.data
Linia 40:
<source lang="asm">
movl $4, %eax
movl $1,incl %ebx
movl $napis, %ecx
movl $len, %edx
int $0x8080h
</source>
Instrukcja mov (l na końcu to informacja, że zapisujemy dane do 32-bitowego rejestru) przenosi dane do odpowiednich rejestrów - w EAX znajdzie się numer funkcji systemowej (4 - write), EBX - plik docelowy (1 - standardowe wyjście), w ECX - adres, pod którym znajdują się dane do wyświetlenia oraz EDX - długość napisu. Instrukcja inc zwiększa wartość rejestru o 1. Instrukcja int powoduje wywołanie przerwania i realizację przez system operacyjny odpowiedniej czynności - w tym przypadku wypisanie na ekran "Hello world!".
<source lang="asm">
movl $1, %eax
movl $0,decl %ebx
int $0x8080h
</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.
Linia 77:
movb $9, %ah
int $0x21
movw $0x4C004C00h, %ax
int $0x2121h
</source>
Przyglądając się składni GNU możesz zauważyć, jak bardzo różni się ona od składni NASM lub MASM.