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ę z powrotem do systemu operacyjnego. Ta liczba nazywa się kodem wyjścia lub statusem wyjścia.
Dlaczego kody wyjścia są ważne:
Skrypty używają kodów wyjścia, aby sprawdzić, czy program zakończył się powodzeniem. Na przykład skrypt tworzący kopię zapasową może kontynuować działanie tylko wtedy, gdy poprzednie polecenie zakończyło się powodzeniem.
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 łańcuch, tak 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 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 zakończenia?
Musisz zawsze ustawić rdi przed wywołaniem systemowym kończącym program. Jeśli o tym zapomnisz, rdi będzie zawierać przypadkowe dane, które pozostały w rejestrze, a Twój 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ć „nie znaleziono pliku”).
Kod wypisujący komunikat 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 należy umieścić 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