Linux0.11第一回最开始的两行代码
www.041799.com|时间:2022-09-29 16:09|责任编辑:苏小糖|来源: IT之家 阅读量:16630
从这篇文章开始,你将跟随我进入这个操作系统的梦想之旅!
不用担心,每一章的内容都会很少,不用带着沉重的负担去学习像读小说一样跟我读
话不多说,直奔主题当你按下开机键,主板上预先写好的固件程序BIOS会将硬盘引导区的512字节数据原封不动的复制到内存中的0x7c00,跳转到那个位置执行
引导区的定义非常简单只要硬盘中0盘0通道1扇区512字节的后两个字节分别是0x55和0xaa,BIOS就会认为是引导区
所以对于我们理解操作系统来说,此时的BIOS只是一个代码搬运工,将512字节的二进制数据从硬盘运送到内存中所以作为操作系统的开发者,只需要将操作系统的初始代码编译存储在硬盘的磁盘0,通道0,扇区1即可之后,BIOS会帮我们把它放在内存里,跳过去执行
Linux—0.11的初始代码就是这个用汇编语言写的bootsect.s,位于boot文件夹下。
通过编译,这个bootsect.s会被编译成二进制文件,存储在引导区的第一个扇区。
然后就像刚才说的,会从BIOS移到内存0x7c00,CPU从这个位置开始,继续无脑的执行一条又一条语句。
那么我们的梦想之旅就从这个文件的第一行代码开始吧!
movax,0x07c0movds,ax
好了,先看两行。
这段代码是用汇编语言编写的,这意味着将值0x07c0复制到ax寄存器中,然后将ax寄存器中的值复制到ds寄存器中实际上,所有这些折腾的结果是,这个寄存器ds中的值变成了0x07c0
Ds是一个16位段寄存器,它专门代表数据段寄存器,并在寻址存储器时充当段基址你什么意思
movax,
实际上相当于
movax,
默认添加Ds,这意味着在ds的这一段的基址,未来偏移0x0001个单位,并将该位置的存储器数据复制到ax寄存器中。
打个比喻,你跟朋友商量一下去哪里玩比较好你说天安门广场,南锣鼓巷,颐和园等等都是偏置地址,省略了北京的基址
当然,你可以说北京的天安门广场和北京的南锣鼓巷,每次都加上前缀北京但是,如果你提前和朋友约定好,我下面说的地方都是北京的,那你就不用每次都背北京二字了方便吗
这是数据段寄存器ds的功能描述一个内存地址很方便,可以省略一个基址这没什么神奇的
ds : 0x0001
北京:南锣鼓巷
看,这个ds是赋给0x07c0的由于x86要在16位实模式下访问20位地址线的历史因素,段基址必须先左移4位然后0x07c0左移四位为0x7c00,与BIOS加载此代码的存储器地址0x7c00完全相同
也就是说后面写的代码和里面访问的数据的内存地址都默认加0x7c00,然后在内存中寻址。
为什么统一加数字0x7c00这很容易解释BIOS规定,当操作系统代码加载到内存0x7c00时,里面的各种数据自然会偏移这么多因此,将数据段寄存器ds设置为该值便于将来通过该基地址访问存储器中的数据
好了,快速消化前面的知识,那么这篇文章就结束了,只有两行代码,小知识,我不骗你。
我希望你能做到可以通过BIOS将操作系统代码加载到内存0x7c00中,我们可以通过mov指令将默认数据段寄存器ds寄存器的值改为0x 07c 00,方便以后的基址寻址这两件事在你脑子里是认可的,没有疑问,方便后面继续
我们身后的世界越来越精彩欲知后事如何,且听下回分解
。郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。
- 国庆假期天气:江南华南再迎高温天气强冷空气将
- 和讯SGI公司|英搏尔机会来了?初判三季度营收好于2021年同期,现
- 乐视控股商标“LE”、乐视手机“LeMobile”将被拍卖,总起拍价
- 小米RedmiNote11R5G手机通过认证:1299元起,搭载天玑
- 大兴区举办“孝满京城德润人心”重阳节主题文化活动
- 中信信托妥善化解云南水务项目债务风险
- 《开船模拟器2024》上架Steam,2024年才能玩到的船长航海冒
- 索尼宣布PlayStation独占游戏《麻布仔大冒险》10月27日登
- 欧洲电信运营商联合声明:谷歌、Meta等科技公司流量用太多,必须分担
- AMD展示锐龙7000系列核显功能:虽只有2CU,但视频解码和显示输
最新
精选
-
2022汽车下乡补贴价格表
很多人关注2022汽车下乡补贴,这是新政策。如果你有...
-
平价雪糕难觅?热销款10个卖
在炎热的夏天吃冰淇淋是一件很酷的事情。但最近有不少消...
-
协鑫电港一包多车未来3年覆盖
6月8日,GCL能科正式发布GCLTeleport系...