Połączmy elementy
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 39 z 45.
Poznałeś wszystkie cztery elementy wywołania systemowego write:
| Rejestr | Co zawiera | Wartość dla wyjścia na ekran |
|---|---|---|
rax | Numer wywołania systemowego | 1 (write) |
rdi | Deskryptor pliku | 1 (stdout) |
rsi | Adres bufora | Adres twojego ciągu znaków |
rdx | Liczba bajtów | Długość twojego ciągu znaków |
Teraz czas połączyć je wszystkie.
Pełny wzorzec wywołania systemowego write:
mov rax, 1 ; numer wywołania systemowego dla write
mov rdi, 1 ; deskryptor pliku (stdout)
mov rsi, msg ; adres ciągu znaków
mov rdx, msgLen ; liczba bajtów do wypisania
syscall ; poproś system operacyjny o wypisanieKompletny działający program:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallCo robi ten program:
| Krok | Co się dzieje |
|---|---|
| 1 | Wyświetla „Hello, World!” na ekranie |
| 2 | Przechodzi do nowego wiersza |
| 3 | Kończy działanie poprawnie z kodem 0 |
Kolejność ma znaczenie:
Musisz skonfigurować rejestry przed wykonaniem syscall. Kolejność instrukcji mov nie ma znaczenia, o ile wszystkie cztery zostaną ustawione przed syscall.
Wyzwanie
Napisz kompletny program, który wypisuje komunikat "Assembly is fun" i znak nowej linii, a następnie kończy działanie bez błędów.
Łańcuch znaków i jego długość są już zdefiniowane. Musisz napisać tylko kod wewnątrz _start:.
Spróbuj swoich sił
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; TODO: Przygotuj i wywołaj wywołanie systemowe write
; Użyj rax=1, rdi=1, rsi=msg, rdx=msgLen
; TODO: Zakończ poprawnie z kodem 0
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Maszyna
Czym jest CPUPamięćRejestry a pamięćJak działają instrukcjeWzorzec dwóch plikówArchitektura x86-642Systemy liczbowe
Dlaczego system binarny?Liczby binarneZamiana z systemu dziesiętnego na binarnyDlaczego system szesnastkowy?Zamiana z systemu szesnastkowego na dziesiętnyZamiana z systemu dziesiętnego na szesnastkowyASCII i system szesnastkowy5Wywołanie systemowe zakończenia
Czym jest syscall?Wywołanie systemowe zakończenia (60)Kody zakończeniaPodsumowanie: prawidłowe zakończeniePoćwicz samodzielnie: Edytor online Assembly