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
double:es una etiqueta como cualquiera — call la vuelve función.lea rax, [rdi * 2]calcula sin tocar banderas.- Dos llamadas encadenan: 21 a 42 a 84.
Palabras clave y builtins usados aquí
globalraxrdisection
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.
Paso 2 de 3 en La pila; paso 20 de 31 en Fundamentos del lenguaje.