%macro scall 4
mov rax,%1;
mov rdi,%2;
mov rsi,%3;
mov rdx,%4;
syscall
%endmacro
section .data
msg db "DECENDING ORDER ARRAY ", 10
msgLen equ $-msg
msg1 db "ASCENDING ORDER ARRAY ", 10
msg1Len equ $-msg1
space db " "
spaceLen equ $-msg
cnt db 5
temp1 db 0
section .bss
arr resb 15
num resb 3
temp resb 2
result resb 15
result1 resb 15
section .text
global _start
_start:
mov rbp, arr
nextnum:
scall 0,0, num,3
mov rcx,0
mov rax,0
mov rsi,num
up3:
mov cl,byte[rsi]
cmp cl,0aH
je packed
cmp cl,39h
jbe down3
sub cl,07h
down3:
sub cl,30H
rol al,4
add al,cl
inc rsi
jmp up3
packed:
mov byte[rbp],al
inc rbp
dec byte[cnt]
jnz nextnum
scall 1,1,msg,msgLen
mov cl, 5
loop1:
mov dl, 4
mov rsi, arr
loop2:
mov al, byte[rsi]
mov bl, byte[rsi+1]
cmp bl, al
jbe continue
XCHG [rsi],bl
mov [rsi+1],bl
continue:
inc rsi
dec dl
jnz loop2
dec cl
jnz loop1
mov rdi, arr
mov rsi,result
mov dl,10
call display
scall 1,1,result,15
scall 1,1,msg1,msg1Len
mov cl, 5
loop3:
mov dl, 4
mov rsi, arr
loop4:
mov al, byte[rsi]
mov bl, byte[rsi+1]
cmp bl, al
jg continue1
XCHG [rsi],bl
mov [rsi+1],bl
continue1:
inc rsi
dec dl
jnz loop4
dec cl
jnz loop3
mov rdi, arr
mov rsi,result1
mov dl,10
call display
scall 1,1,result1,15
exit:
mov rax, 60
mov rdi,0
syscall
display:
disp_loop:
mov cl, 2
mov al,[rdi]
up1:
rol al, 4
mov bl, al
and al, 0fh
cmp al, 09
jbe down1
add al, 07
down1:
add al, 30h
mov byte[rsi], al
mov al, bl
inc rsi
dec cl
jnz up1
mov byte[rsi],0AH
inc rsi
inc rdi
dec dl
jnz disp_loop
ret
To embed this project on your website, copy the following code and paste it into your website's HTML: