Menu
Coddy logo textTech

Дескриптор файла (rdi)

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

В предыдущем уроке ты использовал mov rdi, 1 в рамках системного вызова write. Это число 1 называется дескриптором файла.

Дескриптор файла — это число, которое сообщает операционной системе, куда отправить данные.

Три стандартных файловых дескриптора в Linux:

Файловый дескрипторИмяКуда направляются данные
0stdinВвод с клавиатуры (чтение данных от пользователя)
1stdoutВывод на экран (обычный вывод программы)
2stderrВывод на экран (сообщения об ошибках)

Зачем нужны два вывода на экран?

Обычный вывод (stdout) и вывод ошибок (stderr) направляются на один и тот же экран, но обрабатываются отдельно. Это позволяет вам:

  • Перенаправлять обычный вывод в файл, продолжая видеть ошибки на экране
  • Показывать ошибки, даже когда обычный вывод скрыт

Для вывода в этом курсе:

Ты всегда будешь использовать файловый дескриптор 1 (stdout) для вывода сообщений. Пока тебе не нужен stderr.

Пример:

mov rdi, 1      ; отправить вывод в stdout (на экран)

Что произойдёт, если использовать неправильный файловый дескриптор?

Если вы используетеРезультат
0 (stdin)Системный вызов записи ожидает ввод, а не вывод: завершится ошибкой или ничего не сделает
2 (stderr)Работает как stdout (выводит на экран), но предназначен для ошибок
Любое другое числоЯдро его не распознаёт: системный вызов завершается ошибкой
challenge icon

Задание

Вам дана строка с именем message и значением 'OK', за которым следует новая строка. Напишите строку кода, которая sets дескриптор файла для вывода на screen (stdout). Напишите только инструкцию mov для rdi.

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

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; Студент устанавливает файловый дескриптор здесь
    %include "solution.asm"
    
    mov rax, 1
    ; rdi уже должен быть установлен студентом
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconПроверьте себя

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

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

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