《30天自制操作系统》避坑排雷指南和命令大全

前言

        《30天自制操作系统》是日本Coder川合秀实先生的著作,对于想了解操作系统原理或者有志于底层开发的同学们好处多多。近几日我开始阅读这本著作,顺便制作一个避坑排雷指南,防止在无用的事情上浪费时间,附带收集一下常用命令,方便自己同时分享出来方便他人。

使用指南

        这篇文章的推荐使用方法是:发现书里难懂的地方->根据页码查看避坑排雷指南->查看命令大全或知识点合集。

避坑排雷

坑点 页码 详细描述
文件路径的连接符不正确 全局 书里的文件路径连接符多使用的是’/’而实际上本人在Win7系统中发现应该是’\’,但又有部分路径确实应该是’/’,如果有错就多试几次吧!
文件路径中的’¥’无意义 全局 书里的文件路径很多都有’¥’这个字符,其实毫无意义,直接忽略掉即可,应该是印刷问题。
EDX、DX、DL到底什么关系 P82 书里对EDX、DX、DL之间的关系好像没仔细讲,特别是看到P82代码会比较懵,详细解释请参考知识点合集。
调色板色号为什么要除以4 P77、P79 注意写入RGB颜色时都除以了4,我在网上搜了半天又想了好久也不知道为什么,事实上不除以4完全可以正确运行,这让我感到更加奇怪,为啥除以4和不除以4表示的颜色一样?!明明色号都不一样了啊喂!这个问题真的不知道怎么回事,暂且搁置吧!看到一些人说除以4是一种亮度调整,我倒是没看出有什么区别。。。

汇编命令/语法大全

声明常量(EQU)

        语法:常量名 EQU 数值
        说明:声明一个常量,接下来可以用常量名指代该值,EQU是equals的缩写。
        举例:例如“COUNT EQU 1”相当于C语言里“#define COUNT 1”的作用,接下来“MOV CX,COUNT”在编译后就会直接变成“MOV CX,1”,这种声明常量的方式是不占据空间的。

汇编语言和C语言联合使用时的参数传递

        举例:

    _function:
        MOV ECX,[ESP+4]
        MOV AL,[ESP+8]
        MOV [ECX],AL
        RET

        汇编代码如上,除此函数主体内容之外,还需要写GLOBAL指令与C语言函数链接,写section分段提示划分出代码段等等。这些内容参考书P62左右内容和《最简单的汇编程序》即可。
        再看C代码

    void function(int addr, int data);

        如上,C代码中只需要加入这样的一行函数声明即可,编译器会帮你在汇编代码源文件中找到对应的函数主体。

        注意汇编代码的函数名必须是C代码中声明的函数名在开头加上一个’_’,这是规定啦。

        然后解释一下参数传递,ESP是extended stack pointer的意思,也就是扩展栈指针,是传入参数的地址变量(应该说跟传入参数的所在地址有直接关系),参数的存放地址依次是:

        第一个参数的存放地址:ESP+4
        第二个参数的存放地址:ESP+8
        第三个参数的存放地址:ESP+12
        以下略…

        也就是说function的第一个参数addr的值被存在了ESP+4这个地址上,[ESP+4]就可以取到这个值啦,所以上面的汇编代码会有“MOV ECX,[ESP+4]”这样的语句。

底层小知识合集

 EDX、DX、DL之间的关系

        stackOverflow上有人问过这个问题:点此链接,回答的非常好,其实DX就是指EDX的低16位,同理EDX也就是RDX的低32位,参见下面:

[76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210] bits
[                                  RDX                                  ]
                                    [                EDX                ]                 
                                                      [       DX        ]
                                                      [  DH    ][   DL  ]

资料推荐

        这里推荐一些学习资料:

  • https://akaedu.github.io/book/index.html 这是一本名为《Linux C编程一站式学习》的书籍,包括很多汇编基本语法知识等基本知识,可以随手查查。

你可能感兴趣的:(综合基础)