Menu
Coddy logo textTech

A Importância do Newline

Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 41 de 45.

Você tem adicionado 0x0a (nova linha) ao final das suas strings. Mas o que acontece se você esquecer?

Sem nova linha:

O texto é impresso, mas o cursor permanece na mesma linha. Qualquer saída futura aparecerá logo ao lado dele.

Exemplo sem nova linha:

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

Saída:

HelloWorld

Sem espaço. Sem nova linha. Tudo está grudado.

Com quebra de linha:

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

Saída:

Hello World

Cada string é impressa em sua própria linha.

O que a quebra de linha faz:

CaractereASCIIEfeito
0x0a10Move o cursor para o início da próxima linha

Erros comuns de quebra de linha:

ErroResultado
Nenhuma quebra de linhaO texto fica todo em uma única linha
Quebra de linha apenas no final da última stringAs strings anteriores ficam juntas, a última vai para a próxima linha
Quebra de linha no meio de uma stringQuebras de linha em lugares inesperados

A regra de segurança:

Sempre adicione 0x0a ao final de cada string que você deseja em sua própria linha.

challenge icon

Desafio

Você recebe três strings sem quebras de linha. Sua tarefa é imprimi-las para que apareçam em três linhas separadas.

As strings são:

StringValor
word1'Apple'
word2'Banana'
word3'Cherry'

Requisitos:

  • Defina cada string com uma nova linha (0x0a) ao final
  • Calcule o comprimento de cada string automaticamente
  • Imprima todas as três strings usando a syscall write
  • Saia de forma limpa com o código 0

Experimente você mesmo

section .data
    ; TODO: Definir word1 com 'Apple' e nova linha
    ; TODO: Definir word2 com 'Banana' e nova linha
    ; TODO: Definir word3 com 'Cherry' e nova linha
    ; TODO: Calcular comprimentos para cada string

section .text
    global _start

_start:
    ; TODO: Imprimir word1
    ; TODO: Imprimir word2
    ; TODO: Imprimir word3

    ; TODO: Sair de forma limpasection .data
    word1 db 'Apple', 0x0a
    word1Len equ $ - word1
    word2 db 'Banana', 0x0a
    word2Len equ $ - word2
    word3 db 'Cherry', 0x0a
    word3Len equ $ - word3

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, word1
    mov rdx, word1Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word2
    mov rdx, word2Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word3
    mov rdx, word3Len
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos