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ção | Operandos | Descrição |
|---|---|---|
| cmp | a, b | Calcula a − b só para ajustar os flags (não guarda o resultado). |
| test | a, b | Faz um AND lógico apenas para ajustar os flags. test rax, rax verifica se é zero. |
| jmp | label | Salto incondicional para label. |
| je / jz | label | Salta se igual / zero (ZF = 1). |
| jne / jnz | label | Salta se diferente / não-zero (ZF = 0). |
| jg / jl / jge / jle | label | Salta em comparação COM sinal (>, <, ≥, ≤). |
| ja / jb / jae / jbe | label | Salta em comparação SEM sinal (above / below). |
| call | label | Chama uma função: empilha o endereço de retorno e salta. |
| ret | — | Retorna: desempilha o endereço de retorno para rip. |
| loop | label | Decrementa 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