Binary 用二进制代码编写整个操作系统有什么好处吗?

Binary 用二进制代码编写整个操作系统有什么好处吗?,binary,Binary,用二进制代码编写整个操作系统有什么好处吗 我问这个问题的原因是因为我想知道,完全用二进制代码编写操作系统是否会带来任何性能上的好处,如果你说不,你是否绝对肯定不会 我的另一个问题是,答案1你说没有人用二进制写,这是我想问的另一个问题,有没有办法知道如果没有人用二进制写,用二进制写是否真的没有好处?你可以用汇编语言写操作系统……我想你也可以用“二进制代码”写。如果你做得对,使用汇编语言可以比使用C语言获得性能优势——如果你不是一个好的汇编代码编写者,你也可以做相反的事情,使其效率大大降低。无论如何

用二进制代码编写整个操作系统有什么好处吗

我问这个问题的原因是因为我想知道,完全用二进制代码编写操作系统是否会带来任何性能上的好处,如果你说不,你是否绝对肯定不会


我的另一个问题是,答案1你说没有人用二进制写,这是我想问的另一个问题,有没有办法知道如果没有人用二进制写,用二进制写是否真的没有好处?

你可以用汇编语言写操作系统……我想你也可以用“二进制代码”写。如果你做得对,使用汇编语言可以比使用C语言获得性能优势——如果你不是一个好的汇编代码编写者,你也可以做相反的事情,使其效率大大降低。无论如何,完全在汇编中编写操作系统将是相当困难的(虽然并非不可能,但以前已经完成过)


然而,用“二进制”编写并没有什么好处,因为程序集直接翻译成机器代码。

没有人用二进制编写。人们使用的最低级别语言是汇编代码。如果您对学习计算机如何使用二进制感兴趣,可以查看编译器如何将程序集转换为二进制,以及C编译器如何将代码转换为程序集和二进制


我想说的是,虽然有人可能会想出一个反例,但对二进制编码没有任何学习益处,或者说根本没有任何益处。

我碰巧有一个保存的reddit线程,它提出了一个与你类似的问题。它可以与相关的回答一起找到。我把它贴在下面。一些信息被遗漏了,因为我不能发布两个以上的链接,所以如果你愿意,你可以继续原始评论并找到它们。谢谢

监视器 首先,你需要一个最小的“监视器”——它可以让你在输入设备上输入一些二进制代码并跳转到它。下面是一个C版本,允许您以八进制输入代码:

typedef void (*function)();
char program[32];
int main() {
  char *t = program;
  unsigned i, n;
  for (;;) {
    for (i = 3; i; i--) {
      n = getch() - '0';
      if (n > 7) (*(function)program)();
      *t = *t * 8 + n;
    }
    t++;
  }
}
通过对
getch()
的BIOS调用,将其转换为8086机器代码,将其放在软盘的引导扇区上,您就成功了。GCC将其编译成12条指令,以及
main()
的函数序言。我认为在16位模式下是32字节。(可能BIOS调用会将其推送几个字节。)(我不记得BIOS中是否有允许您键入任意字节的alt键盘。如果是这样,您可能可以通过删除循环来简化上面的最小监视器程序。)

传统上,像这样的监视器首先内置在硬件中,稍后作为软件安装在ROM中。如果您想在很短的时间内使用它,它至少还需要一些功能:

  • 纠正键盘错误的能力
  • 能够查看您正在键入的内容(或者BIOS是否调用
    getche
    ?)
  • 显示内存内容的能力
  • 更改将新字节放入内存的地址的能力
  • 在某个中断向量上安装自己的能力,以便在程序遇到无限循环时可以返回到它们
因此,你的第一个任务是写一个功能更全面的监控程序,如果可能的话,写在纸上——否则,用电脑的某些部分将其刻在桌面上——然后非常小心地输入。您的第二个版本(带有退格)可能是40字节左右;现在,您需要输入120个八进制数字而不产生一个错误,后跟一些不是八进制数字的字符。如果你做到了这一点,你就会看到你的新程序开始生效,从而获得回报

您的下一个任务是通过添加上面列出的其余功能来增强monitor程序,使其真正可用。然后你想找到一种方法把它写入软盘驱动器

在这一点上,你希望这是一个5¼英寸的软盘驱动器,这样你就可以切割几个孔,使磁盘变成一个“flippy”:很有可能你会犯错误,并把你的第一个引导扇区写得一团糟,如果你这样做,你在余下的监狱里就不会有好运了

因此,您可以编写一个对BIOS磁盘I/O例程的调用,使用它将新的监视程序写入磁盘(希望在磁盘的背面),屏住呼吸,然后进行测试

现在,编写另一个磁盘I/O例程,检查其参数,以确保它没有写入引导扇区(或原始引导扇区,它位于磁盘向后的另一个明显位置),并认真启动系统

编辑:修复了初始监视器代码中的两个错误。伙计,如果我真的处于这种情况,我会非常混乱

汇编程序 您的下一个任务是使用显示器在内存中编写汇编程序。它不一定是一个具有诸如多字符助记符、完整指令集等奢侈品的花哨汇编程序;它只需要比以八进制键入x86代码有所改进。25或30个操作码的单字母区分大小写助记符,再加上ab要进入下一步,计算跳转偏移量的能力可能已经足够了。将汇编程序保存到未使用扇区中的软盘上。(你应该保留一张扇区中的内容的地图,必要时刻在桌子上。)

这也是您希望增强监视器程序以显示寄存器内容并能够单步执行的时间

此时,您已经实现了能够实现俄罗斯方块或Freecell的原始目标。接下来的下一步大致相当于在这个贫瘠的汇编程序中实现这些游戏之一,因此这不仅仅是实现该目标的一步。但是,如果您想获得具有图形用户界面的操作系统,r