我想下面的C代碼翻譯成彙編:大會翻譯
void write (int bitpos, unsigned short sample)
{
int pos = bitpos/16;
int posA = bitpos - pos * 16;
unsigned short write1 = sample >> posA;
}
我一直在換檔操作得到一個錯誤。我看了一本書中的一些例子,但我不明白什麼是錯的。我想這可能是因爲我想轉移的數量是一個變量。我想知道實現這個的正確方法是什麼?
這是我曾嘗試:
//int pos = bitpos/16;
mov eax, 0
mov eax, [bitpos] // eax= bitpos
cdq
mov ecx, 16
idiv ecx //ecx = pos
//int posA = bitpos - pos * 16;
mov ebx, ecx //ebx = pos
imul ebx, 16 // ebx = pos*16
sub eax, ebx // eax = posA
//unsigned short write1 = sample >> posA;
mov bx, [sample]
shr bx, eax // This is the part that is not working.
錯誤說:錯誤的操作數類型。錯誤代碼:C2415
嘗試使用'sar'而不是'shr'。這保留了標誌。 – drum
一個好的彙編程序參考應該說明唯一指示變量移位的寄存器是[in CL](http://x86.renejeschke.de/html/file_module_x86_id_285.html)。 – usr2564301
你可以用'pos << 4'替換'bitpos >> 4'和'pos * 16'的'bitpos/16'。 – 2015-11-13 22:37:16