add lab answers
This commit is contained in:
49
labcodes_answer/lab4_result/kern/init/entry.S
Normal file
49
labcodes_answer/lab4_result/kern/init/entry.S
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <mmu.h>
|
||||
#include <memlayout.h>
|
||||
|
||||
#define REALLOC(x) (x - KERNBASE)
|
||||
|
||||
.text
|
||||
.globl kern_entry
|
||||
kern_entry:
|
||||
# reload temperate gdt (second time) to remap all physical memory
|
||||
# virtual_addr 0~4G=linear_addr&physical_addr -KERNBASE~4G-KERNBASE
|
||||
lgdt REALLOC(__gdtdesc)
|
||||
movl $KERNEL_DS, %eax
|
||||
movw %ax, %ds
|
||||
movw %ax, %es
|
||||
movw %ax, %ss
|
||||
|
||||
ljmp $KERNEL_CS, $relocated
|
||||
|
||||
relocated:
|
||||
|
||||
# set ebp, esp
|
||||
movl $0x0, %ebp
|
||||
# the kernel stack region is from bootstack -- bootstacktop,
|
||||
# the kernel stack size is KSTACKSIZE (8KB)defined in memlayout.h
|
||||
movl $bootstacktop, %esp
|
||||
# now kernel stack is ready , call the first C function
|
||||
call kern_init
|
||||
|
||||
# should never get here
|
||||
spin:
|
||||
jmp spin
|
||||
|
||||
.data
|
||||
.align PGSIZE
|
||||
.globl bootstack
|
||||
bootstack:
|
||||
.space KSTACKSIZE
|
||||
.globl bootstacktop
|
||||
bootstacktop:
|
||||
|
||||
.align 4
|
||||
__gdt:
|
||||
SEG_NULL
|
||||
SEG_ASM(STA_X | STA_R, - KERNBASE, 0xFFFFFFFF) # code segment
|
||||
SEG_ASM(STA_W, - KERNBASE, 0xFFFFFFFF) # data segment
|
||||
__gdtdesc:
|
||||
.word 0x17 # sizeof(__gdt) - 1
|
||||
.long REALLOC(__gdt)
|
||||
|
||||
Reference in New Issue
Block a user