极客时间《Linux0.11源码趣读》学习笔记day2

文章详细阐述了Linux0.11早期版本的启动代码bootsect.s如何被加载到启动区,随后由BIOS搬运到内存的0x7c00地址开始执行。这段汇编代码主要任务是设置数据段寄存器DS,以便在实模式下进行后续的内存访问。这一过程涉及了操作系统代码在硬盘和内存间的转移以及16位环境下特定的寻址机制。
摘要由CSDN通过智能技术生成

Linux0.11最开始的代码是用汇编语言写的bootsect.s,位于boot文件夹下。该文件通过编译后(被编译成二进制文件),存放在启动区的第一扇区
在这里插入图片描述

当我们把操作系统代码编译好后存放在硬盘的启动区中,开机后,BIOS 程序就会将代码搬运到内存的 0x7c00 位置,而 CPU 也会从这个位置开始,一条一条指令不断地往后执行
这里需要注意,BIOS只把启动区的512字节加载到内存,但操作系统代码并不是这512字节,操作系统的代码还在硬盘的其他扇区,这些就需要我们自己来处理

bootsect.s的前两行代码

会被编译并存储在启动区,然后搬运到0x7c00,之后也会称为cpu执行的第一条指令

mov ax,0x07c0
mov ds,ax

这两行汇编代码的意思是:把0x07c0这个值复制到AX中,再把AX中的值赋值到DS中
这两行代码执行完了就是DS指向0x7c00这个内存区域
(由于实模式下的寻址方式,这里DS中的值是0x07c0,而实际指向的值是0x7c00,即向左移动了4位)
现在硬件中就是这样的情况
在这里插入图片描述
简单总结一下,到现在学习的代码主要完成了这两步操作:第一步,BIOS 将操作系统代码加载到内存 0x7c00;第二步,通过 mov 指令将默认的数据段寄存器 ds 的值改为 0x07c0,方便以后的基址寻址方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值