- 论坛徽章:
- 0
|
在Linux源代码head.S中有如下代码:
ENTRY(startup_32)
/*
* Set segments to known values.
*/
cld
lgdt boot_gdt_descr - __PAGE_OFFSET
movl $(__BOOT_DS),%eax
movl %eax,%ds
movl %eax,%es
movl %eax,%fs
movl %eax,%gs
/*
* Clear BSS first so that there are no surprises...
* No need to cld as DF is already clear from cld above...
*/
xorl %eax,%eax
movl $__bss_start - __PAGE_OFFSET,%edi
movl $__bss_stop - __PAGE_OFFSET,%ecx
subl %edi,%ecx
shrl $2,%ecx
rep ; stosl
问题1:ENTRY(startup_32)指明了linux 32位代码的入口,是否意味着遇到ENTRY(startup_32)就转到startup_32那里运行么?startup_32这个标号的生命到底有什么作用?
问题2:boot_gdt_descr,__bss_start 和__bss_stop 说是在保护模式下声明的变量,但是我怎么区分他是在实模式下声明的变量还是在保护模式下声明的变量呢? |
|