Kody zakończenia
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 33 z 45.
Gdy program kończy działanie, wysyła niewielką liczbę do systemu operacyjnego. Ta liczba jest nazywana kodem zakończenia lub statusem zakończenia.
Dlaczego kody wyjścia są ważne:
Skrypty używają kodów wyjścia, aby sprawdzić, czy program zakończył się pomyślnie. Na przykład skrypt tworzący kopię zapasową może kontynuować działanie tylko wtedy, gdy poprzednie polecenie zakończyło się pomyślnie.
Kody zakończenia pomagają również w debugowaniu. Możesz używać różnych kodów błędów dla różnych problemów.
Możesz też łączyć programy w taki sposób, aby jeden program uruchamiał się tylko wtedy, gdy poprzedni zakończył się powodzeniem. Powłoka sprawdza kod zakończenia przed uruchomieniem następnego polecenia.
Zasady dotyczące kodów wyjścia:
| Kod wyjścia | Znaczenie |
|---|---|
| 0 | Sukces: wszystko działało |
| 1-255 | Coś poszło nie tak |
Wybieranie kodów błędów:
Możesz użyć dowolnej liczby od 1 do 255. To ty, jako programista, decydujesz, co oznacza każda liczba.
| Kod wyjścia | Co możesz mieć na myśli |
|---|---|
| 1 | Błąd ogólny |
| 2 | Brak pliku wejściowego |
| 3 | Odmowa dostępu |
| 4 | Błąd sieci |
Co się stanie, jeśli nie ustawisz kodu wyjścia?
Musisz zawsze ustawić rdi przed wywołaniem systemowym kończącym działanie programu. Jeśli o tym zapomnisz, rdi będzie zawierać przypadkową wartość, która pozostała w rejestrze, a program zakończy działanie z losowym kodem.
Wyzwanie
Napisz kompletny program w asemblerze, który kończy działanie z kodem wyjścia 2 (aby zasygnalizować „file not found”).
Kod wyświetlający tekst jest już dostępny. Wystarczy dodać wywołanie systemowe kończące działanie.
Spróbuj swoich sił
section .data
msg db 'Backup complete', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; Wypisz komunikat (dostarczony przez środowisko testowe)
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
; Tutaj znajduje się kod ucznia
%include "solution.asm"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