Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

03|做好访问内存的最基础准备工作

你好,我是闪客。
这一讲我们要探索的问题是,操作系统是怎么为程序访问内存的方式做初步规划的?
上一讲咱们说到,操作系统的代码最开头的 512 字节的数据,先从硬盘的启动区移动到了内存 0x7c00 处,然后又立刻被移动到 0x90000 处,并且跳转到 0x90000 加上 go 这个标签所代表的偏移量。
那我们接下来,就继续把目光放在 go 这个标签的位置,跟着 CPU 执行的步伐往后看。
go: mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,#0xFF00
一眼望去,全都是 mov 操作,那就很好办了。这段代码的直接意思很容易理解,就是把 cs 寄存器的值分别复制给 dsesss 寄存器,然后又把 0xFF00 给了 sp 寄存器。
回顾下 CPU 寄存器的图解:
由此也可以看出,其实操作系统最开始这几行代码的难点并不在翻译,而是在于它要完成什么事情,而要理解它们要完成的事情,就需要计算机体系结构的知识,说白了就是指 Intel CPU 的使用说明。
如果你能把 Intel CPU 手册阅读一遍并且有个大体的认识,那这几行代码就不在话下了。
但对于大部分软件工程师来说,Intel CPU 手册还是过于底层了,所以建议你课后真正花时间去系统了解一下。这里你先听我往下讲就好了,研读 Linux0.11 源码需要用到的核心知识点我都会告诉你。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

操作系统在为程序访问内存做基础准备工作时,首先将代码从硬盘加载到内存中,并设置了代码段寄存器cs的值为0x9000,数据段寄存器ds的值也为0x9000,以便程序访问内存数据。同时,栈段寄存器ss被设置为0x9000,栈指针寄存器sp被设置为0xFF00,确定了栈顶地址为0x9FF00。这些操作为程序访问内存提供了基址和栈顶地址,为后续操作奠定了基础。通过设置这些寄存器的值,操作系统制定了程序访问代码、数据和栈的规则。总的来说,操作系统的基础准备工作就是为程序访问内存制定规则,包括设置基址和栈顶地址。这些工作是操作系统中最基础的准备工作,为程序的后续执行奠定了基础。文章通过讲解CPU访问内存的方式和寄存器的作用,帮助读者理解了操作系统为程序访问内存做的基础准备工作。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 志豪
    原文:(ss 和 sp 作为栈段寄存器和栈指针寄存器,分别被赋值为了 0x9000 和 0xFF00,由此计算出栈顶地址 ss:sp 为 0x9FF00) 疑问:0x9000是作为段基址左偏移四位加上偏移地址0xff00才得出的0x9ff00吗?

    作者回复: 是的呀,实模式下的物理地址计算方式

    2022-11-03归属地:北京
    2
    7
  • 小侠
    讲解很清晰,和当年DOS下学的MASM汇编很相似

    编辑回复: 谢谢,期待你学完第一部分这10讲~

    2022-11-07归属地:北京
    1
  • Geek_e5fdb7
    讲的好,期待后续更新。

    作者回复: 会的,五季

    2022-11-04归属地:北京
  • 永弓虽
    非常好!清晰明了简洁!

    作者回复: 感谢感谢

    2022-11-02归属地:北京
  • Geek_73c432
    0x9ff00 应该是说可以是栈顶也可以是栈底,因为这个栈目前没有内容。栈顶地址就是 sp 栈指针寄存器里的值,从高位到低位增长
    2022-11-10归属地:广东
    6
  • 陈婉仪
    2024年了,继续催更🙏
    2024-01-07归属地:广东
  • ileruza
    赶紧更新,我肯定买
    2022-12-10归属地:广东
  • NiceBlueChai
    为啥不直接从硬盘复制到0x90000,
    2022-11-14归属地:山东
    3
  • 初心
    看着真爽
    2022-11-11归属地:北京
  • 二十二桥枫别雨
    非常好,想催更了
    2022-11-09归属地:安徽
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部