; Version : 2.0 ; Last update : 3/1/2019 ; Licence : GPLv3 ; Description : Ever wanted to print something 10000 times really fast? Well, this program does exactly that. (This is ~4x faster than what gcc -O3 -march=native outputs from a normal C implementation) section .data Install: db 'Install ' ;The first 8 bytes of the message Gentoo: db 'Gentoo!', 0xA ;The second 8 bytes of the message section .text global _start _start: xor ecx,ecx ;0 out the counter registor ALIGN 16 ;Align the stack to 16 bytes loop: inc ecx ;increment the counter every loop ;;Push the message to the stack, (needs to be done in reverse) push qword[Gentoo] push qword[Install] test ecx,8192 ;test for most signficant 1 bit in 10,000 je loop test ecx,1024 ;test for next most signficant 1 bit in 10,000 je loop cmp ecx,10000 ;check for full number when both tests pass jnz loop ;continue if number is not exact ;; e instead of r prefixes are used since that's faster. This is indeed a 64 bit syscall though. rsi=memory location to start printing, rdx=num of bytes to print mov eax,1 ;sys_write mov edi,1 ;fd = STDOUT_FILENO mov edx,160000 ;hardcoded num of bytes to print since we know how many times we print mov rsi,rsp ;the value of rsp is the start of where the text is, so we mov that to rsi for syscall syscall exit: mov eax,60 ;sys_exit xor edi,edi ;return 0 syscall ;do sys_exit