所以我試圖轉換從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無論如何都掩蓋了移位計數。) –