World's most popular travel blog for travel bloggers.

a program in assembly language to to move immediate data to Registers.

, , 3 comments

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
When the above code is compiled and executed, it produces the following result −
Enter a digit:
3
Please enter a second digit:
4
The sum is:
7
The program with hardcoded variables −
section  .text
   global _start    ;must be declared for using gcc
        
_start:             ;tell linker entry point
   mov   eax,'3'
   sub     eax, '0'
        
   mov   ebx, '4'
   sub     ebx, '0'
   add   eax, ebx
   add   eax, '0'
        
   mov   [sum], eax
   mov   ecx,msg 
   mov   edx, len
   mov   ebx,1    ;file descriptor (stdout)
   mov   eax,4    ;system call number (sys_write)
   int   0x80     ;call kernel
        
   mov   ecx,sum
   mov   edx, 1
   mov   ebx,1    ;file descriptor (stdout)
   mov   eax,4    ;system call number (sys_write)
   int   0x80     ;call kernel
        
   mov   eax,1    ;system call number (sys_exit)
   int   0x80     ;call kernel
        
section .data
   msg db "The sum is:", 0xA,0xD
   len equ $ - msg  
   segment .bss
   sum resb 1


3 comments:

  1. All these codes look very difficult, especially for me. Writing it, you don't have the right on a mistake, because you will be rewriting it all again.

    ReplyDelete
  2. I have been looking for these codes for the whole day. Fortunately, I have found them. I do appreciate that you have posted this information.

    ReplyDelete

Let us know your responses and feedback