我遇到了Visual Studio问题,它无法识别asm中的“byte ptr”。有谁知道我应该用什么来代替?我使用visual studio是因为我只是想在C++代码旁边做一些asm来加速一些事情。所以任何人也可以检查代码,因为我不确定返回(这只是一个测试)。这是否也适用于uint?Visual Studio中的汇编
__declspec(naked) void bewerken(int letter)
{
__asm
{
push ebp
mov ebp, esp
sub esp, 1 // ruimte maken voor 1 variabele van 1 byte
mov byte ptr [eax], [ebp+8]
mov esp, ebp
pop ebp
ret
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char* bYte;
int letter;
printf_s("Voer een letter in:\n");
letter = getchar();
if (letter < 128)
{
__asm
{
push letter
call bewerken
add esp, 4
mov byte ptr bYte, eax
}
}
else
{
printf_s("Te hoog.\n");
}
getchar();
return 0;
}
注: “BYTE PTR” 不编译任
如果您使用MSVC内联汇编提高性能,您将需要使用比此更大的块。已知MSVC程序集有很多启动和结束开销,因为所有操作数都必须通过内存传入。 – Mysticial
尝试使用'mov al,byte ptr [esp + 8]'你可能首先根据你如何使用eax来做'xor eax,eax'。编辑:另外我不认为这里应该有太多的开销,由于裸露的功能,我已经使用了它们很多,并且从未见过Mysticial正在讨论的开销。用于'debug.exe'的 – user1520427