Hop*_*Abc 5 architecture assembly programming-languages cross-platform bytecode
我知道汇编语言通常不是跨平台的.即使像NASM这样的东西,你仍然需要不同的代码用于不同的架构和平台,这些架构和平台具有不同的运行时和诸如中断之类的实现.但是,如果有人想用汇编语言编程,因为他们喜欢它,那么是否有任何跨平台跨架构汇编语言的实现?
编辑:
那些不是传统意义上的装配,而是一种看起来很像装配的低级编程语言呢?
我认为Donald Knuth的MMIX是你可能感兴趣的.Knuth用这种机器/汇编语言在他的"计算机编程艺术"一书中编写程序.迄今为止,没有CPU直接支持它.只有模拟器.哦,有人做了一个可以运行它的FPGA.但那是关于它的.
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具有非常强大的优化器。它可能是最接近的。