typestar

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

  1. dq op_add2, op_double, op_square guarda tres direcciones.
  2. jmp [ops + rcx * 8] despacha en una instrucción.
  3. Esto es a lo que compila un switch.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 4 en Control de flujo; paso 14 de 31 en Fundamentos del lenguaje.

← Anterior Siguiente →