%macro scall 4
        mov rax,%1
        mov rdi,%2
        mov rsi,%3
        mov rdx,%4
        syscall
%endmacro
section .data

        m1 db "Enter Count of numbers: ",10
        l1 equ $-m1
        m2 db "Enter the numbers: ",10
        l2 equ $-m2
        m3 db "Largest Number is: ",10
        l3 equ $-m3
        m4 db " ",10
        l4 equ $-m4
        m5 db "Array Elements are: ",10
        l5 equ $-m5
section .bss

        cnt resb 3
        arr resb 17
        cnt1 resb 3
        cnt2 resb 3
        arr1 resb 100
        temp resq 1
        char_ans resb 16


section .text

        global _start

_start:

;accept count

        scall 1,1,m1,l1
        scall 0,0,arr,3

        mov rsi,arr
        mov rcx,2
        mov rdx,0
   up:
        rol dl,4
        mov al,[rsi]
        cmp al,39h
        jbe L1
        sub al,07h
  L1:
        sub al,30h
        add dl,al
        inc rsi
        loop up

        mov byte[cnt],dl
        mov byte[cnt1],dl
        mov byte[cnt2],dl

;accept array
	
        scall 1,1,m2,l2
        mov rbx,arr1
back:
        scall 0,0,arr,17

        mov rsi,arr

        mov rcx,16
        mov rdx,0
        mov rax,0
   up1:
        rol rdx,4

        mov al,[rsi]

        cmp al,39h
        jbe L2
        sub al,07h
  L2:
        sub al,30h

        add rdx,rax

        inc rsi

        dec rcx
        jnz up1

        mov [rbx],rdx

        add rbx,17
        dec byte[cnt]
        jnz back
	
	
;***********Displaying array elements*********************
        scall 1,1,m5,l5
        mov rbx,arr1
up4:	
        mov rcx,16
        mov rsi,char_ans
        mov rax,[rbx]
  up6:
        rol rax,4
        mov dl,al
        and dl,0Fh

        cmp dl,09h
        jbe nxt1
        add dl,07h
nxt1:
        add dl,30h

        mov [rsi],dl

        inc rsi
        dec rcx
        jnz up6

        scall 1,1,char_ans,16	
        scall 1,1,m4,l4

        add rbx,17
        dec byte[cnt2]
        jnz up4

;*******************Finding Largest Number**********************************
        mov rsi,arr1
        mov rax,[rsi]
        add rsi,17
  up2:
        mov rbx,[rsi]
        cmp rax,rbx
        jg next
        mov [temp],rax
        mov rax,rbx
        mov rbx,[temp]
	
    next:
        add rsi,17
        dec byte[cnt1]
        jnz up2

;***************************Displaying Largest Number*****************************
	
        mov rcx,16
        mov rsi,char_ans
   up3:
        rol rax,4
        mov dl,al
        and dl,0fh
        cmp dl,09h
        jbe nxt	
        add dl,07h
  nxt:
        add dl,30h
        mov [rsi],dl
        inc rsi
        dec rcx
        jnz up3

        scall 1,1,m3,l3
        scall 1,1,char_ans,16
        scall 1,1,m4,l4


		
        mov rax,60
        mov rbx,0
        syscall 
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