Menu
CoddyTech

Важность новой строки

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

Ты добавлял 0x0a (символ новой строки) в конце строк. Но что произойдёт, если ты забудешь его добавить?

Без перевода строки:

Текст выводится, но курсор остаётся на той же строке. Любой последующий вывод появится сразу рядом с ним.

Пример без переноса строки:

section .data
    first db 'Hello'
    firstLen equ $ - first
    second db 'World'
    secondLen equ $ - second

section .text
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

Вывод:

HelloWorld

Без пробела. Без перевода строки. Всё слито воедино.

С символом новой строки:

section .data
    first db 'Hello', 0x0a
    firstLen equ $ - first
    second db 'World', 0x0a
    secondLen equ $ - second

Вывод:

Hello World

Каждая строка выводится на отдельной строке.

Что делает символ новой строки:

СимволASCIIДействие
0x0a10Перемещает курсор в начало следующей строки

Распространённые ошибки с символом новой строки:

ОшибкаРезультат
Символа новой строки нетТекст сливается в одну строку
Символ новой строки только в конце последней строкиПредыдущие строки сливаются, последняя переходит на следующую строку
Символ новой строки в середине строкиПереносы строк появляются в неожиданных местах

Безопасное правило:

Всегда добавляй 0x0a в конец каждой строки, которую хочешь вывести на отдельной строке.

challenge icon

Задание

Вам даны три строки без символов новой строки. Ваша задача — вывести их так, чтобы каждая оказалась на отдельной строке.

Строки:

СтрокаЗначение
word1'Apple'
word2'Banana'
word3'Cherry'

Требования:

  • Определите каждую строку с символом новой строки (0x0a) в конце
  • Автоматически вычислите длину каждой строки
  • Выведите все три строки с помощью системного вызова write
  • Корректно завершите программу с кодом 0

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

section .data
    ; TODO: Определить word1 с 1-м текстом из инструкции и символом новой строки
    ; TODO: Определить word2 со 2-м текстом из инструкции и символом новой строки
    ; TODO: Определить word3 с 3-м текстом из инструкции и символом новой строки
    ; TODO: Вычислить длину каждой строки

section .text
    global _start

_start:
    ; TODO: Вывести word1
    ; TODO: Вывести word2
    ; TODO: Вывести word3

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

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

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

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