我在使用 Visual Studio 时遇到问题,它无法识别 asm 中的“byte ptr”。有谁知道我应该用什么代替?我使用 visual studio 是因为我只是想在 c++ 代码旁边做一些 asm 来加快速度。所以任何人都可以检查代码,因为我不确定返回(这只是一个测试)。这对 in 也适用于 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”也不编译
最佳答案
没有有效的寻址模式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 时代它是这样工作的...
在所有其他情况下,操作的宽度应该是明确的。
关于c - 在 Visual Studio 中组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056144/