Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 哪种汇编程序最适合从头开始编写操作系统,并优先考虑执行性能?_Performance_Assembly_Operating System_Portability - Fatal编程技术网

Performance 哪种汇编程序最适合从头开始编写操作系统,并优先考虑执行性能?

Performance 哪种汇编程序最适合从头开始编写操作系统,并优先考虑执行性能?,performance,assembly,operating-system,portability,Performance,Assembly,Operating System,Portability,我在任何情况下都不适合编写操作系统,但这只是假设。 我想用汇编语言从头开始创建一个简单的操作系统。怀着远大的抱负,我希望它尽可能优化执行。我还希望代码对于多种体系结构(特别是x86和x64可以互换)具有相当的可移植性。我觉得有点简约主义,所以让我们扔掉软件“膨胀” 我要找的是一个符合这个标准的汇编程序。显然,我想要一个正式或非正式地被正式记录的文件,我需要它是众所周知的(即我不想在互联网撒哈拉中部找到)。 < P>在你指定的情况下,NASM可能是最好的选择。它有相当好的文档记录、相当广泛的使用和

我在任何情况下都不适合编写操作系统,但这只是假设。

我想用汇编语言从头开始创建一个简单的操作系统。怀着远大的抱负,我希望它尽可能优化执行。我还希望代码对于多种体系结构(特别是x86和x64可以互换)具有相当的可移植性。我觉得有点简约主义,所以让我们扔掉软件“膨胀”


我要找的是一个符合这个标准的汇编程序。显然,我想要一个正式或非正式地被正式记录的文件,我需要它是众所周知的(即我不想在互联网撒哈拉中部找到)。

< P>在你指定的情况下,NASM可能是最好的选择。它有相当好的文档记录、相当广泛的使用和大量的测试。它也是为数不多的可以直接生成原始二进制输出文件的软件之一,在这些软件中,大多数都需要您使用链接器来完成。对于操作系统本身来说,这并不是一个问题,对于引导加载程序来说,这是一个问题。但是(无论出于何种原因),大多数操作系统的用户自己也至少编写了一些玩具引导加载程序。

在您指定的情况下,NASM可能是最佳选择。它有相当好的文档记录、相当广泛的使用和大量的测试。它也是为数不多的可以直接生成原始二进制输出文件的软件之一,在这些软件中,大多数都需要您使用链接器来完成。这与其说是操作系统本身的问题,还不如说是引导加载程序的问题,但(无论出于何种原因)大多数操作系统的开发者自己也至少编写了一些玩具引导加载程序。

你自相矛盾。优化在x86上的执行是不可能的,每个家族都可以/确实以显著不同的速度执行相同的二进制文件,尤其是在32位和64位之间跳转时。如果您的目标是提高x86上的速度,请不要在asm中编写,请使用C,然后让编译器针对它所处的平台进行优化。对于大型项目,您将无法与编译器竞争。对于简短的编译器生成的代码序列,是的,当然有时您可以手工组装更好/更快的东西。对于x86,编译器在x86上的平均良好速度可能比您做得更好。膨胀不一定来自编译器或语言,而是来自所选语言的设计和实现。非常非常容易有膨胀的asm作为膨胀的C或其他

第二,如果你是用汇编语言写的。这段代码中有多少是指令,您希望有多少是特定于汇编程序的指令和其他细微差别?您至少可以尝试使用这些汇编器共享的最少数量的指令(其余为指令)编写在不同汇编器上工作的可移植asm。不幸的是,x86在这里也有问题,首先是intel vs at&t语法问题,然后是字节ptr和近/远项,以告诉汇编程序哪种特定指令(即使限于intel语法)可能无法从一个x86汇编程序移植到另一个x86汇编程序。你可以花25美元买一个覆盆子皮或者花90美元买一个小猎犬骨


x86组装是可怕的最多,几十年的创可贴上创可贴(从最初的前身+创可贴开始)。如果你觉得有必要做一个好的组装项目,(而不是像C这样更有用的)esp如果速度是你的目标,那么选择一个更好的处理器和指令集。我不知道你的项目有多大。如果足够小,则为thumb或thumb2或arm或avr或msp430,如果较大,则为arm或mips。不幸的是,对于大多数人来说,你可能会选择gnu binutils。对于x86,如果您真的认为需要使用该指令集和硬件,我同意Jerry的观点,请使用nasm。

您自相矛盾。优化在x86上的执行是不可能的,每个家族都可以/确实以显著不同的速度执行相同的二进制文件,尤其是在32位和64位之间跳转时。如果您的目标是提高x86上的速度,请不要在asm中编写,请使用C,然后让编译器针对它所处的平台进行优化。对于大型项目,您将无法与编译器竞争。对于简短的编译器生成的代码序列,是的,当然有时您可以手工组装更好/更快的东西。对于x86,编译器在x86上的平均良好速度可能比您做得更好。膨胀不一定来自编译器或语言,而是来自所选语言的设计和实现。非常非常容易有膨胀的asm作为膨胀的C或其他

第二,如果你是用汇编语言写的。这段代码中有多少是指令,您希望有多少是特定于汇编程序的指令和其他细微差别?您至少可以尝试使用这些汇编器共享的最少数量的指令(其余为指令)编写在不同汇编器上工作的可移植asm。不幸的是,x86在这里也有问题,首先是intel vs at&t语法问题,然后是字节ptr和近/远项,以告诉汇编程序哪种特定指令(即使限于intel语法)可能无法从一个x86汇编程序移植到另一个x86汇编程序。你可以花25美元买一个覆盆子皮或者花90美元买一个小猎犬骨

x86组装是可怕的最多,几十年的创可贴上创可贴(从最初的前身+创可贴开始)。如果你觉得有必要做一个好的组装项目,(而不是像C这样更有用的)esp如果速度是你的目标,那么选择一个更好的处理器和指令集。我不知道你的项目有多大。如果足够小,则为thumb或thumb2或arm或avr或msp430,如果较大,则为a