Menu
CoddyTech

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 na CPU. Mas e se você precisar fazer algo que a CPU não consegue fazer sozinha, como imprimir na tela, ler do teclado ou encerrar um programa?

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

O que é uma chamada de sistema?

Uma chamada de sistema (system call) é 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 chamada de sistema?
Somar 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 uma chamada de sistema funciona:

  1. Você coloca um número da chamada de sistema em rax (informa ao SO o que você quer)
  2. Você coloca os 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 realiza a solicitação
  3. O sistema operacional devolve o controle ao seu programa

Analogia:

Pense em uma chamada de sistema como se você estivesse entrando em contato com um órgão do governo:

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 governo processa a solicitaçãoO kernel do SO realiza o trabalho
5Receba o resultadoO programa continua

Chamadas de sistema que você aprenderá neste curso:

Chamada de sistemaNúmeroO que fazCapítulo
exit60Encerra o programaCapítulo 4
write1Imprime texto na telaCapítulo 5

A chamada de sistema mais importante por enquanto: exit

Sem exit, seu programa continuaria executando para sempre ou travaria. Todo programa que você escrever deve terminar com uma chamada de sistema exit.

mov rax, 60    ; número da syscall para exit
mov rdi, 0     ; código de saída (0 = sucesso)
syscall        ; solicita ao sistema operacional que encerre o programa

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