2012-04-22 21 views
2

「命令のオペランドが同じサイズでなければなりません」私はこの時に非常に新しいですし、私はそれをすると仮定 、他に1つの配列から値を移動しようとしている:組立誤差:

vec1 = 1, 2, 3, 4, 5 
vec2 = 5, 4, 3, 2, 1 

「命令のオペランドは同じサイズでなければなりません」というエラーが表示されます。

TITLE program 

    .386 
    .model flat 
    extern [email protected]:Near 
    .data 

    vec1 WORD 1, 2, 3, 4, 5; original array 
    vec2 WORD 5 DUP(?) 
    .code     
_main: 

    mov ebx, 0 
    mov ecx, lengthof vec1 
    DO: 
    mov eax, vec1[ebx] 
    mov vec2[ecx], eax 
    inc ebx 
    loop DO 

    push 0      
    call [email protected]   

    end _main  

助けてください。

答えて

3

最初に私が見ているのは、WORDが16ビット幅で、eaxが32ビット幅であるという事実です。したがって、eax(明示的なサイズ指定子なし)に何かを読み込むと、16ではなく32ビットが得られます。

さらに、ecxの値が期待通りになるとは確信していません確認する必要があります。n-1から0までを繰り返す必要があることを念頭に置いてください。あなたが持っている方法は、nから1になります。

+0

ありがとう、それはエラーでした。私はまだいくつかの値のエラーがありますが、それは私の宿題であると言う通りです:) ありがとう。 – kirlev

+0

+1。宿題に関する十分な情報を証明するのは非常に素晴らしい仕事です。 :) –

+0

これは宿題に関する質問かもしれませんが、他のアセンブリ言語プログラマーにとっても役立つかもしれません。 –