Voltar à lista
Assembly x86-64Instruções

Instruções de sistema

syscall, int, sysret, cpuid, nop…

Instruções

Instruções privilegiadas ou de sistema. A mais importante é syscall, a porta de entrada para o kernel no x86-64 — usada tanto pelo Linux quanto pelos stubs Nt* do Windows.

InstruçãoOperandosDescrição
syscallTransição rápida para o kernel (ring 3 → ring 0). Destrói rcx (rip) e r11 (rflags).
sysretRetorna do kernel para o modo usuário (o par de syscall).
int 0x80Entrada de syscall legada de 32 bits no Linux; mais lenta que syscall.
int nDispara a interrupção/trap de número n (ex.: int3 = breakpoint).
cpuidConsulta os recursos e o modelo do processador.
rdtscLê o contador de timestamp em edx:eax.
nopNão faz nada; usado para alinhamento e padding de código.
hltPara o processador até a próxima interrupção (privilegiado, ring 0).
a instrução syscall em foco
; a mesma escrita da página de exemplo, com foco no syscall
    mov     rax, 1              ; nº da syscall: 1 = write
    mov     rdi, 1              ; fd = stdout
    lea     rsi, [rel msg]      ; ponteiro para o buffer
    mov     rdx, 3              ; nº de bytes
    syscall                     ; ring 3 -> ring 0; rcx e r11 são destruídos
    ; rax agora contém o retorno (bytes escritos, ou -errno)