SYS_EXIT  equ 1
    SYS_READ  equ 3
    SYS_WRITE equ 4
    STDIN     equ 0
    STDOUT    equ 1
segment .data 
    msg db "Please enter a digit ", 0xA,0xD 
    len equ $- msg 
segment .bss
    number1 resb 2 
    number2 resb 2 
    result resb 1 
    result2 resb 1
segment .text 
    msg2 db "Please enter a second digit", 0xA,0xD 
    len2 equ $- msg2 
    msg3 db "The sum is: "
    len3 equ $- msg3
    msg4 db "The minus is: "
    len4 equ $- msg4
global _start 
 _start: 
    mov eax, SYS_WRITE   ; System write      
    mov ebx, STDOUT      ; System output   
    mov ecx, msg         ; What to write
    mov edx, len     ; Length to write
    int 0x80             ; Interupt Kernel      
    mov eax, SYS_READ    ; System read
    mov ebx, STDIN       ;
    mov ecx, number1 
    mov edx, 2
    int 0x80            
    mov eax, SYS_WRITE        
    mov ebx, STDOUT         
    mov ecx, msg2          
    mov edx, len2         
    int 0x80
    mov eax, SYS_READ  
    mov ebx, STDIN  
    mov ecx, number2 
    mov edx, 2
    int 0x80        
    call add
add:
    mov eax, SYS_WRITE         
    mov ebx, STDOUT         
    mov ecx, msg3          
    mov edx, len3         
    int 0x80
    ;load number1 into eax and subtract '0' to convert from ASCII to decimal
    mov eax, [number1]
    sub eax, '0'
    ; do the same for number2
    mov ebx, [number2]
    sub ebx, '0'
    ; add eax and ebx, storing the result in eax
    add eax, ebx
    ; add '0' to eax to convert the digit from decimal to ASCII
    add eax, '0'
    ; store the result in result
    mov [result], eax
    ; print the result digit
    mov eax, SYS_WRITE        
    mov ebx, STDOUT
    mov ecx, result         
    mov edx, 1        
    int 0x80 
    ret
minus:
    mov eax, SYS_WRITE         
    mov ebx, STDOUT         
    mov ecx, msg4          
    mov edx, len4         
    int 0x80
    ;load number1 into eax and subtract '0' to convert from ASCII to decimal
    mov eax, [number1]
    sub eax, '0'
    ; do the same for number2
    mov ebx, [number2]
    sub ebx, '0'
    ; add eax and ebx, storing the result in eax
    sub eax, ebx
    ; add '0' to eax to convert the digit from decimal to ASCII
    add eax, '0'
    ; store the result in result
    mov [result2], eax
    ; print the result digit
    mov eax, SYS_WRITE        
    mov ebx, STDOUT
    mov ecx, result         
    mov edx, 1        
    int 0x80
    ret
mul:
   ;load number1 into eax and subtract '0' to convert from ASCII to decimal
    mov al, [number1]
    sub al, '0'
    ; do the same for number2
    mov bl, [number2]
    sub bl, '0'
    ; add eax and ebx, storing the result in eax
    mul bl
    ; add '0' to eax to convert the digit from decimal to ASCII
    add al, '0'
    ; store the result in result
    mov [result], al
    ; print the result digit
    mov eax, SYS_WRITE        
    mov ebx, STDOUT
    mov ecx, result         
    mov edx, 1        
    int 0x80
    ret
exit:    
    mov eax, SYS_EXIT   
    xor ebx, ebx 
    int 0x80
The above code is what i have done so far, I tried to add the numbers but add function seems to be called twice as shown in the picture below. What am i trying to do is to add, subtract, multiply and divide the two numbers. How can i do that and when i try to add 2 numbers sometimes it gave me this output Segmentation fault.
 
    