I have to create an assembly program using YASM on the i386 architecture (32 bits) that receives a text as a parameter and returns a text with the same text but with each line numbered.
Example:
00 this is what the final text should look like
01 all lines numbered
02 and the last line should have the amount of total lines
03 Total lines:3.
; $ yasm -f elf enum.asm
; $ ld -o enum enum.o
; $ ./fibonacci
%define stdout 1
section .data
    file_name db 'test.txt'
    new_file db 'resultado.txt'
    num db "00: ",4,
    numL equ $ - num
    bufferEntradaL dd 1
    salto db 0xa
section .bss
    descriptorEntrada resb 2
    bufferEntrada resb 2
    descriptorSalida resb 2
    descriptorEntrada resb 2
    punteroBuffer resb 2
    cant resb 2
section .text
global _start
abrirArchivoLectura: 
    ;Abre un archivo
    mov EAX, sys_open           ; Llamo a sys_open
    mov ECX, 0              ; Solo lectura
    mov EBX file_name       ; Nombre del archivo
    int 80h                 ; Llamo al sistema
    ret
abrirArchivoEscritura:
    mov EAX, sys_open           ; Llamo al sys_open
    mov ECX, 1              ; Modo solo escritura
    mov EBX new_file        ; Nombre del archivo
    int 80h                 ; Llamo al sistema
    ret
crearArchivoEscritura:
    mov EAX, sys_create
    mov EBX new_file
    mov ECX, 1  
    int 80h
    ret
leerArchivo:
    ;Lee un archivo
    mov EAX,  sys_read              ; Llamo a sys_read
    mov EBX,  [descriptorEntrada]       ; Descriptor del archivo
    mov ECX,  bufferEntrada         ; Buffer de entrada
    mov EDX,  bufferEntradaL        ; Tamaño del buffer
    int 80h                         ; Llamo al sistema
    ret
imprimirMensaje:
    ;Imprime un mensaje de ayuda
    mov EAX, sys_write          ; Llamo a sys_write
    mov EBX, stdout             ; Imprimir por pantalla 
    mov ECX, num            ; Mensaje a imprimir 
    mov EDX, numL           ; Longitud  
    int 0x80                ; Llamo al sistema
    jmp salirSinError           ; Sale sin error
imprimirSaltoPantalla:
    ;Imprime un salto de linea por pantalla 
    mov EAX, sys_write          ; Llamo a sys_write
    mov EBX, stdout             ; Imprimir por pantalla 
    mov ECX, salto              ; Mensaje a imprimir 
    mov EDX, 1              ; Longitud 
    int 0x80                ; Llamo al sistema
    ret
cerrarArchivoEntrada:
    ;Cierra el archivo de entrada
    mov EAX, sys_close          ; Llamo a sys_close
    mov EBX, [descriptorEntrada]        ; Muevo el descriptor de salida al                 registro EBX
    int 80h                 ; Llamo al sistema
    ret
cerrarArchivoSalida:
    ;Cierra el archivo de salida
    mov EAX, sys_close          ; Llamo a sys_close
    mov EBX, [descriptorSalida]     ; Muevo el descriptor de salida al registro EBX
    int 80h                 ; Llamo al sistema
    ret
leerHastaSaltoLinea:
    mov [punteroBuffer],ECX         ; Le asigna a la variable punteroBuffer el contenido del registro ECX
    mov [cant],EAX              ; Le asigna a la variable cant el contenido del registro EAX
    cmp cant,salto
    jne leerHastaSaltoLinea
loop:
_start:
    ;Comienza el programa
    call 
    call abrirArchivoLectura        ; Abre el archivo de entrada
    test EAX,EAX                ; Testea que el parametro ingresado por el usuario sea un archivo.txt
    js salirErrorArchivoEntrada     ; Si no es un archivo.txt sale con un error de archivo de entrada
    mov [descriptorEntrada],EAX     ; Guardo el descriptor del archivo de entrada
    call leerArchivo            ; Lee el archivo de salida
    call leerHastaSaltoLinea
salirErrorArchivoEntrada:
    ;Salir con error en archivo de entrada
    mov EAX,sys_exit            ; Llamo a sys_exit
    mov EBX, 2              ; Finalizo por error en el archivo de entrada
    int 0x80                ; Llamo al sistema
 
    