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 quebra de linha:
O texto é exibido, mas o cursor permanece na mesma linha. Qualquer saída futura aparecerá logo ao lado dele.
Exemplo sem quebra de 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
syscallSaída:
HelloWorld
Sem espaço. Sem nova linha. Tudo fica grudado.
Com quebra de linha:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondSaída:
Hello
World
Cada string é impressa em sua própria linha.
O que a nova linha faz:
| Caractere | ASCII | Efeito |
|---|---|---|
0x0a | 10 |
Erros comuns de nova linha:
| Erro | Resultado |
|---|---|
| Nenhuma nova linha | O texto fica todo junto em uma única linha |
| Nova linha apenas no final da última string | As strings anteriores ficam todas juntas, e a última vai para a linha seguinte |
| Nova linha no meio de uma string | As quebras de linha ocorrem em locais inesperados |
A regra segura:
Sempre adicione 0x0a ao final de cada string que você queira em sua própria linha.
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:
| String | Valor |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Requisitos:
- Defina cada string com uma quebra de linha (
0x0a) no final - Calcule automaticamente o comprimento de cada string
- Imprima as três strings usando a syscall write
- Saia corretamente com o código 0
Experimente você mesmo
section .data
; TODO: Defina word1 com o 1º texto listado nas instruções e nova linha
; TODO: Defina word2 com o 2º texto listado nas instruções e nova linha
; TODO: Defina word3 com o 3º texto listado nas instruções e nova linha
; TODO: Calcule os comprimentos de cada string
section .text
global _start
_start:
; TODO: Imprima word1
; TODO: Imprima word2
; TODO: Imprima word3
; TODO: Saia de forma limpa
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
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-64Pratique por conta própria: Playground de Assembly