summaryrefslogtreecommitdiff
path: root/interface/crt0.s
blob: 65123b71dd29e5eb01e78a32013498bb7f547086 (plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
.global _start
.global myinit //temporary quickfix / test

_start:

// ALIGN stack

//push %ebx
//push %ecx

//cmp $0,_impure_ptr
//jne skipzero

//movl $0xf5000000, _impure_ptr
//mov  $0xf5000000,%ebx

//allzero: 
//movl $0, (%ebx)
//add $4, %ebx
//cmp $0xf5001000,%ebx
//jne allzero

//skipzero:

/*
mov _impure_ptr,%eax
mov $0xf5000000,%ebx

copy: 
mov (%eax),%ecx
mov %ecx,(%ebx)
add $4, %ebx
add $4, %eax
cmp $0xf5001000,%ebx
jne copy

*/

movl $0xf5000000, _impure_ptr

//call _init

# environment adress was passed on stack

pop %eax                      
mov %eax, environ

pop %ecx
pop %ebx

and $-16,%esp
sub $8,%esp

push %ebx
push %ecx

# call main (argc and argv are on the stack)
call main

// ALIGN stack
and $-16,%esp
sub $4,%esp

# push exit code and pass to _exit syscall
push %eax
call exit

# this should never be reached!
.wait:
    hlt
jmp .wait

myinit:
call _init
ret