Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/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
C# 从C代码生成汇编代码?_C#_Assembly_Code Generation_Gnu Assembler - Fatal编程技术网

C# 从C代码生成汇编代码?

C# 从C代码生成汇编代码?,c#,assembly,code-generation,gnu-assembler,C#,Assembly,Code Generation,Gnu Assembler,有没有办法从C代码生成汇编代码?我知道使用GAS的C代码是可能的,但是有人知道使用C#是否可能吗?C#通常被编译成.NET字节码(调用),然后在程序实际运行时(“即时”)编译成本机代码。类似C语言的编译器已经存在,所以你可以通过其中一个编译一个C语言程序,然后反汇编它。结果可能很难遵循 更有可能的是,您可能希望查看比CPU汇编代码更高级别的字节码,您可以在C程序的编译.exe上使用这些字节码。C代码编译成MSIL(MS中间语言),而MSIL实际上不是从C编译器获得的asm代码。了解有关.NET

有没有办法从C代码生成汇编代码?我知道使用GAS的C代码是可能的,但是有人知道使用C#是否可能吗?

C#通常被编译成.NET字节码(调用),然后在程序实际运行时(“即时”)编译成本机代码。类似C语言的编译器已经存在,所以你可以通过其中一个编译一个C语言程序,然后反汇编它。结果可能很难遵循

更有可能的是,您可能希望查看比CPU汇编代码更高级别的字节码,您可以在C程序的编译
.exe
上使用这些字节码。

C代码编译成MSIL(MS中间语言),而MSIL实际上不是从C编译器获得的asm代码。了解有关.NET Framework应用程序如何运行的更多信息


如果您想查看生成的IL代码,请参阅。

您可以使用该工具以一种间接的方式执行此操作,然后反汇编生成的二进制文件。或者,您可以使用调试器来检查从MSIL创建的JIT代码,这样的调试器是否能够做到这一点。

您可以在printAsm标志设置为true的情况下使用

[DisassemblyDiagnoser(printAsm: true, printSource: true)] // !!! use the new diagnoser!!
[RyuJitX64Job]
public class Simple
{
    int[] field = Enumerable.Range(0, 100).ToArray();

    [Benchmark]
    public int SumLocal()
    {
        var local = field; // we use local variable that points to the field

        int sum = 0;
        for (int i = 0; i < local.Length; i++)
            sum += local[i];

        return sum;
    }

    [Benchmark]
    public int SumField()
    {
        int sum = 0;
        for (int i = 0; i < field.Length; i++)
            sum += field[i];

        return sum;
    }
}
[分解诊断器(printAsm:true,printSource:true)]/!!!使用新的诊断仪!!
[RyuJitX64Job]
公共类简单
{
int[]field=Enumerable.Range(0100.ToArray();
[基准]
公共和本地()
{
var local=field;//我们使用指向该字段的局部变量
整数和=0;
for(int i=0;i
产生:

我不清楚你在问什么。您想将C#编译成汇编,还是想编写一个输出汇编的C#程序?我想查看我的C#代码在汇编中的外观。为了教育目的。现在就去上组装课。