section .data
	msg db "Hello User!", 0ah
	msg5 db "GOODBYE: ",'$'
section .text
	global _start
	
_start:
	mov rax, 1
	mov rdi, 1
	mov rsi, msg
	mov rdx,13
	Syscall
	mov rax, 60
	mov rdi, 0
	syscall
	
		.MODEL SMALL
		.STACK 64
		.DATA
		
		;////PROMPT THE USER TO ENTER THEIR INPUT
MSG1 DB 'ENTER YOUR NAME: $'
BUFFER1 DB 100,?,100 DUP('$')

MSG2 DB 'ENTER YOUR FIRST NUMBER: $'
BUFFER2 DB 100,?,100 DUP('$')

MSG3 DB 'ENTER YOUR SECOND NUMBER: $'
BUFFER3 DB 100,?,100 DUP('$')

MSG4 DB 'ENTER YOUR THIRD NUMBER: $'
BUFFER4 DB 100,?,100 DUP('$')
		;TO DISPLAY OUTPUT
MSG11 DB 'YOUR NAME IS: $'
MSG22 DB 'YOUR FIRST NUMBER IS: $'
MSG33 DB 'YOUR SECOND NUMBER IS: $'
MSG44 DB 'YOUR THIRD NUMBER IS: $'

		.CODE
	MAIN PROC FAR
		MOV AX,@DATA
		MOV DS,AX
		
		LEA DX,MSG1	;DISPLAY ENTER YOUR NAME
		MOVAH,9
		INT 21H
		
		LEA DX,BUFFER1	;LOAD THE NAME ON DS:DX
		MOV AH,0AH		;INSTRUCTION TO STORE ON BUFFER1
		INT 21H
		
		MOV AH,2		;NEW LINE
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13		
		INT 21H
		
		LEA DX,MSG2		;DISPLAY ENTER FIRST NUMBER
		MOV AH,9
		INT 21h
		
		LEA DX,BUFFER2		;LOAD ON DS:DX
		MOV AH,0AH
		INT 21H
		
		MOV AH,2
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13		
		INT 21H
		
		LEA DX,MSG3		;DISPLAY ENTER SECOND NUMBER
		MOV AH,9
		INT 21h
		
		LEA DX,BUFFER3		;LOAD ON DS:DX
		MOV AH,0AH
		INT 21H
		
		MOV AH,2
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13		
		INT 21H
		
		LEA DX,MSG4		;DISPLAY ENTER THIRD NUMBER
		MOV AH,9
		INT 21h
		
		LEA DX,BUFFER4		;LOAD ON DS:DX
		MOV AH,0AH
		INT 21H
		
		MOV AH,2
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13		
		INT 21H
		
		;DISPLAY THE OUT PUT HERE
		
		LEA DX,MSG11
		MOV AH,9
		INT 21H
		
		;USE BUFFER+2 FOR THE OFFSET OF MSG11

		LEA DX,BUFFER1+2		;OFFSET IS START AT
		MOV AH,9
		INT 21H
		
		MOV AH,2		;NEW LINE
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13
		INT 21H
		
		;TO DISPLAY YOUR FIRST NUMBER
		
		LEA DX,MSG22
		MOV AH,9
		INT 21H
		
		LEA DX,BUFFER2+2		;DISPLAY YOUR FIRST NUMBER
		MOV AH,9
		INT 21H
		
		MOV AH,2
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13
		INT 21H
		
		; DO SIMILARLY
		
		LEA DX,MSG33
		MOV AH,9
		INT 21H
		
		LEA DX,BUFFER3+2
		MOV AH,9
		INT 21H
		
		MOV AH,2
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13
		INT 21H
		
		;TO DISPLAY YOUR THIRD NUMBER
		
		LEA DX,MSG44
		MOV AH,9
		INT 21H
		
		LEA DX,BUFFER4+2
		MOV AH,9
		INT 21H
		
		MOV AH,2
		MOV DL,10
		INT 21H
		
		MOV AH,2
		MOV DL,13
		INT 21H
		
		MOV AH,4CH
		INT 21H
		;TO FIND  AVERAGE OF 3 NUMBERS
DATA SEGMENT 
	SUM DB 01 DUP(?)			;START DATA SEGMENT
	AVG DB 01 DUP(?)			
DATA END
CODE SEGMENT
	START:
	MOV AX,DATA
	MOV DS,AX
	
	MOV AL,BUFFER2
	ADD AL,BUFFER3
	ADD AL,BUFFER4
	
	MOV ,0
	
	MOV DL,3
	DIV DL
	MOV AVG,DL
	
	MOVE AH,4CH
	INT 21H
	;SUBTRACTING LAST NUNBER
	 SUB BL, 30H       
       SUB AL, 30H       


       SUB DL, AL       

       ADD BL, 30H      

       MOV AL, BL      
       MOV AL, 2H
       INT 21H
	   
	   ;//GOODBYE MESSAGE
	   LEA DX, MSG5			;LOAD MESSAGE TO DX TO(GOODBYE)
	   MOV AH, 9H			;DISPLAY GOODBYE MESSAGE
	   INT 21H
	   
	   MOV AH, 0AH			;GOODBYE MESSAGE DISPLAYED WITH USER NAME
	   LEA DX, MSG1
	   INT 21H
	   
	   
	   MOVE AH,4CH
	   INT 21H				;INTERRUPT TO EXIT
	MAIN ENDP
			END MAIN 
by

Assembly Online Compiler

Write, Run & Share Assembly code online using OneCompiler's Assembly online compiler for free. It's one of the robust, feature-rich online compilers for Assembly language. Getting started with the OneCompiler's Assembly compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as Assembly and start coding.

About Assembly

Assembly language(asm) is a low-level programming language, where the language instructions will be more similar to machine code instructions.

Every assembler may have it's own assembly language designed for a specific computers or an operating system.

Assembly language requires less execution time and memory. It is more helful for direct hardware manipulation, real-time critical applications. It is used in device drivers, low-level embedded systems etc.

Syntax help

Assembly language usually consists of three sections,

  1. Data section

    To initialize variables and constants, buffer size these values doesn't change at runtime.

  2. bss section

    To declare variables

  3. text section

    _start specifies the starting of this section where the actually code is written.

Variables

There are various define directives to allocate space for variables for both initialized and uninitialized data.

1. To allocate storage space to Initialized data

Syntax

variable-name    define-directive    initial-value 
Define DirectiveDescriptionAllocated Space
DBDefine Byte1 byte
DWDefine Word2 bytes
DDDefine Doubleword4 bytes
DQDefine Quadword8 bytes
DTDefine Ten Bytes10 bytes

2. To allocate storage space to un-initialized data

Define DirectiveDescription
RESBReserve a Byte
RESWReserve a Word
RESDReserve a Doubleword
RESQReserve a Quadword
RESTReserve a Ten Bytes

Constants

Constants can be defined using

1. equ

  • To define numeric constants
CONSTANT_NAME EQU regular-exp or value

2. %assign

  • To define numeric constants.
%assign constant_name value

3. %define

  • To define numeric or string constants.
%define constant_name value

Loops

Loops are used to iterate a set of statements for a specific number of times.

mov ECX,n
L1:
;<loop body>
loop L1

where n specifies the no of times loops should iterate.

Procedures

Procedure is a sub-routine which contains set of statements. Usually procedures are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

procedure_name:
   ;procedure body
   ret