2016-06-27 8 views
3

BXレジスタから配列要素に値を移動しようとすると、値が完全に変更されます。
のは、SIレジスタが1に等しい私の配列は{0,4,4}であること、例えばましょう、そしてcolorNum = 3(colorNum及びアレイは、両方のワードサイズです)。レジスタから配列へのmovを使用した値の変更

mov bx, [colorNum] 
mov [arr + si], bx 

これに続いて、私は配列は今、デバッガで見ることができました:{} 769,0,4
私は単にそれがされている必要がありますように、何が悪かったのかわかりません:{0、 3,4}

適切な値を配列に移動するにはどうすればよいですか?

+2

各要素がWORDの場合、2番目の要素に格納するには 'si'を2にする必要があります。元の配列が '{1,4,4} 'ではないと確信していますか?それは '{769,0,4}'を説明するでしょう –

+0

'si'が正しければ、それはすでに' 2 * index'ですか?これが当てはまるかどうかは分かりません。 –

答えて

2

arr + siは、(char*)arr+1に相当します。

のはwordの大きさが2であると仮定しよう:mov [arr + si], bxで、あなたは、配列の最初のセルとのアレイの第2のセルの前半の後半にword値を書いています。

arr + si(char*)arr+1*sizeof(word)に相当する式に置き換える必要があります。

+0

さん、ありがとう! –

+0

@AlonGroberman:どうぞよろしくお願いいたします。 –

+2

'arr + si * 2 'は有効な16ビットアドレッシングモードではありません。質問には* assembly *タグがあるので、正しいアセンブリコードを提供するといいでしょう:) –

関連する問題