sys.s 876 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. .code32
  2. .text
  3. .global asm_switch_pd
  4. .type asm_switch_pd @function
  5. asm_switch_pd:
  6. movl 4(%esp), %eax
  7. movl %eax, %cr3
  8. ret
  9. .global asm_enable_paging
  10. .type asm_enable_paging @function
  11. asm_enable_paging:
  12. cli
  13. // page directory address
  14. movl 4(%esp), %eax
  15. movl %eax, %cr3
  16. movl %cr0, %eax
  17. // SET PE, WP, PG
  18. orl $0x80010001, %eax
  19. movl %eax, %cr0
  20. ret
  21. .global current_pd
  22. .type current_pd @function
  23. current_pd:
  24. movl %cr3, %eax
  25. ret
  26. .global asm_load_gdt
  27. .type asm_load_gdt @function
  28. asm_load_gdt:
  29. cli
  30. leal 6(%esp), %eax
  31. lgdt (%eax)
  32. ljmp $0x08, $_asm_load_gdt_fin
  33. _asm_load_gdt_fin:
  34. movw 4(%esp), %ax
  35. cmpw $0, %ax
  36. je _asm_load_gdt_fin_ret
  37. _asm_load_gdt_fin_ret:
  38. ret
  39. .global asm_load_tr
  40. .type asm_load_tr @function
  41. asm_load_tr:
  42. cli
  43. movl 4(%esp), %eax
  44. orl $0, %eax
  45. ltr %ax
  46. ret