%macro print 2 mov rax,1 mov rdi,1 mov rsi,%1 mov rdx,%2 syscall %endmacro section .data msg db "Counting +ve and -ve elements of an array.",10 msglen equ $-msg msg1 db "Positive nos. are : " msglen1 equ $-msg1 msg2 db "Negetive nos. are : " msglen2 equ $-msg2 array dd 12345678h,723490ffh,570036f8h,88006789h,8a9f3680h,0a0dab23h,3bcd0200h pcnt db 0 ncnt db 0 section .bss dispbuff resb 2 section .txt global _start _start: print msg,msglen mov rsi,array mov rcx,07 again: bt dword[rsi],31 jnc pnxt inc byte[ncnt] jmp pskip pnxt: inc byte[pcnt] pskip: inc rsi inc rsi inc rsi inc rsi loop again print msg1,msglen1 mov bl,[pcnt] call disp_result print msg2,msglen2 mov bl,[ncnt] call disp_result mov rax,60 mov rdi,0 Syscall disp_result: mov rdi,dispbuff mov rcx,02 dispup1: rol bl,4 mov dl,bl and dl,0fh add dl,30h cmp dl,39h jbe dispskip1 add dl,07h dispskip1: mov [rdi],dl inc rdi loop dispup1 print dispbuff,2 ret