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
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.
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.
Assembly language usually consists of three sections,
Data section
To initialize variables and constants, buffer size these values doesn't change at runtime.
bss section
To declare variables
text section
_start
specifies the starting of this section where the actually code is written.
There are various define directives to allocate space for variables for both initialized and uninitialized data.
variable-name define-directive initial-value
Define Directive | Description | Allocated Space |
---|---|---|
DB | Define Byte | 1 byte |
DW | Define Word | 2 bytes |
DD | Define Doubleword | 4 bytes |
DQ | Define Quadword | 8 bytes |
DT | Define Ten Bytes | 10 bytes |
Define Directive | Description |
---|---|
RESB | Reserve a Byte |
RESW | Reserve a Word |
RESD | Reserve a Doubleword |
RESQ | Reserve a Quadword |
REST | Reserve a Ten Bytes |
Constants can be defined using
CONSTANT_NAME EQU regular-exp or value
%assign constant_name value
%define constant_name value
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.
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