Доступ к членам класса из встроенной сборки в Visual C ++

Вот мой код:

void Graph::PutPixel(DWORD x, DWORD y, DWORD c)
{
    __asm 
    {
        Mov Eax, y
        Mov Ebx, _width
        Mul Ebx
        Add Eax, x
        Shl Eax, 2 // Multiply by four
        Add Eax, _buffer
        Mov Edi, Eax
        Mov Eax, c
        StosD
    }
}

Где _buffer и _width - члены класса Graph:

private:
    DWORD _width;
    DWORD* _buffer;

Это не работает; Я получаю значение 0 от обеих переменных, но на самом деле у них есть другие значения.

Я могу исправить это, скопировав переменные класса в локальные переменные и используя их:

void Graph::PutPixel(DWORD x, DWORD y, DWORD c)
{
    DWORD bufAddr = (DWORD)_buffer;
    DWORD w = _width;
    __asm 
    {
        Mov Eax, y
        Mov Ebx, w
        Mul Ebx
        Add Eax, x
        Shl Eax, 2 // Multiply by four
        Add Eax, bufAddr
        Mov Edi, Eax
        Mov Eax, c
        StosD
    }
}

В чем проблема с прямым использованием? Возможно ли это?

6
задан Pavel Tupitsyn 19 November 2011 в 07:36
поделиться