次の 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