Endereço do Buffer (rsi)
Parte da seção Fundamentos do Journey de Assembly da Coddy. Lição 37 de 45.
Na chamada de sistema write, depois de informar ao sistema operacional para onde enviar a saída (descritor de arquivo em rdi), você precisa informar 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 armazena dados. No nosso caso, o buffer é a string que queremos imprimir.
Por que address, e não o valor em si?
O syscall write precisa saber onde a string começa na memória. Ele lerá bytes a partir desse address até atingir o comprimento que você especificar em rdx. Você não envia os caracteres reais para o 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 rótulo. 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, está colocando esse número de endereço em rsi.
O que acontece se você esquecer o address?
Se você não definir rsi, o registrador conterá qualquer lixo que estivesse ali antes. O sistema operacional tentará ler a partir de um endereço de memória aleatório, o que provavelmente causará uma falha de segmentação (travamento).
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 ; saída padrão
mov rsi, msg ; endereço da string
mov rdx, len ; número de bytes
syscallDesafio
Você recebe uma string chamada greeting com o valor 'Hi' seguido por uma nova linha. Escreva a linha de código que carrega o endereço de greeting em rsi.
Escreva somente 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á tem 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-64Pratique por conta própria: Playground de Assembly