Menu
Coddy logo textTech

O que é uma Syscall?

Parte da seção Fundamentos do Journey de Assembly da Coddy. Lição 31 de 45.

Você escreveu instruções de assembly como mov e lea. Essas instruções são executadas diretamente pela CPU. Mas e se você precisar fazer algo que a CPU não consegue fazer sozinha, como imprimir na tela, ler do teclado ou sair de um programa?

Para estas tarefas, você precisa do sistema operacional (Linux, neste curso).

O que é uma syscall?

Uma syscall (chamada de sistema) é uma solicitação do seu programa ao sistema operacional. É assim que você pede ao SO para fazer algo por você.

Por que você precisa de chamadas de sistema:

TarefaA CPU consegue fazer isso sozinha?Precisa de uma chamada de sistema?
Adicionar dois númerosSimNão
Mover dados entre registradoresSimNão
Imprimir texto na telaNãoSim
Ler a entrada do tecladoNãoSim
Sair de um programaNãoSim
Abrir um arquivoNãoSim

Como funciona uma syscall:

  1. Você coloca um número da syscall em rax (informa ao sistema operacional o que você quer)
  2. Você coloca argumentos em outros registradores (rdi, rsi, rdx, etc.)
  3. Você executa a instrução syscall
  1. A CPU salta para o kernel do sistema operacional
  2. O sistema operacional executa a solicitação
  3. O sistema operacional devolve o controle ao seu programa

Analogia:

Pense em uma chamada de sistema como ligar para um órgão público:

EtapaAnalogiaEm assembly
1Decida de qual serviço você precisaEscolha o número da chamada de sistema (coloque em rax)
2Preencha os formuláriosColoque os argumentos nos registradores
3Envie a solicitaçãoExecute syscall
4O órgão público processa a solicitaçãoO kernel do sistema operacional realiza o trabalho
5Receba o resultado de voltaO programa continua

Syscalls que você aprenderá neste curso:

SyscallNúmeroO que ele fazCapítulo
exit60Encerra o programaCapítulo 4
write1Exibe texto na telaCapítulo 5

A syscall mais importante por enquanto: <strong>exit</strong>

Sem exit, seu programa continuaria sendo executado para sempre ou travaria. Todo programa que você escrever deve terminar com uma syscall exit.

mov rax, 60    ; syscall number for exit
mov rdi, 0     ; exit code (0 = success)
syscall        ; ask the OS to exit

Experimente você mesmo

Esta lição não inclui um desafio de código.

quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Playground de Assembly