用大白话说操作系统(一)

好的,今天开始就用普通人的大白话聊两句操作系统相关的内容。

导论

咱也不管操作系统是啥玩意儿了,用过电脑的都知道吧,就是平常说的windows,mac,linux知道一个就行了,咱们从今天起就把这玩意从内到外扒拉一遍儿。有时候可能懒得画图,大家见谅,话不多说,咱们现在开始。

启动时我在干嘛

大家好,我是Linux操作系统,今天我想说说我是怎么呼吸第一口空气的(狗头)。现在我还是一张白纸,我要执行程序,但是内存上并没有数据,555~谁能帮助我呢?哪位好心人能帮帮我?
大家都知道主板上有一个写死的固件程序BIOS,开始时BIOS会把硬盘上启动区的512字节自己的数据都加载到内存区的0x7c00这个位置上。然后CPU从0x7c00这个位置上开始执行程序。(这下我开心了)

启动区的定义非常简单,只要硬盘中的 0 盘 0 道 1 扇区的 512 个字节的最后两个字节分别是 0x55 和 0xaa,那么 BIOS 就会认为它是个启动区。

mov ax,0x07c0
mov ds,ax
mov ax,0x9000
mov es,ax
mov cx,#256
sub si,si
sub di,di
rep movw

大家看到上面这两行是汇编语言写的,啥意思呢?
【前两行】mov是赋值的意思,也就是说把0x7c0这个数赋值给ax这个寄存器,然后再把寄存器赋值给段基址寄存器ds。
基址大家理解吧,就是比如说你是部门总监,我也是部门总监,但是你是腾讯的我是百度的。这个部门总监就是偏移量,而基址就是你开始的地方,通常程序中的地址是偏移量表示的,你跟你的同事说话总不能说我是腾讯的部门总监吧,一般来说都只说部门总监。从这里看程序和内存之间是好朋友,哈哈哈,知根知底,真正的地址是段基址+偏移量。
【下两行】跟前两行差不多意思,就是说es被赋值成了0x9000.
【往下一行】cx是一个计数的寄存器,默认记录循环次数,#256是十进制的表示方法,被赋值成256.
【往下两行】si(源变址寄存器),di(目标变址寄存器)都被清零,自己减自己可不是0吗哈哈
【最后一行】重复的做movw(每次移动一个字,即两个字节)
这回大家就奇怪了,从哪里移动到哪里呢?默认是从源变址到目的变址,之前说了这只是偏移地址,那么还要找到基址,也就是ds:si->es:di。
这些大家都明白了,这不就是把那512个字节移到了0x90000吗???好家伙啊,移这移那的,你逗我玩呢?!
各位看官别着急,我们自然是有原因的啦!!!!

OK,大家,今天的分享就到这里啦,我们下次再见,有问题欢迎留言讨论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙诙谐代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值