:: limine / common / protos / linux_32.asm_x86 897 B raw

1
section .data
2
3
align 16
4
linux_gdt:
5
    dq 0
6
7
    dq 0
8
9
    dw 0xffff
10
    dw 0x0000
11
    db 0x00
12
    db 10011011b
13
    db 11001111b
14
    db 0x00
15
16
    dw 0xffff
17
    dw 0x0000
18
    db 0x00
19
    db 10010011b
20
    db 11001111b
21
    db 0x00
22
23
  .end:
24
25
align 16
26
linux_gdt_ptr:
27
    dw (linux_gdt.end - linux_gdt) - 1
28
    dd 0
29
30
bits 32
31
32
section .text
33
34
global linux_spinup
35
linux_spinup:
36
    call .p0
37
  .p0:
38
    pop eax
39
    lea ebx, [eax - (linux_spinup.p0 - linux_gdt_ptr)]
40
    lea ecx, [eax - (linux_spinup.p0 - linux_gdt)]
41
    mov [ebx+2], ecx
42
43
    lgdt [ebx]
44
45
    push 0x10
46
    call .p1
47
  .p1:
48
    add dword [esp], .fj - .p1
49
    retfd
50
51
  .fj:
52
    mov eax, 0x18
53
    mov ds, eax
54
    mov es, eax
55
    mov fs, eax
56
    mov gs, eax
57
    mov ss, eax
58
59
    xor ebp, ebp
60
    xor edi, edi
61
    xor ebx, ebx
62
63
    mov esi, [esp+8] ; boot_params
64
65
    cld
66
67
    jmp [esp+4]
68
69
section .note.GNU-stack noalloc noexec nowrite progbits
tab: 248 wrap: offon