aboutsummaryrefslogtreecommitdiff
path: root/sort.asm
blob: d089dc922383139310d96a85c11c40e18781f07a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
; Copyright (c) 2023 Marvin Borner

global main
extern printf

bits 64

;;; main

main:
	push    rbp
	mov     ecx, size

loop:
	push    rcx
	call    thread
	pop     rcx
	dec     ecx
	jnz     loop

end:
	pop     rbp
	mov     rax, 0x3c
	mov     rdi, 0
	syscall ; exit

print:
	mov     rdi, format
	xor     rax, rax
	call    printf
	ret

thread:
	lea     rax, print
	mov     rsi, [array + (ecx - 1) * 4]
	call    thread_run
	ret

;;; utils

thread_run:
	push    rax
	mov     rax, 0x39
	syscall ; fork
	cmp     rax, 0
	mov     r10, rax
	pop     rax
	je      child
	mov     rax, r10
	ret

child:
	call    rax

	mov     rax, 0x3c
	mov     rdi, 0
	syscall ; exit

;;; 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