Pav*_*syn 6 c++ assembly inline-assembly
这是我的代码:
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
}
}
Run Code Online (Sandbox Code Playgroud)
_buffer和_width是Graph类成员:
private:
DWORD _width;
DWORD* _buffer;
Run Code Online (Sandbox Code Playgroud)
这是行不通的; 我从两个变量得到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
}
}
Run Code Online (Sandbox Code Playgroud)
直接使用有什么问题?可能吗?
在关闭的机会,你有什么事情,确实需要总成(见博的答案),有一篇文章在这里的访问C或C++内联汇编块中的数据.
在你的情况下,我们得到:
void Graph::PutPixel(DWORD x, DWORD y, DWORD c)
{
__asm
{
mov ecx,this
mov Eax, y
mov Ebx, [ecx]Graph._width //alias ecx to type 'Graph' and access member
mul Ebx
add Eax, x
shl Eax, 2
add Eax, [ecx]._buffer //access member with bound alias
mov Edi, Eax
mov Eax, c
stosd
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1721 次 |
| 最近记录: |