Вот мой код:
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
}
}
В чем проблема с прямым использованием? Возможно ли это?