ワード配列に最大値を返すプロシージャを作成しようとしました。 私はローカル変数をhereという表記規則で割り当てました。 しかし、私はローカル変数に値を移動しようとすると、それは私に、このエラーを与える:ここでNasmアセンブリ。スタック上のローカル変数に値を移動できません
invalid combination of opcode and operands
は私のコードです:
greatest:
push ebp
mov ebp, esp
;allocate local variables here
sub esp, 4
;push stuff
push esi
mov ecx, [ebp+12] ;size of the array
mov eax, [ebp+8] ;offset of the array
mov esi, 0 ;counter for accessing elements
mov ebp-4, eax ;error here
l1:
push ecx
mov ecx, [eax + 2*esi] ;get the variable
cmp [ecx], [ebp-4] ;compare values
jb if_2
mov ebp-4, ecx ;error here
if_2:
inc esi
pop ecx
loop l1
mov eax, [ebp-4]
pop esi
mov esp, ebp
pop ebp
ret
任意の助けいただければ幸いです:)
'cmp [ecx]、[ebp-4]' memとmemとを比較することはできません –
@Alexander Zhakしかしレジストリにはありますか?コンパイラは気にしないようです。私は、特定のリンクでMASMが使用され、 'mov ebp-4、eax'がうまく動作することに注意したい。 NASMではそう思わない。おそらく、メモリと値のアドレス指定のための構文と関係しています。 –
私のMASMは 'mov ebp-4、eax'のアセンブルを拒否します。 "*エラーA2032:無効なレジスタの使用*"。 – rkhb