]> Devi Nivas Git - cs3210-lab1.git/commitdiff
more comments in entryother.S
authorRobert Morris <rtm@csail.mit.edu>
Wed, 10 Aug 2016 15:35:28 +0000 (11:35 -0400)
committerRobert Morris <rtm@csail.mit.edu>
Wed, 10 Aug 2016 15:35:28 +0000 (11:35 -0400)
entryother.S
main.c

index 8a8a020864e357fa430685103cd0e23f6f459d59..4a791cf132ec87f49c676339f5c31605b041e7ba 100644 (file)
 # place to jump to (mpenter) in start-8, and the physical address
 # of entrypgdir in start-12.
 #
-# This code is identical to bootasm.S except:
-#   - it does not need to enable A20
-#   - it uses the address at start-4, start-8, and start-12
+# This code combines elements of bootasm.S and entry.S.
 
 .code16           
 .globl start
 start:
   cli            
 
+  # Zero data segment registers DS, ES, and SS.
   xorw    %ax,%ax
   movw    %ax,%ds
   movw    %ax,%es
   movw    %ax,%ss
 
+  # Switch from real to protected mode.  Use a bootstrap GDT that makes
+  # virtual addresses map directly to physical addresses so that the
+  # effective memory map doesn't change during the transition.
   lgdt    gdtdesc
   movl    %cr0, %eax
   orl     $CR0_PE, %eax
   movl    %eax, %cr0
 
 //PAGEBREAK!
+  # Complete the transition to 32-bit protected mode by using a long jmp
+  # to reload %cs and %eip.  The segment descriptors are set up with no
+  # translation, so that the mapping is still the identity mapping.
   ljmpl    $(SEG_KCODE<<3), $(start32)
 
-.code32
+.code32  # Tell assembler to generate 32-bit code now.
 start32:
-  movw    $(SEG_KDATA<<3), %ax
-  movw    %ax, %ds
-  movw    %ax, %es
-  movw    %ax, %ss
-  movw    $0, %ax
-  movw    %ax, %fs
-  movw    %ax, %gs
+  # Set up the protected-mode data segment registers
+  movw    $(SEG_KDATA<<3), %ax    # Our data segment selector
+  movw    %ax, %ds                # -> DS: Data Segment
+  movw    %ax, %es                # -> ES: Extra Segment
+  movw    %ax, %ss                # -> SS: Stack Segment
+  movw    $0, %ax                 # Zero segments not ready for use
+  movw    %ax, %fs                # -> FS
+  movw    %ax, %gs                # -> GS
 
   # Turn on page size extension for 4Mbyte pages
   movl    %cr4, %eax
diff --git a/main.c b/main.c
index 40facc444b4303125aaffe9966b55e81b61e0d08..732901548ddbfe23e3e768b033f91b4bdba87620 100644 (file)
--- a/main.c
+++ b/main.c
@@ -98,10 +98,11 @@ startothers(void)
   }
 }
 
-// Boot page table used in entry.S and entryother.S.
-// Page directories (and page tables), must start on a page boundary,
-// hence the "__aligned__" attribute.  
-// Use PTE_PS in page directory entry to enable 4Mbyte pages.
+// The boot page table used in entry.S and entryother.S.
+// Page directories (and page tables) must start on page boundaries,
+// hence the __aligned__ attribute.  
+// PTE_PS in a page directory entry enables 4Mbyte pages.
+
 __attribute__((__aligned__(PGSIZE)))
 pde_t entrypgdir[NPDENTRIES] = {
   // Map VA's [0, 4MB) to PA's [0, 4MB)