Voltar à lista
Assembly x86-64Instruções

Controle de fluxo

cmp, jmp, je/jne, call, ret, loop…

Instruções

Decidem qual será a próxima instrução. O padrão é comparar (cmp/test), o que ajusta os flags, e então saltar de forma condicional. call e ret implementam chamadas de função usando a pilha.

InstruçãoOperandosDescrição
cmpa, bCalcula a − b só para ajustar os flags (não guarda o resultado).
testa, bFaz um AND lógico apenas para ajustar os flags. test rax, rax verifica se é zero.
jmplabelSalto incondicional para label.
je / jzlabelSalta se igual / zero (ZF = 1).
jne / jnzlabelSalta se diferente / não-zero (ZF = 0).
jg / jl / jge / jlelabelSalta em comparação COM sinal (>, <, ≥, ≤).
ja / jb / jae / jbelabelSalta em comparação SEM sinal (above / below).
calllabelChama uma função: empilha o endereço de retorno e salta.
retRetorna: desempilha o endereço de retorno para rip.
looplabelDecrementa rcx e salta para label se rcx ≠ 0.
um laço com cmp + salto condicional
; conta de 5 até 0
    mov     rcx, 5
.loop:
    ; ... corpo do laço aqui ...
    dec     rcx                 ; rcx = rcx - 1 (ajusta ZF)
    cmp     rcx, 0              ; compara rcx com 0
    jne     .loop               ; se rcx != 0, volta ao topo
    ; a execução segue aqui quando rcx chega a 0