Seu primeiro pequeno programa
Pequeno desafio
Começando do zero, calcule 5 + 3 − 2 em RAX e deixe uma cópia do resultado em RBX.
Blocos
Seu programa
0 instruçõesSeu primeiro passo começa aqui
Resultado
Aguardando suas instruções
Simulador didático · blocos equivalem a instruções Intel/NASM. Não executa Assembly nativo.
Entender melhor
Você combinou quatro instruções diferentes. RBX guarda uma cópia que não depende de mudanças futuras em RAX.
Este laboratório modela MOV, ADD, SUB, CMP, saltos de igualdade e pilha. Os registradores começam sem valor; a aritmética usa 64 bits sem sinal. Só ZF é representada, e cada execução recomeça do início. Repetições param após 200 passos. Não simula memória, outras flags, chamadas ao Linux ou um processador completo.
Consultar a lição completaEntender melhor · Seu primeiro pequeno programa
Ler um programa completo que calcula um valor e termina no Linux.
Juntando as peças
Vamos calcular 5 + 3 − 2 e usar o resultado, 6, como código de saída. Um código de saída é um número devolvido ao sistema operacional quando o programa termina. Ele não é texto mostrado na tela.
Este é um programa x86-64 para Linux, escrito na sintaxe Intel do NASM. Não precisa executá-lo para fazer o exercício. A plataforma não monta nem executa Assembly.
O sistema operacional entra em cena
A diretiva SECTION .text indica a seção de código. GLOBAL _start torna o rótulo _start visível ao vinculador. Um rótulo dá nome a uma posição do programa; _start é a entrada usada neste exemplo.
SYSCALL solicita um serviço ao Linux. Na interface de chamadas de sistema Linux x86-64, RAX contém o número do serviço; 60 corresponde a exit. RDI leva o primeiro argumento, neste caso o código de saída. Esse uso não é universal em outros sistemas.
Um exemplo, passo a passo
; x86-64 · Intel / NASM · Linux
section .text
global _start
_start:
mov rax, 5 ; começa com 5
add rax, 3 ; soma: 8
sub rax, 2 ; resultado: 6
mov rdi, rax ; salva 6 como código de saída
mov rax, 60 ; serviço exit do Linux x86-64
syscall ; pede ao sistema para encerrarEntendendo cada passo
- As três operações deixam RAX com 6.
- MOV RDI, RAX copia 6 antes de RAX receber o número 60.
- SYSCALL usa RAX = 60 e RDI = 6 para encerrar. O programa não imprime 6.
- Para experimentar fora do site, em Linux x86-64 com NASM e GNU ld: nasm -f elf64 exemplo.asm -o exemplo.o; ld exemplo.o -o exemplo; ./exemplo; echo $?. Os comandos são referência de uso, não um registro de execução.
Uma conta e uma chamada ao sistema são coisas diferentes. Salve o resultado antes de reutilizar o registrador.
Revisão complementar
Qual código de saída este programa solicita ao Linux?
Marcação opcional, salva apenas neste navegador. Clique novamente para desfazer.