Tablas de salto en Assembly
Indexa direcciones en vez de encadenar comparaciones.
; A jump table: index into addresses instead of chaining compares.
global _start
section .data
ops: dq op_add2, op_double, op_square
section .text
_start:
mov rax, 6 ; input
mov rcx, 2 ; choose op_square
jmp [ops + rcx * 8]
op_add2:
add rax, 2
jmp done
op_double:
add rax, rax
jmp done
op_square:
imul rax, rax ; 36
done:
mov rdi, rax
mov rax, 60 ; exit code 36
syscall
Cómo funciona
dq op_add2, op_double, op_squareguarda tres direcciones.jmp [ops + rcx * 8]despacha en una instrucción.- Esto es a lo que compila un switch.
Palabras clave y builtins usados aquí
dqglobalraxrcxrdisection
El intento, en números
- Líneas
- 24
- Caracteres a escribir
- 423
- Tokens
- 64
- Ritmo de tres estrellas
- 55 tpm
Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 70 segundos.
Paso 4 de 4 en Control de flujo; paso 14 de 31 en Fundamentos del lenguaje.