typestar

call y ret en Assembly

call empuja la dirección de retorno; ret la saca y salta.

; call pushes the return address; ret pops and jumps back.
        global _start

        section .text
double:                         ; rdi -> rax = rdi * 2
        lea rax, [rdi * 2]
        ret

_start:
        mov rdi, 21
        call double             ; rax = 42
        mov rdi, rax
        call double             ; rax = 84

        mov rdi, rax
        mov rax, 60             ; exit code 84
        syscall

Cómo funciona

  1. double: es una etiqueta como cualquiera — call la vuelve función.
  2. lea rax, [rdi * 2] calcula sin tocar banderas.
  3. Dos llamadas encadenan: 21 a 42 a 84.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
330
Tokens
41
Ritmo de tres estrellas
60 tpm

Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 41 segundos.

Escribe este fragmento

Paso 2 de 3 en La pila; paso 20 de 31 en Fundamentos del lenguaje.

← Anterior Siguiente →