cmov en Assembly
Elige un valor desde las banderas sin ramificar.
; cmov picks a value from flags without a branch.
global _start
section .text
_start:
mov rax, 88 ; candidate a
mov rbx, 19 ; candidate b
cmp rax, rbx
cmovl rax, rbx ; if a < b, take b: branch-free min/max
mov rdx, 100
cmp rax, rdx
cmovg rax, rdx ; clamp to 100
mov rdi, rax ; max(88,19) clamped = 88
mov rax, 60 ; exit code 88
syscall
Cómo funciona
cmovlmueve solo si la comparación dijo menor.- Un segundo cmov recorta contra una cota superior.
- Min, max y clamp sin saltos tienen todos esta forma.
Palabras clave y builtins usados aquí
globalraxrbxrdirdxsection
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 404
- Tokens
- 49
- Ritmo de tres estrellas
- 55 tpm
Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 53 segundos.
Paso 4 de 4 en Bits y banderas; paso 18 de 31 en Fundamentos del lenguaje.