Desvios condicionais
Escolha um caminho
O programa está quase pronto. Faça RBX receber 2 quando RAX for igual a 5.
Blocos
Seu programa
7 instruções- 01 MOV
mov rax, 5 - 02 CMP
cmp rax, 5 - 03 MOV
mov rbx, 1 - 04 JMP
jmp fim - 05 RÓTULO
igual: - 06 MOV
mov rbx, 2 - 07 RÓTULO
fim:
Resultado
Aguardando suas instruções
Simulador didático · blocos equivalem a instruções Intel/NASM. Não executa Assembly nativo.
Entender melhor
JE consulta ZF. Como os valores eram iguais, o programa pulou para “igual” e ignorou o caminho alternativo.
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 · Desvios condicionais
Usar CMP e JE para fazer o programa escolher entre dois caminhos.
Uma decisão dentro do programa
Até agora, cada instrução levava sempre à seguinte. Um desvio condicional permite pular para outro ponto do programa apenas quando uma condição é verdadeira. É assim que um programa toma decisões simples.
No laboratório, um bloco “Marcar destino” dá nome a uma posição, como igual ou fim. O salto consulta o resultado da última comparação e decide se vai até esse nome ou se continua na linha de baixo.
JE, JNE e JMP
JE significa “salte se igual”: ele salta quando a flag ZF está ligada. JNE significa “salte se diferente”: ele salta quando ZF está desligada. JMP salta sempre, sem consultar nenhuma condição.
Um padrão comum é comparar, saltar se a condição valer e, no caminho alternativo, usar JMP para pular o trecho que não deve rodar. Assim, apenas um dos dois caminhos altera o resultado.
Um exemplo, passo a passo
; Trecho x86-64 · Intel / NASM · Linux
mov rax, 5
cmp rax, 5
je igual
mov rbx, 1
jmp fim
igual:
mov rbx, 2
fim:Entendendo cada passo
- CMP encontra valores iguais e liga ZF.
- JE vê ZF ligada e pula para igual, sem executar mov rbx, 1.
- RBX recebe 2. Se RAX valesse outro número, RBX receberia 1 e JMP pularia o trecho igual.
Um salto condicional depende da comparação feita logo antes dele.
Revisão complementar
Se RAX valesse 4 no exemplo, qual valor ficaria em RBX?
Marcação opcional, salva apenas neste navegador. Clique novamente para desfazer.