Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

gdt.asm (989B)


      1 default rel
      2 global load_gdt
      3 
      4 gdt_start:
      5 
      6 gdt_null:
      7     dq 0
      8 
      9 gdt_kernel_code:
     10     dw 0xffff
     11     dw 0
     12     db 0
     13     db 10011011b
     14     db 10101111b
     15     db 0
     16 
     17 gdt_kernel_data:
     18     dw 0xffff
     19     dw 0
     20     db 0
     21     db 10010011b
     22     db 11001111b
     23     db 0
     24 
     25 gdt_user_code:
     26     dw 0xffff
     27     dw 0
     28     db 0
     29     db 11111011b
     30     db 10101111b
     31     db 0
     32 
     33 gdt_user_data:
     34     dw 0xffff
     35     dw 0
     36     db 0
     37     db 11110011b
     38     db 11001111b
     39     db 0
     40 
     41 gdt_end:
     42 
     43 
     44 K_CODE_SEG equ gdt_kernel_code - gdt_start
     45 K_DATA_SEG equ gdt_kernel_data - gdt_start
     46 U_CODE_SEG equ gdt_user_code - gdt_start
     47 U_DATA_SEG equ gdt_user_data - gdt_start
     48 
     49 [bits 64]
     50 default rel
     51 
     52 section .data
     53 align 16
     54 gdtr:
     55     dw 0   ; Limit
     56     dq 0
     57 
     58 section .text
     59 global load_gdt
     60 load_gdt:
     61     cli
     62     mov [rel gdtr], di
     63     mov [rel gdtr+2], rsi
     64     lgdt [rel gdtr]
     65 
     66    push 0x08
     67    lea RAX, [rel .reload_CS]
     68    push RAX
     69    retfq
     70 
     71 .reload_CS:
     72    MOV   AX, 0x10
     73    MOV   DS, AX
     74    MOV   ES, AX
     75    MOV   FS, AX
     76    MOV   GS, AX
     77    MOV   SS, AX
     78    RET