Aprender / Lição 7

Comparações e desvios

Lição 7 de 12Iniciante10 min
Laboratório · 07 / 12

CMP: compare sem alterar

Seu robô-guia

RAX guarda 5. Compare RAX com 5 e confira se o valor guardado mudou.

Blocos

Seu programa

1 instrução
  1. 01 MOV
    mov rax, 5

Resultado

PROCESSADORx86-64
RAX64 bits—
RBX64 bits—
RCX64 bits—

Aguardando suas instruções

ZF · indicador de zero—

Simulador didático · blocos equivalem a instruções Intel/NASM. Não executa Assembly nativo.

Entender melhor

CMP faz uma subtração “de teste” e não guarda o resultado. RAX continua 5; ZF ligou porque eram iguais.

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 completa
Entender melhor · Comparações e desvios
O que você vai aprender

Entender como CMP e JE permitem escolher um caminho.

Escolhendo o próximo passo

Até aqui seguimos instruções em sequência. Um desvio muda qual instrução será executada em seguida. Um rótulo nomeia o destino desse desvio.

CMP compara dois operandos como uma subtração, mas não grava o resultado neles. Ela atualiza flags. A flag de zero, chamada ZF, é ativada quando os valores comparados são iguais.

Desviar quando for igual

JE significa “salte se igual”. Depois de CMP, JE consulta a flag de zero para decidir se vai ao rótulo. JMP é um salto incondicional: ele sempre muda o caminho.

Não coloque uma operação que modifica as flags entre CMP e o salto sem compreender o efeito. Aqui fazemos a comparação e o desvio um após o outro.

Um exemplo, passo a passo

Exemplo comentadox86-64 · Intel / NASM · Linux
; Trecho x86-64 · Intel / NASM · Linux
mov rax, 5
mov rbx, 0
cmp rax, 5
je igual
mov rbx, 1
jmp fim
igual:
    mov rbx, 2
fim:           ; fim do trecho, não encerra o processo

Entendendo cada passo

  1. CMP encontra valores iguais e ativa ZF.
  2. JE segue para igual, pulando a atribuição de 1.
  3. RBX recebe 2. O rótulo fim apenas marca uma posição; não é a chamada exit.
Para guardar

Uma comparação produz indicadores; o salto condicional consulta esses indicadores.

Revisão complementar

Previsão de resultado

Qual valor fica em RBX no fim do trecho?

Escolha uma resposta

Marcação opcional, salva apenas neste navegador. Clique novamente para desfazer.