跨平台/架构汇编语言

Hop*_*Abc 5 architecture assembly programming-languages cross-platform bytecode

我知道汇编语言通常不是跨平台的.即使像NASM这样的东西,你仍然需要不同的代码用于不同的架构和平台,这些架构和平台具有不同的运行时和诸如中断之类的实现.但是,如果有人想用汇编语言编程,因为他们喜欢它,那么是否有任何跨平台跨架构汇编语言的实现?

编辑:

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

Ale*_*nze 7

我认为Donald Knuth的MMIX是你可能感兴趣的.Knuth用这种机器/汇编语言在他的"计算机编程艺术"一书中编写程序.迄今为止,没有CPU直接支持它.只有模拟器.哦,有人做了一个可以运行它的FPGA.但那是关于它的.


kir*_*sos 5

LLVM是一种低级语言(其目的是作为编译器后端),看上去与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
}
Run Code Online (Sandbox Code Playgroud)

大致 equilavent具有以下手写x86汇编:

; Body
mov eax, edi
add eax, esi
sub eax, edx
ret
Run Code Online (Sandbox Code Playgroud)

LLVM llc 3.3生成以下代码(为便于阅读而缩进):

    .file    "add_sub.ll"
    .text
    .globl    add_sub
    .align    16, 0x90
    .type    add_sub,@function
add_sub:                        # @add_sub
    .cfi_startproc
# BB#0:                         # %entry
    lea    EAX, DWORD PTR [RDI + RSI]
    sub    EAX, EDX
    ret
.Ltmp0:
    .size    add_sub, .Ltmp0-add_sub
    .cfi_endproc


    .section    ".note.GNU-stack","",@progbits
Run Code Online (Sandbox Code Playgroud)

相关代码是这样的:

lea    EAX, DWORD PTR [RDI + RSI]
sub    EAX, EDX
ret
Run Code Online (Sandbox Code Playgroud)

如您所见,LLVM具有非常强大的优化器。它可能是最接近的。