Коды завершения
Часть раздела Основы путешествия по Assembly на Coddy — урок 33 из 45.
Когда ваша программа завершает работу, она отправляет небольшое число обратно операционной системе. Это число называется кодом выхода или статусом выхода.
Почему важны коды завершения:
Скрипты используют коды завершения, чтобы проверить, успешно ли выполнена программа. Например, скрипт резервного копирования может продолжить работу только в том случае, если предыдущая команда была выполнена успешно.
Коды завершения также помогают в отладке. Вы можете использовать разные коды ошибок для разных проблем.
Вы также можете объединять программы в цепочки, чтобы одна программа запускалась только в том случае, если предыдущая завершилась успешно. Оболочка проверяет код завершения перед запуском следующей команды.
Правила кодов завершения:
| Код завершения | Значение |
|---|---|
| 0 | Успех — всё сработало |
| 1-255 | Что-то пошло не так |
Выбор кодов ошибок:
Вы можете использовать любое число от 1 до 255. Что означает каждое число, решать вам как программисту.
| Код выхода | Что это может означать |
|---|---|
| 1 | Общая ошибка |
| 2 | Отсутствует входной файл |
| 3 | Доступ запрещен |
| 4 | Сетевая ошибка |
Что произойдет, если вы не установите код выхода?
Вы всегда должны устанавливать rdi перед системным вызовом exit. Если вы забудете, rdi будет содержать любой мусор, оставшийся в регистре, и ваша программа завершится со случайным кодом.
Задание
Напишите полную программу на ассемблере, которая завершается с кодом выхода 2 (чтобы просигнализировать "file not found").
Код для вывода сообщения уже предоставлен. Вам нужно только добавить системный вызов exit.
Попробуйте сами
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)Коды завершенияИтоги: корректное завершение