Phil 5 жил өмнө
parent
commit
79d14a1698
1 өөрчлөгдсөн 86 нэмэгдсэн , 0 устгасан
  1. 86 0
      add.asm

+ 86 - 0
add.asm

@@ -0,0 +1,86 @@
+SYS_EXIT  equ 1
+SYS_READ  equ 3
+SYS_WRITE equ 4
+STDIN     equ 0
+STDOUT    equ 1
+
+segment .data 
+
+   msg1 db "Enter a digit ", 0xA,0xD 
+   len1 equ $- msg1 
+
+   msg2 db "Please enter a second digit", 0xA,0xD 
+   len2 equ $- msg2 
+
+   msg3 db "The sum is: "
+   len3 equ $- msg3
+
+segment .bss
+
+   num1 resb 2 
+   num2 resb 2 
+   res resb 1    
+
+section	.text
+   global _start    ;must be declared for using gcc
+	
+_start:             ;tell linker entry point
+   mov eax, SYS_WRITE         
+   mov ebx, STDOUT         
+   mov ecx, msg1         
+   mov edx, len1 
+   int 0x80                
+
+   mov eax, SYS_READ 
+   mov ebx, STDIN  
+   mov ecx, num1 
+   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, num2 
+   mov edx, 2
+   int 0x80        
+
+   mov eax, SYS_WRITE         
+   mov ebx, STDOUT         
+   mov ecx, msg3          
+   mov edx, len3         
+   int 0x80
+
+   ; moving the first number to eax register and second number to ebx
+   ; and subtracting ascii '0' to convert it into a decimal number
+	
+   mov eax, [num1]
+   sub eax, '0'
+	
+   mov ebx, [num2]
+   sub ebx, '0'
+
+   ; add eax and ebx
+   add eax, ebx
+   ; add '0' to to convert the sum from decimal to ASCII
+   add eax, '0'
+
+   ; storing the sum in memory location res
+   mov [res], eax
+
+   ; print the sum 
+   mov eax, SYS_WRITE        
+   mov ebx, STDOUT
+   mov ecx, res         
+   mov edx, 1        
+   int 0x80
+
+exit:    
+   
+   mov eax, SYS_EXIT   
+   xor ebx, ebx 
+   int 0x80