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
Assembly 可以直接使用LLVM程序集吗?_Assembly_Llvm_Llvm Ir - Fatal编程技术网

Assembly 可以直接使用LLVM程序集吗?

Assembly 可以直接使用LLVM程序集吗?,assembly,llvm,llvm-ir,Assembly,Llvm,Llvm Ir,我读过一些关于llvm的网页和文章,我对这个项目很感兴趣。(也许是为了学习一些关于编译器编写的知识,而不必与x86的复杂点作斗争) 有一些页面描述了如何编写llvm程序集以及如何组装它,但我没有找到任何关于实际执行这些程序需要什么样的环境的内容。我知道我可以在我的文件上运行llvm gcc,以获得在C上下文中可执行的对象文件。但是如果我不想使用C运行时环境(libc.so和friends),那么运行llvm代码需要什么呢?有关于这方面的文件吗?似乎有 llvm as是llvm汇编程序。它读取一个

我读过一些关于llvm的网页和文章,我对这个项目很感兴趣。(也许是为了学习一些关于编译器编写的知识,而不必与x86的复杂点作斗争)

有一些页面描述了如何编写llvm程序集以及如何组装它,但我没有找到任何关于实际执行这些程序需要什么样的环境的内容。我知道我可以在我的文件上运行llvm gcc,以获得在C上下文中可执行的对象文件。但是如果我不想使用C运行时环境(
libc.so
和friends),那么运行llvm代码需要什么呢?有关于这方面的文件吗?

似乎有

llvm as是llvm汇编程序。它读取一个包含 人类可读的LLVM汇编语言,将其转换为LLVM位代码, 并将结果写入文件或标准输出


接受LLVM程序集的静态编译器:

LLVM汇编语言参考:


快速设置:(适用于windows上的llvm 3.4.0.ll文件)

来自的高级文本编辑器

来自的llvm二进制文件

hello.ll为“无BOM的UTF-8”(此代码为llvm 3.4.0格式):

在命令提示符中:

lli hello.ll
clang hello.ll -o hello.exe
hello.exe

快速安装:(适用于windows上的llvm 3.8.0.ll文件)

来自的高级文本编辑器

来自以下位置的叮当二进制文件:

hello.ll为“无BOM的UTF-8”(此代码为llvm 3.8.0格式):

在命令提示符中:

lli hello.ll
clang hello.ll -o hello.exe
hello.exe
或作为单个命令:

clang hello.ll -o hello.exe & hello.exe

关于char16_t、u16String等的错误意味着clang需要:-在Archlinux上的fms compatibility version=19

LLVM 11.1不接受上述答案中的代码。这是来自当前的:


cat>hello.ll LLVM IR作为一种语言编写自己的代码并不是很有用。即使是,它的级别也很低,很少使用。我认为没有人支持这样做。相关且有趣,尽管这里提出的观点不一定适用于你:@delnan好吧,你是对的。我的目标是首先理解llvm,然后编写我自己的针对llvm的玩具编译器。@delnan,有时候手动编写IR是有意义的。而且有一套相当全面的工具来完成这项工作:
llvmas
llvmdis
lli
llc
。libclc在源代码中有一些
ll
文件,例如,如何处理位码?您可以只键入
llvm作为foo.ll/a、 退出
,它就像一个符咒?运行代码需要什么?这个项目的切入点是什么?etc@FUZxxl,您的序列应该是
llvm作为foo.ll;llc——您的平台选项等等等等/a、 out
或通过执行
lli foo.bc
来使用JIT编译器直接运行位代码。@SK logic,我认为
llc
不会输出本机机器代码,而是输出汇编语言。但是,您可以使用
llvm ld foo.bc
生成本机代码。@boyers,llc可以在某些平台上直接发出ELF(尽管它仍然是实验性的和不稳定的)。是的,llvm IR在版本之间会发生变化。这是非常不幸的。