Atualizado: 18/10/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Strings em Assembly NASM

De forma geral, strings são simplesmente conjuntos de dados, ou seja, sequências de números armazenadas em memória. Neste contexto, as strings serão tratadas como sequências de caracteres. Como cada caractere é, essencialmente, um código numérico, uma string pode ser representada como um conjunto de códigos ASCII:

section .data
    chars db 72, 101, 108, 108, 111     ; string "Hello"

Cada número corresponde ao código de um caractere na tabela ASCII. Também é possível declarar a string diretamente com os caracteres entre aspas:

section .data
    chars db "H", "e", "l", "l", "o"

Para simplificar, o NASM permite declarar toda a sequência de uma vez, dentro de aspas duplas:

section .data
    chars db "Hello"

Combinação de Caracteres e Códigos Numéricos

Quando é necessário inserir caracteres não imprimíveis (como o de nova linha, cujo código é 10), eles podem ser adicionados após a string, separados por vírgulas:

section .data
    chars db "Hello", 10

É possível misturar caracteres imprimíveis e não imprimíveis:

section .data
    chars db "Hello", 10, "Hello World"

Acessando Strings na Memória

Ao acessar uma string pelo nome da variável, o processador carrega o primeiro caractere (ou byte) em um registrador. Por exemplo:

global _start

section .data
message db "Hello PROGRAMICIO.COM"

section .text
_start:
    movzx rdi, byte [message]     ; RDI = 72 (código do caractere "H")
    mov rax, 60
    syscall

Nesse caso, apenas o primeiro caractere é movido para o registrador RDI.

Exibindo Strings na Tela (Linux)

Os sistemas operacionais modernos oferecem chamadas de sistema específicas para a exibição de texto. No Linux, essa operação é realizada pela função write, cujo número é 1, e que requer três parâmetros:

  • RDI → descritor de saída (por exemplo, 1 para o terminal);
  • RSI → endereço da string;
  • RDX → comprimento da string, em bytes.

O exemplo a seguir mostra como exibir uma string na tela:

global _start

section .data
message db "Hello PROGRAMICIO.COM"
count equ $ - message     ; comprimento da string em bytes

section .text
_start:
    mov rdi, 1        ; descritor de saída padrão (console)
    mov rsi, message  ; endereço da string
    mov rdx, count    ; comprimento da string
    mov rax, 1        ; número da função write
    syscall           ; chamada do sistema para exibir a string

    mov rax, 60
    syscall

Compilação e Execução

Abaixo, um exemplo de compilação e execução no Linux (com o nome do usuário programicio):

programicio@machine:~/asm$ nasm -f elf64 hello.asm -o hello.o
programicio@machine:~/asm$ ld hello.o -o hello
programicio@machine:~/asm$ ./hello
Hello PROGRAMICIO.COM
programicio@machine:~/asm$

Resumo

  • Strings em NASM são sequências de bytes que representam códigos ASCII.
  • Cada caractere ocupa 1 byte.
  • Podem ser declaradas como listas de números ou entre aspas duplas.
  • Caracteres não imprimíveis, como nova linha (10), podem ser adicionados com vírgulas.
  • O primeiro byte da string é acessado ao referenciar o nome da variável.
  • Para exibir strings no Linux, utiliza-se a chamada de sistema write (1), com RDI, RSI e RDX como parâmetros.
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com