我的学习之旅(1) boot.s

49 篇文章 0 订阅
49 篇文章 0 订阅

 

2015.1.20 

目标: 看完赵炯的《linux内核完全注释》,尝试自己在x86下写一个简单的OS,然后移植网卡驱动,实现基本网络功能(ping)

bootloader:这部分有很多可以参考,主要的功能应该是:加载后面的setup.s文件做准备。

--编译工具:AS86和LD86

--源文件名:boot.s

 

代码:

;    功能:
;  1. 拷贝 boot.s 从 0x07c0:0000 到 0x9000:0000 
;  2. 加载 setup.s 到内存 0x9020:0000
;boot.s代码必须存放在磁盘的第一个扇区,且大小不能超过512字节。
;bios在每次启动后都会加载第一扇区内容到0x07c0:0000内存地址处


entry _start
 _start:

 ;当前cpu还处在16bits 实模式,只能访问0000:0000到ffff:ffff范围大小的地址 
 ;把0x7c00:0000地址起 512 bytes 拷贝到 0x9000:0000,然后继续执行

 ;源地址
 mov ax, #0x07c0
 mov ds, ax

 ;目的地址
 mov ax, #0x9000
 mov es, ax

 ;清si和di
 sub si, si
 sub di, di
 
 ;拷贝256次,每次2个字节
 mov cx, #256  ;
 rep 
 movw 

 
 ;拷贝完后可以跳到 0x9000:go地址继续执行下面的代码了
 jmpi go, 0x9000

 go:

 ;执行跳转指令后cs段的内容自动刷新为0x9000.
 mov ax, cs

[boot.s 待续]
 
 ;刷新ds,es,ss段寄存器为0x9000
 mov ds, ax
 mov es, ax
 mov ss, ax
 
 ;临时设置sp堆栈指针为:0x9000:ff00以便后面的函数调用
 mov sp, #0xff00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值