相关疑难解决方法(0)

LEA指令的目的是什么?

对我来说,它看起来像一个时髦的MOV.它的目的是什么,我什么时候应该使用它?

x86 assembly x86-64 x86-16

632
推荐指数
15
解决办法
54万
查看次数

117
推荐指数
7
解决办法
16万
查看次数

小功能的C#性能

我的一位同事一直在阅读罗伯特·C·马丁的"清洁代码",并参加了关于使用许多小功能而不是减少大功能的部分.这引发了关于这种方法的性能后果的争论.因此,我们编写了一个快速程序来测试性能,并对结果感到困惑.

对于初学者来说,这是该功能的正常版本.

static double NormalFunction()
{
    double a = 0;
    for (int j = 0; j < s_OuterLoopCount; ++j)
    {
        for (int i = 0; i < s_InnerLoopCount; ++i)
        {
            double b = i * 2;
            a = a + b + 1;
        }
    }
    return a;
}
Run Code Online (Sandbox Code Playgroud)

这是我制作的版本将功能分解为小功能.

static double TinyFunctions()
{
    double a = 0;
    for (int i = 0; i < s_OuterLoopCount; i++)
    {
        a = Loop(a);
    }
    return a;
}
static double Loop(double a)
{
    for …
Run Code Online (Sandbox Code Playgroud)

c# performance jit compilation roslyn

10
推荐指数
1
解决办法
797
查看次数

在x86-32汇编中"lea eax,[ebx + eax]"和"add eax,ebx"有什么区别?

GCC给了我一些汇编代码,在这个声明里面:

lea eax, [ebx+eax]
Run Code Online (Sandbox Code Playgroud)

(英特尔语法)只是好奇,它之间有什么区别,和:

add eax, ebx
Run Code Online (Sandbox Code Playgroud)

是?

eax和ebx包含函数的返回值:)

mov eax, DWORD PTR [ebp+8]
mov DWORD PTR [esp], eax 
call CALC1
mov ebx, eax.
mov eax, DWORD PTR [ebp+8]
mov DWORD PTR [esp], eax
call CALC2
lea eax, [ebx+eax]
Run Code Online (Sandbox Code Playgroud)

x86 assembly

4
推荐指数
3
解决办法
1506
查看次数

LEA在内部做什么?

这个问题说LEA指令可以用来做算术.

据我了解,而不是:

inc eax
mov ecx, 5
mul ecx
mov ebx, eax
Run Code Online (Sandbox Code Playgroud)

我可以简单地写

lea ebx, [(eax + 1) * 5]
Run Code Online (Sandbox Code Playgroud)

LEA版本只是一条指令,而不是4.但是,我不明白LEA如何在没有inc和的情况下进行算术运算mul.

LEA版本在任何方面都更快,或者LEA是否只是在后台运行原始指令?

编辑:这个问题不是关于LEA的目的,而是它如何在内部工作.

x86 assembly

2
推荐指数
1
解决办法
164
查看次数

标签 统计

assembly ×4

x86 ×4

c# ×1

compilation ×1

instruction-set ×1

jit ×1

performance ×1

roslyn ×1

x86-16 ×1

x86-64 ×1