欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

30_OS 第1天 从计算机结构到汇编程序入门

程序员文章站 2022-05-12 13:40:37
...

第1天 从计算机结构到汇编程序入门

2019.12.27

1. 二进制编辑器

  • 下载Bz1621.zip

  • 编写helloos.img

    30_OS 第1天 从计算机结构到汇编程序入门

    其大小为147560字节(92160*16字节)。

    30_OS 第1天 从计算机结构到汇编程序入门

2. tolset文件夹

  • ./tolset/z_new_w文件夹下!cons_9x.bat

    command
    

    注:对于win10,个人认为,此文件没用。

  • ./toolset/z_new_w文件下!cons_nt.bat

    cmd.exe
    

    此文件的作用是打开命令提示符(终端)。

    注:个人认为此文件也没什么用

3. helloos0文件夹

  • 文件列表

    30_OS 第1天 从计算机结构到汇编程序入门

    注:!cons_9x.bat和!cons_nt.bat完全可以删除。

  • install.bat

    ..\z_tools\imgtol.com w a: helloos.img
    
    ..\z_tools\imgtol.com:调用工具imgtol.com,w和a是参数,helloos.img文件输入。

    注:此文件是用于将软件安装到软盘上的。我们使用虚拟机,因而此文件也没什么用。

  • run.bat

    copy helloos.img ..\z_tools\qemu\fdimage0.bin  
    ..\z_tools\make.exe	-C ../z_tools/qemu
    
    这个使用QEMU启动helloos.img的。

4. 使用VMware打开helloos.img
  打开VMware->新建虚拟机
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门
  30_OS 第1天 从计算机结构到汇编程序入门

5. 无论CPU如何发展,CPU只能处理电信号。

6. 汇编程序

  • 编写汇编程序,用它来生成和helloos.img完全一样的helloos.img。使用的汇编语言编译器是nask(模仿著名汇编器NASM,并在此基础上优化)。

  • 编写helloos.nas汇编文件

    DB	0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f
    DB	0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00
    DB	0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00
    DB	0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
    DB	0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff
    DB	0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f
    DB	0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41
    DB	0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00
    RESB	16
    DB	0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
    DB	0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
    DB	0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
    DB	0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
    DB	0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65
    DB	0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72
    DB	0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00
    RESB	368
    DB	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
    DB	0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    RESB	4600
    DB	0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    RESB	1469432
    
  • DB指令:是data byte的缩写,也就是往文件里面直接写入1个字节的指令。DB(小写db也行)可以做出任何数据。
    汇编语言可以做出来任何文件。

  • RESB指令:是reserve byte的缩写,如果想要从现在的地址开始空出10个字节来,可以写成RESB 10,意思是我们预约了10个字节。nask不仅仅是把指定的地址空出来,它还会在空出来的地址上自动填入0x00。

7. helloos1文件夹下的asm.bat

  • asm.bat

    ..\z_tools\nask.exe helloos.nas helloos.img
    

    使用nask.exe汇编语言工具,将helloos.nas源文件编译成helloos.img文件。

8. helloos2下经过加工润色的helloos.nas文件

  • helloos.nas
    30_OS 第1天 从计算机结构到汇编程序入门
    • ; 注释命令
    • DB命令的新用法:直接写字符串。在写字符串的时候,汇编语言会自动地查找字符串中每一个字符对应的编码,然后把它们一个字节一个字节地排列起来。这个功能非常方便,也就是说,当我们想要变更输出信息的时候,就再也不用自己去查字符编码表了。
    • DW指令:data word的缩写,word在汇编里面表示16位,也就是2字节。
    • DD指令:data double-word的缩写,double_word表示32位,也就是4字节。DW和DD是DB指令的“堂兄弟”。
    • RESB 0x1fe-$:$表示一个变量,可以告诉我们这一行现在的字节数。在此程序中,我们已经在前面输出了132字节,所以这里的$就是132。因此nask先用0x1fe减去132,得到378这一结果,然后连续输出378个字节的0x00。为什么不直接写378,而非要用$呢?这是因为如果将显示信息从“hello world”改成“hello histranger”的话,中间输出0x00的字节数也会相应发生变化。我们必须保证软盘中的第510字节(即0x1fe字节)开始的地方是55 AA。在程序中使用$可以自动计算需要多少个字节的0x00。不过,现在显示的信息不能支持汉字。

9. 几个专业术语

  • TAB=4
      设置TAB键的宽度为4。
  • FAT12格式
      软盘的个数
  • 启动区
      Boot sector。软盘第一个的扇区为启动区。计算机读写软盘的时候,以512字节为一个单位进行读写,因此,软盘的512字节就成为1个扇区。一张软盘的空间共有1440KB,也就是1474560字节,即共有2880个(1474560/512),即一张软盘有2880个扇区。
      计算机首先从最初的第一个扇区开始读软盘,然后检查这个扇区最后的2个字节的内容。如果最后这2个字节不是55 AA,计算机会认为这张盘上没有所需的启动程序,就会报告一个不能启动的错误。至于为什么是55 AA,这是当初设计者设计的,原因和1+1=2的原因差不多。如果计算机确认了第一个扇区的最后两个字节正好是55 AA,那么它就认为这个扇区的开头是启动程序,并开始执行这个程序。
  • IPL
      Initial program loader的缩写。启动程序加载器。启动区只有区区的512字节,实际的操作系统不可能像helloos这样小。几乎所有的操作系统,都是把加载操作系统本身的程序放在启动区中。有鉴于此,有时,启动区也被叫做IPL。IPL的名字长度必须是8字节,不够8字节需要补上空格。
  • 启动
      boot。bootstrap的缩写。

10. 不是10

    二零一九即将过去
    像是结束一段还未开始的爱情
    去年的今天的现在
    我又在做什么呢

    黑夜穷困潦倒
    流浪时遇见了长在树上的月亮
    月亮说她自己是天上的麋鹿
    黑夜深信不疑

    二零二零即将到来
    像是开始一段已经结束的爱情
    明年的今天的现在
    我又在做什么呢

    当黑夜触摸到那些麋鹿
    树的魅影以及月亮的娇小
    都变得
    让黑夜毫无兴致
                                                    2019.12.27 23:31