阅 读 文 章

linux内核原代码boot.s部分的注释

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(不详) | 时间:2007-07-07 | 浏览:人次 ]

  boot.s
  |
  | boot.s is loaded at 0x7c00 by the bios-startup routines, and moves itself
  | out of the way to address 0x90000, and jumps there.
  |
  | It then loads the system at 0x10000, using BIOS interrupts. Thereafter
  | it disables all interrupts, moves the system down to 0x0000, changes
  | to protected mode, and calls the start of system. System then must
  | RE-initialize the protected mode in it's own tables, and enable
  | interrupts as needed.
  |
  | NOTE! currently system is at most 8*65536 bytes long. This should be no
  | problem, even in the future. I want to keep it simple. This 512 kB
  | kernel size should be enough - in fact more would mean we'd have to move
  | not just these start-up routines, but also do something about the cache-
  | memory (block IO devices). The area left over in the lower 640 kB is meant
  | for these. No other memory is assumed to be "physical", ie all memory
  | over 1Mb is demand-paging. All addresses under 1Mb are guaranteed to match
  | their physical addresses.
  |
  | NOTE1 abouve is no longer valid in it's entirety. cache-memory is allocated
  | above the 1Mb mark as well as below. Otherwise it is mainly correct.
  |
  | NOTE 2! The boot disk type must be set at compile-time, by setting
  | the following equ. Having the boot-up procedure hunt for the right
  | disk type is severe brain-damage.
  | The loader has been made as simple as possible (had to, to get it
  | in 512 bytes with the code to move to protected mode), and continuos
  | read errors will result in a unbreakable loop. Reboot by hand. It
  | loads pretty fast by getting whole sectors at a time whenever possible.
  | 1.44Mb disks: sectors = 18
  | 1.2Mb disks:
  | sectors = 15
  | 720kB disks:
  | sectors = 9
  .globl begtext, begdata, begbss, endtext, enddata, endbss
  .text
  begtext:
  .data
  begdata:
  .bss
  begbss:
  .text

BOOTSEG = 0x07c0
  INITSEG = 0x9000
  SYSSEG = 0x1000 | system loaded at 0x10000 (65536).
  ENDSEG = SYSSEG + SYSSIZE | SYSSIZE在Makefile中定义的 ^_^

entry start
  start:
   mov ax,#BOOTSEG | 现在应仍处在REAL MODE下.
   mov ds,ax | 移动自身从BOOTSEG:0000到INITSEG:0000
   mov ax,#INITSEG | 共512字节.
   mov es,ax | 那么BOOT.S处在0x90000-0x90200.
   mov cx,#256
   sub si,si
   sub di,di
   rep
   movw
   jmpi go,INITSEG
  go: mov ax,cs
   mov ds,ax | 将DS,ES,SS均设为0x9000,所有数据都以

论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 部分 注释 代码 ax mov the to al @@ 0x00eb is it we

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.