1515; See the License for the specific language governing permissions and
1616; limitations under the License.
1717global __arch_start:function
18+ global __gdt64_base_pointer
1819extern kernel_start
1920extern __multiboot_magic
2021extern __multiboot_addr
@@ -78,19 +79,16 @@ __arch_start:
7879 ;; enable long mode
7980 mov ecx , 0xC0000080 ; EFER MSR
8081 rdmsr
81- or eax , 1 << 8 ; Long Mode bit
82+ or eax , 1 << 8 ; Long Mode bit
8283 wrmsr
8384
8485 ;; enable paging
8586 mov eax , cr0 ; Set the A-register to control register 0.
86- or eax , 1 << 31
87+ or eax , 1 << 31
8788 mov cr0 , eax ; Set control register 0 to the A-register.
8889
89- mov eax , DWORD [ __multiboot_magic ] ; Preserve multiboot regs
90- mov ebx , DWORD [ __multiboot_addr ]
91-
9290 ;; load 64-bit GDT
93- lgdt [ GDT64.Pointer ]
91+ lgdt [ __gdt64_base_pointer ]
9492 jmp GDT64.Code:long_mode
9593
9694
@@ -112,7 +110,7 @@ GDT64:
112110 db 00000000b ; Granularity.
113111 db 0 ; Base (high).
114112 dw 0x0 ;; alignment padding
115- .Pointer: ; The GDT-pointer.
113+ __gdt64_base_pointer:
116114 dw $ - GDT64 - 1 ; Limit.
117115 dq GDT64 ; Base.
118116
@@ -130,12 +128,12 @@ long_mode:
130128
131129 ;; set up new stack for 64-bit
132130 push rsp
133- mov rsp , STACK_LOCATION
134- mov rbp , rsp
131+ mov rsp , STACK_LOCATION
132+ mov rbp , rsp
135133
136134 ;; geronimo!
137- mov rdi , rax
138- mov rsi , rbx
135+ mov edi , DWORD [ __multiboot_magic ]
136+ mov esi , DWORD [ __multiboot_addr ]
139137 call kernel_start
140138 pop rsp
141139 ret
0 commit comments