MOV EAX,DWORD PTR SS:[EBP + 8h]的含义是什么?如何将其翻译成AT& T格式?

时间:2011-05-28 10:09:18

标签: c++ assembly codeblocks inline-assembly

我正在使用Code :: Blocks来编码,但我引用的代码之一来自Visual C ++,所以我在差异上遇到了困难...... :(

完整代码在这里

NAKED void ijlWrite()
{
__asm {
    PUSH    EBP
    MOV     EBP, ESP
    MOV     EAX, DWORD PTR SS:[EBP+8h]
    MOV     ECX, ssQuality
    MOV     DWORD PTR DS:[EAX+50h], ECX
    MOV     EDX, DWORD PTR SS:[EBP+0Ch]
    PUSH    EDX
    MOV     EAX, DWORD PTR SS:[EBP+08h]
    PUSH    EAX
    CALL    lpfnIJLWrite //a global variable
    POP     EBP
    RETN
}
}

如果你翻译它们,我将非常感激。

P.S。我也不知道如何翻译RETN。怎么做?备忘单没有这样的东西:(

3 个答案:

答案 0 :(得分:4)

你不能只用C ++编写这个函数吗?多一点类型信息会有所帮助,但是这个怎么样?

void ijlWrite(int* p, int i)
{
    p[80] = ssQuality;
    lpfnIJLWrite(p, i);
}

答案 1 :(得分:3)

MOV     EAX, DWORD PTR SS:[EBP+8h]

相当于

movl %ss:8(%ebp), %eax

您只需交换来源和目的地的顺序,DWORD会转换为l后缀。 %ss:前缀是绝对不必要的,它是使用基于EBP的内存访问时的默认设置。

答案 2 :(得分:1)

我认为是

movl %ss:8(%ebp), %eax

请参阅this以获取快速参考。