Коды завершения
Часть раздела Основы путешествия по Assembly на Coddy. Урок 33 из 45.
Когда ваша программа завершается, она отправляет операционной системе небольшое число. Это число называется кодом выхода или статусом выхода.
Почему коды выхода важны:
Скрипты используют коды выхода, чтобы проверить, успешно ли завершилась программа. Например, скрипт резервного копирования может продолжить работу, только если предыдущая команда завершилась успешно.
Коды завершения также помогают при отладке. Можно использовать разные коды ошибок для разных проблем.
Можно также объединять программы в цепочку, чтобы одна программа запускалась только в том случае, если предыдущая завершилась успешно. Оболочка проверяет код завершения перед запуском следующей команды.
Правила кодов выхода:
| Код выхода | Значение |
|---|---|
| 0 | Success: всё работает |
| 1-255 | Что-то пошло не так |
Выбор кодов ошибок:
Вы можете использовать любое число от 1 до 255. Что означает каждое число, решать вам как программисту.
| Код выхода | Что это может означать |
|---|---|
| 1 | Общая ошибка |
| 2 | Отсутствует входной файл |
| 3 | Доступ запрещён |
| 4 | Ошибка сети |
Что произойдёт, если не установить код выхода?
Вы всегда должны устанавливать rdi перед системным вызовом exit. Если вы забудете это сделать, rdi будет содержать какой-то мусор, оставшийся в регистре, и ваша программа завершится со случайным кодом.
Задание
Напишите полную программу на assembly, которая завершается с кодом выхода 2 (чтобы сообщить «file not found»).
Код печати предоставлен. Вам нужно только добавить exit syscall.
Попробуйте сами
section .data
msg db 'Backup complete', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; Вывести сообщение (предоставляется тестовым харнессом)
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
; Код студента идёт здесь
%include "solution.asm"В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-642Системы счисления
Почему двоичная система?Двоичные числаИз десятичной в двоичнуюПочему шестнадцатеричная система?Из шестнадцатеричной в десятичнуюИз десятичной в шестнадцатеричнуюASCII и Hex5Системный вызов Exit
Что такое системный вызов?Системный вызов Exit (60)Коды завершенияИтоги: корректное завершениеПотренируйтесь самостоятельно: Песочница Assembly