所以我试图转换从C以下分配到内联汇编移动变量CL和使用内联汇编
resp = (0x1F)&(letter >> (3 - numB));
假设执行SHR该变量的声明有以下几种
unsigned char resp;
unsigned char letter;
int numB;
所以我试过以下内容:
_asm {
mov ebx, 01fh
movzx edx, letter
mov cl,3
sub cl, numB // Line 5
shr edx, cl
and ebx, edx
mov resp, ebx
}
或以下
_asm {
mov ebx, 01fh
movzx edx, letter
mov ecx,3
sub ecx, numB
mov cl, ecx // Line 5
shr edx, cl
and ebx, edx
mov resp, ebx
}
在这两种情况下,我得到的大小操作数错误在5号线 我怎样才能达到正确的转变?
你看过编译器会为此生成什么吗? – EOF
CL是ECX的低字节。如果您删除无意义的'mov cl,ecx',您的第二个版本看起来不错。由于'numB'是32位,所以你必须在32位寄存器中使用它。 (或者,也许'sub cl,byte ptr numB'只加载低字节,因为SHR无论如何都掩盖了移位计数。) –