SHL eax、ecx 的程序集 x86 错误

Assembly x86 error with SHL eax, ecx

我在 Assembly x86 代码中遇到这个编译错误 class,

A2070: invalid instruction operands

行是

shl eax, ecx

ecx应该是循环的(减1),此时永远不会大于5,那为什么我不能平移这个值呢?我需要将 eax 中的值乘以 2^n,n 是 ecx 中的值,左移。

createArray PROC   
;saving 5 multiples of the value currently in eax into an array addres that 
is ;on the stack
    push ecx       
    push eax
    push esi
    push ebp
    mov ebp, esp
    mov ecx, 5
    mov esi, [ebp+24] ;address of array
    L1:
        call multiply   ;call multiply with two numbers eax, ecx
        pop eax
        mov [esi],eax
        add esi, 4

    Loop L1
....cont
createArray endp

multiply PROC
    shl eax, ecx ; this line right here
    push eax
multiply endp

如果我替换

shl eax, 5

然后就可以了我只是不知道为什么 ecx 不工作。

移位指令don't accept a 32-bit register as their count operand.

您需要使用 cl 中的低位:

shl eax, cl