argc y argv en Assembly
En _start la pila guarda argc y luego los punteros argv.
; At _start the stack holds argc, then the argv pointers.
global _start
section .text
_start:
mov rdi, [rsp] ; argc: 1 when run bare
mov rsi, [rsp + 8] ; argv[0], the program path
; count argv[0]'s bytes into rcx
xor rcx, rcx
.scan:
cmp byte [rsi + rcx], 0
je .done
inc rcx
jmp .scan
.done:
add rdi, 100 ; argc + 100 = 101
mov rax, 60 ; exit code 101
syscall
Cómo funciona
[rsp]es argc;[rsp + 8]es argv[0].- El barrido mide el largo de la ruta del programa.
- Corrido pelado, argc es 1: código de salida 101.
Palabras clave y builtins usados aquí
byteglobalraxrcxrdirsirspsection
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 397
- Tokens
- 54
- Ritmo de tres estrellas
- 55 tpm
Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 59 segundos.
Paso 3 de 3 en Hablando con Linux; paso 28 de 31 en Fundamentos del lenguaje.