Menu
Coddy logo textTech

Połączmy elementy

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 39 z 45.

Poznałeś wszystkie cztery elementy wywołania systemowego write:

RejestrCo zawieraWartość dla wyjścia na ekran
raxNumer wywołania systemowego1 (write)
rdiDeskryptor pliku1 (stdout)
rsiAdres buforaAdres twojego ciągu znaków
rdxLiczba bajtówDł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 wypisanie

Kompletny 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
    syscall

Co robi ten program:

KrokCo się dzieje
1Wyświetla „Hello, World!” na ekranie
2Przechodzi do nowego wiersza
3Koń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.

challenge icon

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
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly