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.