bootsect代码解析之system模块搬移

本文详细解析了bootsect如何将system模块从0x10000开始的64K内存处进行读取和搬移。通过分析read_it子调用的汇编函数,解释了读取过程中的逻辑,包括段寄存器设置、循环读取、扇区转换及内存管理。最后,介绍了读取完成后调用kill_motor关闭磁盘驱动器马达的步骤。
摘要由CSDN通过智能技术生成

下面继续来看bootsect部分如何搬移system模块到0x10000即64K内存处的:

首先将system段的地址0x1000存放到es段寄存器中,然后调用read_it子调用汇编函数。下面来看read_it都做了什么:

开始之前,我们先来回顾一下开头的一段话:

注意这里,linus说当前系统(这里指system模块)最大8*65536.这个值是64K*8=512K,那么这个512K是从哪里来的?

答案:system模块被加载到了0x10000处,而bootsect被加载到了0x90000处,那么中间就是0x80000字节空间即512K字节。

下面我们分段对整个读取system模块的代码进行分析:

首先,这里es寄存器的值为前面传入的0x1000,test语句就是将0x1000与0x0fff相与结果就是0,这个结果会影响到ZF标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值