Initial commit
This commit is contained in:
39
boot/gdt.S
Normal file
39
boot/gdt.S
Normal file
@@ -0,0 +1,39 @@
|
||||
.section .data
|
||||
gdt_start: # don't remove the labels, they're needed to compute sizes and jumps
|
||||
# the GDT starts with a null 8-byte
|
||||
.long 0x0 # 4 byte
|
||||
.long 0x0 # 4 byte
|
||||
|
||||
# GDT for code segment. base = 0x00000000, length = 0xfffff
|
||||
# for flags, refer to os-dev.pdf document, page 36
|
||||
gdt_code:
|
||||
.word 0xffff # segment length, bits 0-15
|
||||
.word 0x0 # segment base, bits 0-15
|
||||
.byte 0x0 # segment base, bits 16-23
|
||||
.byte 0b10011010 # flags (8 bits)
|
||||
.byte 0b11001111 # flags (4 bits) + segment length, bits 16-19
|
||||
.byte 0x0 # segment base, bits 24-31
|
||||
|
||||
# GDT for data segment. base and length identical to code segment
|
||||
# some flags changed, again, refer to os-dev.pdf
|
||||
gdt_data:
|
||||
.word 0xffff
|
||||
.word 0x0
|
||||
.byte 0x0
|
||||
.byte 0b10010010
|
||||
.byte 0b11001111
|
||||
.byte 0x0
|
||||
|
||||
gdt_end:
|
||||
|
||||
# GDT descriptor
|
||||
gdt_descriptor:
|
||||
.long gdt_end-gdt_start-1
|
||||
.long gdt_start
|
||||
//MISMATCH: " dw gdt_end - gdt_start - 1 "
|
||||
//MISMATCH: " dd gdt_start "
|
||||
|
||||
# define some constants for later use
|
||||
code_seg: .long gdt_code - gdt_start
|
||||
data_seg: .long gdt_data - gdt_start
|
||||
|
||||
Reference in New Issue
Block a user