我遇到了Visual Studio的问题,它无法识别asm中的“byte ptr”。有谁知道我应该用什么呢?我使用visual studio,因为我只想在c ++代码旁边做一些asm来加快速度。所以任何人都可以检查代码,因为我不确定返回(这只是一个测试)。这也适用于uint吗?
__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”无法编译
答案 0 :(得分:4)
没有有效的寻址模式mov whatever [eax], [ebp+8]
一个人可以mov al, [ebp+8]
或mov ax,[ebp+8]
和mov eax,[ebp+8]
以及mov rax,[ebp+0x132220]
,但也可以立即移动到具有立即偏移的地址。那将是唯一需要显式宽度属性的情况:mov byte ptr 0x01,[ebp+8]
至少这是它在debug.exe时代的工作方式......
在所有其他情况下,操作的宽度应该清晰。