Menu
Coddy logo textTech

Собираем всё вместе

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

Вы изучили все четыре части системного вызова write:

РегистрЧто он содержитЗначение для вывода на экран
raxНомер системного вызова1 (write)
rdiФайловый дескриптор1 (stdout)
rsiАдрес буфераАдрес вашей строки
rdxКоличество байтДлина вашей строки

Теперь пришло время собрать всё это воедино.

Полный шаблон системного вызова write:

mov rax, 1          ; номер системного вызова для write
mov rdi, 1          ; дескриптор файла (stdout)
mov rsi, msg        ; адрес строки
mov rdx, msgLen     ; количество байт для вывода
syscall             ; запрос к ОС на вывод

Полная рабочая программа:

section .data
    msg db 'Hello, World!', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

Что делает эта программа:

ШагЧто происходит
1Выводит "Hello, World!" на экран
2Переходит на новую строку
3Успешно завершается с кодом 0

Порядок имеет значение:

Вы должны настроить регистры перед выполнением syscall. Порядок инструкций mov не имеет значения, при условии, что все четыре установлены перед syscall.

challenge icon

Задание

Напишите полную программу, которая выводит сообщение "Assembly is fun", сопровождаемое символом новой строки, а затем корректно завершает работу.

Строка и её длина уже определены. Вам нужно только написать код внутри _start:.

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

section .data
    msg db 'Assembly is fun', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    ; TODO: Настроить и вызвать системный вызов write
    ; Используйте rax=1, rdi=1, rsi=msg, rdx=msgLen

    ; TODO: Корректно завершить работу с кодом 0
quiz iconПроверьте себя

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

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