Endereço do Buffer (rsi)
Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 37 de 45.
Na syscall write, após informar ao SO para onde enviar a saída (descritor de arquivo em rdi), você precisa dizer a ele o que imprimir. Você faz isso passando o endereço da string na memória.
O registrador para o endereço do buffer é rsi.
O que é um buffer?
Um buffer é simplesmente um bloco de memória que contém dados. No nosso caso, o buffer é a string que queremos imprimir.
Por que o endereço, e não o valor em si?
A syscall write precisa saber onde a string começa na memória. Ela lerá os bytes a partir desse endereço até atingir o comprimento que você especificar em rdx. Você não envia os caracteres reais para a syscall — você envia a localização deles.
Exemplo:
section .data
msg db 'Hello', 0x0a
section .text
mov rsi, msg ; rsi contém o endereço de msgO que <strong>msg</strong> realmente é:
msg é um label. O assembler o substitui por um número — o endereço de memória onde a string 'Hello' está armazenada. Quando você escreve mov rsi, msg, você está colocando esse número de endereço em rsi.
O que acontece se você esquecer o endereço?
Se você não definir rsi, o registrador conterá qualquer lixo que estivesse lá antes. O SO tentará ler de um endereço de memória aleatório, o que provavelmente causará uma falha de segmentação (crash).
Exemplo completo com a syscall write:
section .data
msg db 'Hello', 0x0a
len equ $ - msg
section .text
mov rax, 1 ; syscall write
mov rdi, 1 ; stdout
mov rsi, msg ; endereço da string
mov rdx, len ; número de bytes
syscallDesafio
Você recebeu uma string chamada greeting com o valor 'Hi' seguida por uma nova linha. Escreva a linha de código que carrega o endereço de greeting em rsi.
Escreva apenas a instrução mov para rsi.
Experimente você mesmo
section .text
global _start
_start:
%include "solution.asm"
mov rax, 1
mov rdi, 1
; rsi já contém o endereço (do código do estudante)
mov rdx, greetingLen
syscall
mov rax, 60
mov rdi, 0
syscallEsta 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-64