Menu
Coddy logo textTech

Что такое системный вызов?

Часть раздела Основы путешествия по Assembly на Coddy. Урок 31 из 45.

Вы написали такие инструкции ассемблера, как mov и lea. Эти инструкции выполняются непосредственно на CPU. Но что делать, если нужно выполнить действие, которое CPU не может выполнить самостоятельно, например вывести что-то на экран, прочитать данные с клавиатуры или завершить программу?

Для выполнения этих заданий вам нужна операционная система (Linux, в этом курсе).

Что такое syscall?

syscall (системный вызов) — это запрос вашей программы к операционной системе. Так вы просите ОС сделать что-то для вас.

Зачем нужны syscall:

ЗадачаМожет ли CPU выполнить это самостоятельно?Нужен syscall?
Сложить два numberДаНет
Переместить данные между регистрамиДаНет
Вывести текст на экранНетДа
Прочитать ввод с клавиатурыНетДа
Завершить программу с помощью exitНетДа
Открыть файлНетДа

Как работает syscall:

  1. Вы помещаете номер syscall в rax (сообщает ОС, чего вы хотите)
  2. Вы помещаете аргументы в другие регистры (rdi, rsi, rdx и т. д.)
  3. Вы выполняете инструкцию syscall
  1. CPU переходит в ядро ОС
  2. ОС выполняет запрос
  3. ОС возвращает управление вашей программе

Аналогия:

Представь, что syscall — это обращение в государственное учреждение:

ШагАналогияВ ассемблере
1Решить, какая услуга тебе нужнаВыбрать номер syscall (поместить в rax)
2Заполнить формыПоместить аргументы в регистры
3Отправить запросВыполнить syscall
4Государственное учреждение обрабатывает егоЯдро ОС выполняет работу
5Получить результат обратноПрограмма продолжает работу

Системные вызовы, которые вы изучите в этом курсе:

SyscallNumberЧто он делаетГлава
exit60Завершает программуГлава 4
write1Выводит текст на экранГлава 5

Пока что самый важный syscall: <strong>exit</strong>

Без exit ваша программа продолжала бы работать бесконечно или завершилась бы с ошибкой. Каждая написанная вами программа должна завершаться системным вызовом exit.

mov rax, 60    ; syscall number for exit
mov rdi, 0     ; exit code (0 = success)
syscall        ; ask the OS to exit

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница Assembly