Assembly 跨平台/体系结构汇编语言

Assembly 跨平台/体系结构汇编语言,assembly,architecture,programming-languages,cross-platform,bytecode,Assembly,Architecture,Programming Languages,Cross Platform,Bytecode,我知道汇编语言通常不跨平台。即使使用像NASM这样的东西,您仍然需要为不同的架构和平台编写不同的代码,这些架构和平台具有不同的运行时和中断等实现。但是,如果有人因为喜欢汇编语言而想用汇编语言编程,那么有没有跨平台、跨体系结构的汇编语言的实现 编辑: 那不是传统意义上的汇编语言,而是一种看起来很像汇编的低级编程语言呢?不。C语言可能是最接近跨平台低级语言的语言。正如您所说,汇编不是跨平台的(您可以删除“典型”部分)。我自己没有太多的信息,但看起来您可能会感兴趣,因为在他们的页面中描述了一种“可移植

我知道汇编语言通常不跨平台。即使使用像NASM这样的东西,您仍然需要为不同的架构和平台编写不同的代码,这些架构和平台具有不同的运行时和中断等实现。但是,如果有人因为喜欢汇编语言而想用汇编语言编程,那么有没有跨平台、跨体系结构的汇编语言的实现

编辑:


那不是传统意义上的汇编语言,而是一种看起来很像汇编的低级编程语言呢?

不。C语言可能是最接近跨平台低级语言的语言。

正如您所说,汇编不是跨平台的(您可以删除“典型”部分)。我自己没有太多的信息,但看起来您可能会感兴趣,因为在他们的页面中描述了一种“可移植汇编语言”。

以下链接似乎与此相关。

尤其是池上的回答:

人工汇编语言的设计是为了满足所设计语言的需要,并且与它们有着非常密切的关系,而不是硬件。没有什么比用高级语言更容易做到的了。EDIT:

汇编语言通常与该处理器/系统的机器代码或指令集有一对一的关系。根据定义,系统是不同的,因为它们有不同的指令集。所以,根据定义,你不能有一个跨系统的指令集,所以没有跨系统的汇编语言,而且它仍然被称为汇编语言

最接近的是虚拟指令集(如果愿意的话),它们接近机器级别,因为它们具有许多指令集所共有的属性,与机器代码有一对一或一对几的关系,但不特定于一台机器。例如java字节码、python字节码、pascal p-code等。这些都是基于堆栈的机器,大多数处理器都有堆栈,或者可以使用加载和存储轻松实现基于堆栈的机器。基于堆栈的机器使用很少的寄存器,这是另一种跨系统的方法,并且不会使在各种指令集上实现变得太痛苦。基于堆栈也是small-c后端的核心,这就是为什么它可以如此轻松地从一个系统移植到另一个系统。历史会重演,这四种语言不是最后一种可以归结为基于堆栈的机器的语言,这种情况会一再发生

如果您喜欢汇编,您可能会发现java或python后端很有趣,而且可能很有趣。它们可能没有汇编语言,只有机器代码,所以您可能需要编写自己的汇编程序。就我个人而言,我会从一个反汇编程序开始,对语言有所了解,然后换一种方式编写字节码或创建一个汇编程序。同样有趣的是为特定处理器实现虚拟机


您关于喜欢汇编语言然后使用NASM这个词的评论意味着x86。x86是一种有点令人不快的汇编语言,如果您没有体验过其他语言,那么还有许多更漂亮的汇编语言。你应该尝试一下,而不是寻找一刀切的(你实际上找不到的)。

我认为唐纳德·克努斯是你可能感兴趣的。Knuth用他的机器/汇编语言编写程序。迄今为止,没有CPU直接支持它。只有模拟器。哦,有人做了一个FPGA可以运行它。但仅此而已。

LLVM是一种低级语言(其目的是编译器后端),它看起来非常像AT&T汇编,甚至比AT&T汇编差10倍。下面是一个例子:

define i32 @add_sub(i32 %x, i32 %y, i32 %z) {
entry:
  %tmp = add i32 %x, %y
  %tmp2 = sub i32 %tmp, %z
  ret i32 %tmp2
}
这与以下手写x86程序集大致相同:

; Body
mov eax, edi
add eax, esi
sub eax, edx
ret
LLVM llc 3.3生成以下代码(为了可读性而缩进不同):

相关代码如下:

lea    EAX, DWORD PTR [RDI + RSI]
sub    EAX, EDX
ret

正如您所看到的,LLVM有一个非常强大的优化器。它可能是最接近的语言。

字节码比C更接近,C是一种高级语言。特别是基于堆栈的处理器(java)和一些基于堆栈的处理器(zpu)更接近于通用asm。字节码不是跨架构的。它们在任何地方都模拟相同的处理器。我们可以很容易地说x86是可移植的,因为QEMUTOP询问了关于使用跨系统汇编语言编程的问题。没有人真正用字节码编写程序。@uselpa你不能排除这种可能性。更具说服力的论点是,从高级编译器中针对该字节码。每个体系结构的字节码都有自己的编译器。不管怎样,谁在这里谈到了C?再仔细看看。我说的是C。既然你似乎没有花时间点击链接,我就引用C--主页:“如果你有一种可移植的汇编语言,你会更开心。”我同意你的看法,但你的评论还是离题了。我已经链接到主页了,如果你想了解更多细节,请访问主页。我不打算重复已经说过的话。不管怎么说,这个讨论对问题本身并没有建设性意义。C-——离题?不管怎样,我不想讨论这个问题。正如你们已经知道的,字节码是不跨平台的。这甚至不是汇编。这更像是一个评论,而不是一个答案,因为你没有回答这个问题:“有没有跨平台跨架构汇编语言的实现?”我不知道你从哪里知道他不喜欢汇编……我不会重复别人已经对你说过的话。看看关于uselpa答案的评论。如果他喜欢汇编,他会喜欢每个人都有自己的语言,享受多样性,而不是试图让一切看起来都一样。搜索通用汇编语言意味着不喜欢各种汇编语言。我将研究为其他编程语言虚拟机编程。听起来像
lea    EAX, DWORD PTR [RDI + RSI]
sub    EAX, EDX
ret