2016-06-27 46 views
3

當我嘗試將BX寄存器中的值移動到數組元素時,該值完全更改。
假設例如,我的陣列是{0,4,4},所述SI寄存器等於1,和colorNum = 3(colorNum和陣列都在字大小)。使用mov將數值從寄存器更改爲數組

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

在此之後,我可以在陣列現在是調試器看到:{769,0,4}
我根本不知道哪裏出了問題,因爲它應該是:{0, 3,4}

我應該改變什麼才能將適當的值移動到數組中?

+2

如果每個元素都是一個WORD,則si必須是2才能存儲到第二個元素。你確定原始數組不是「{1,4,4}」嗎?這將解釋'{769,0,4}' –

+0

如果'si'是正確的並且它已經是'2 * index'會怎麼辦?這是不可能的。 –

回答

2

表達式arr + si相當於(char*)arr+1

我們假設的word大小爲2:mov [arr + si], bx,你正在寫一個word值到數組的第一個單元和陣列的第二單元的上半年下半年。因此您需要用替換arr + si

+0

回答,謝謝! –

+0

@AlonGroberman:不客氣。 –

+2

'arr + si * 2'不是有效的16位尋址模式。由於該問題有* assembly *標記,因此提供一些正確的彙編代碼會很好:) –