I am trying to write a program that accepts 2 digits as user input, and then outputs their sum. I keep getting segmentation error when trying to run program(I am able to input 2 digits, but then the program crashes). I already check answers to similar questions and many of them pointed out to clear the registers, which I did, but I am still getting a segmentation fault.
section .text
    global _main        ;must be declared for linker (ld)
    default rel
_main:                  ;tells linker entry point
   
   call _readData
   call _readData1
   call _addData
   call _displayData
   mov  RAX, 0x02000001 ;system call number (sys_exit)
   syscall
_addData:
    mov byte [sum], 0   ; init sum with 0
    lea EAX, [buffer]   ; load value from buffer to register
    lea EBX, [buffer1]  ; load value from buffer1 to register
    sub byte [EAX], '0' ; transfrom to digit
    sub byte [EBX], '0' ; transform to digit
    
    add [sum], EAX      ; increment value of sum by value from register
    add [sum], EBX      ; increment value of sum by value from 2nd register
    add byte [sum], '0' ; convert to ASCI  
    
    xor EAX, EAX        ; clear registers
    xor EBX, EBX        ; clear registers
    ret
_readData:
    mov RAX, 0x02000003
    mov RDI, 2
    mov RSI, buffer
    mov RDX, SIZE
    syscall
    ret
_readData1:
    mov RAX, 0x02000003
    mov RDI, 2
    mov RSI, buffer1
    mov RDX, SIZE
    syscall
    ret
_displayData:
    mov RAX, 0x02000004
    mov RDI, 1
    mov RSI, sum
    mov RDX, SIZE
    syscall
    ret
section .bss
  SIZE equ 4
  buffer: resb SIZE
  buffer1: resb SIZE
  sum: resb SIZE
I see that, unlike other languages I learned, it is quite difficult to find a good source /tutorial about programming assembly using nasm on x86_64 architecture. Is there any kind of walkthrough for beginners(so I do not need to ask on SO everytime I am stuck :D)
 
    