使用SHL eax,ecx汇编x86错误

时间:2018-03-16 04:50:35

标签: assembly x86 cpu-registers instruction-set operands

我在我的代码中遇到了这个编译错误的汇编x86类,

  

A2070:无效的指令操作数

该行是

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不起作用。

1 个答案:

答案 0 :(得分:7)

转换说明don't accept a 32-bit register as their count operand

您需要使用cl中的较低位:

shl eax, cl