- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux内核原代码head.s部分的注释
linux内核原代码head.s部分的注释
/*
* head.s contains the 32-bit startup code.
*
* NOTE!!! Startup happens at absolute address 0 which is also where
* the page directory will exist. The startup code will be overwritten by
* the page directory.
*/
.text
.globl _idt,_gdt,_pg_dir
_pg_dir:
startup_32:
movl $0x10,%eax @@ds,es,fs,gs指向内核数据段
mov %ax,%ds
mov %ax,%es
mov %ax,%fs
mov %ax,%gs
lss _stack_start,%esp @@ds送ss esp 指向stack_start (在sched.c定义)
@@进入保护模式的堆栈段的第一次变化,很奇怪
@@为什么堆栈段也可正向增涨?
call setup_idt
call setup_gdt
movl $0x10,%eax # reload all the segment registers
mov %ax,%ds # after changing gdt. CS was already
mov %ax,%es # reloaded in setup_gdt @@ 有reload??
mov %ax,%fs
mov %ax,%gs
lss _stack_start,%esp
xorl %eax,%eax
1: incl %eax # check that A20 really IS enabled
movl %eax,0x000000
cmpl %eax,0x100000 @@这是怎么测的 0x100000为什么值,
@@明白,a20 not
enable,0x000000就是0x100000
je 1b
movl %cr0,%eax # check math chip
andl $0%eax # Save PG,ET,PE
testl $0x10,%eax
jne 1f # ET is set - 387 is present
orl $4,%eax # else set emulate bit
1: movl %eax,%cr0
jmp after_page_tables @@注意,用jmp 不call,不返回
/*
* setup_idt
*
* sets up a idt with 256 entries pointing to
* ignore_int, interrupt gates. It then loads
* idt. Everything that wants to install itself
* in the idt-table may do so themselves. Interrupts
* are enabled elsewhere, when we can be relatively
* sure everything is ok. This routine will be over-
* written by the page tables.
*/
setup_idt:
lea ignore_int,%edx
movl $0%eax
movw %dx,%ax /* selector = 0x0008 = cs */
movw $0x8E00,%dx /* interrupt gate - dpl=0, present */
@@ ignore_int 低16--ax 高16--edx高字
@@ 8e00--dx 8--eax高字
lea _idt,%edi
mov $256,%ecx
rp_sidt:
movl %eax,(%edi)
movl %edx,4(%edi)
addl $8,%edi
dec %ecx
jne rp_sidt
lidt idt_descr
ret
/*
* setup_gdt
*
* This routines sets up a new gdt and loads it.
* Only two entries
您可能关注的文档
最近下载
- 2020六西格玛黑带模拟测试题含答案五套试题.pdf VIP
- 溺水护理病例讨论ppt.pptx VIP
- 《限额以下工程建设项目交易管理规范》(DB3301T 0450-2024).pdf VIP
- CITIZEN西铁城手表机芯编号F900说明手册.pdf VIP
- 曼透平汽轮机说明书.pdf
- 经典红歌老歌100首歌曲曲目.doc VIP
- 加强矿山现场安全管理和重点时段安全管控应知应会考试练习试题及答案.doc
- 年产1500吨硅酮环保密封胶建设项目环评(新版环评)环境影响报告表.pdf VIP
- 慢性肾脏病高钾血症风险评估及管理专家建议(2020版)梅长林、陈晓农、郝传明,等(发布时间:2020-12).pdf VIP
- 快速推算年月日時干支法(彩色版).doc VIP
文档评论(0)