Получение «A2070 ошибка: недопустимые операнды команд» на следующей инструкции в ассемблере (генерируется из CL)ML недействительные операнды инструкция по сар, ЗЫ
mov edx, DWORD PTR [email protected]@3JA
shl edx, 1326 ;this line gets the error
mov ecx, DWORD PTR [email protected]@3JA
shl ecx, 1514 ;this line gets the error
mov ecx, DWORD PTR __Var4$74314[ebp]
sar ecx, 3811 ;this line gets the error
Это не происходит здесь:
; Line 698
movsx edx, BYTE PTR [email protected]@3PAHA+4
movsx ecx, BYTE PTR [email protected]@3PADA+1
sar edx, cl
Возможно, что-то связано с тем, что shl, sar используется с константами, а не с регистрами? Confused :(
Это может быть потому, что ваши непосредственные значения слишком высоки для смещения (обычно непосредственное значение находится между '1 <= count <= 31') – Buddy
Вы правы - спасибо sir –
Для инструкций смены немедленное значение представляет собой подписанное 8-битное значение, но только нижние 5 бит являются используется. Ассемблер Microsoft позволит что-то вроде shl edx, 32, которое будет nop. shl edx, 255 или shl edx, -1 или shl edx, 31 сделает то же самое. Ошибка здесь вызвана слишком большим значением для немедленное подписанное 8-битное значение. – rcgldr