有没有办法从C#代码生成汇编代码?我知道使用GAS的C代码是可能的,但是有人知道C#是否可以使用?#/ p>
答案 0 :(得分:3)
C#通常编译为.NET字节码(称为CIL or MSIL),然后在实际运行程序时编译为本机代码的JIT(“及时”)。 C#之前存在编译器,如Mono's AOT,因此您可以通过其中一个编译C#程序,然后对其进行反汇编。结果可能很难遵循。
更有可能的是,您可能希望查看比CPU的汇编代码更高级别的字节码,您可以在C#程序的已编译.exe
上使用ILdasm。< / p>
答案 1 :(得分:3)
C#代码编译成MSIL(MS中间语言),这实际上并不是你从C编译器获得的asm代码。阅读有关.NET Framework应用程序如何运行的更多信息。
如果您想查看生成的IL代码,请参阅this question。
答案 2 :(得分:2)
答案 3 :(得分:2)
您可以使用BenchmarkDotNet并将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;
}
}