diff options
Diffstat (limited to 'sort.asm')
-rw-r--r-- | sort.asm | 33 |
1 files changed, 32 insertions, 1 deletions
@@ -24,7 +24,36 @@ end: mov rdi, 0 syscall ; exit +; this works sometimes (if numbers are good) +; uses busy loop +coolsleep: + mov rax, 0x4242424 + mov rcx, rsi + mul rcx +.loop: + dec rax + jnz .loop + ret + +; this works on most normal CPUs (if numbers are good) +; uses nanosleep syscall +boringsleep: + mov rax, 0x424242 + mov rcx, rsi + mul rcx + push qword rax ; ns + push qword 0 ; s + mov rax, 0x23 + mov rdi, rsp + xor rsi, rsi + syscall + add rsp, 16 + ret + print: + push rsi + call boringsleep ; or coolsleep + pop rsi mov rdi, format xor rax, rax call printf @@ -32,7 +61,7 @@ print: thread: lea rax, print - mov rsi, [array + (ecx - 1) * 4] + mov esi, [array + (ecx - 1) * 4] call thread_run ret @@ -58,6 +87,8 @@ child: ;;; data +section .data + array: dd 3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3 size: equ ($-array)/4 format: db "%d", 10, 0 |