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 (quebra de 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 quebra de linha. Tudo fica junto.
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 é exibida em sua própria linha.
O que a quebra de linha faz:
| Caractere | ASCII | Efeito |
|---|---|---|
0x0a | 10 | Move o cursor para o início da próxima linha |
Erros comuns de quebra de linha:
| Erro | Resultado |
|---|---|
| Nenhuma quebra de linha | O texto fica todo junto em uma única linha |
| Quebra de linha apenas no final da última string | As strings anteriores ficam juntas, e a última passa para a linha seguinte |
| Quebra de linha no meio de uma string | Quebras de linha em lugares inesperados |
A regra segura:
Sempre adicione 0x0a ao final de cada string que você quer em uma linha própria.
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 chamada de sistema write
- Encerre corretamente com o código 0
Experimente você mesmo
section .data
; TODO: Defina word1 com o 1º texto listado nas instruções e uma quebra de linha
; TODO: Defina word2 com o 2º texto listado nas instruções e uma quebra de linha
; TODO: Defina word3 com o 3º texto listado nas instruções e uma quebra de linha
; TODO: Calcule o comprimento de cada string
section .text
global _start
_start:
; TODO: Imprima word1
; TODO: Imprima word2
; TODO: Imprima word3
; TODO: Encerre o programa corretamente
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