當我嘗試將BX
寄存器中的值移動到數組元素時,該值完全更改。
假設例如,我的陣列是{0,4,4},所述SI
寄存器等於1,和colorNum = 3(colorNum和陣列都在字大小)。使用mov將數值從寄存器更改爲數組
mov bx, [colorNum]
mov [arr + si], bx
在此之後,我可以在陣列現在是調試器看到:{769,0,4}
我根本不知道哪裏出了問題,因爲它應該是:{0, 3,4}
我應該改變什麼才能將適當的值移動到數組中?
當我嘗試將BX
寄存器中的值移動到數組元素時,該值完全更改。
假設例如,我的陣列是{0,4,4},所述SI
寄存器等於1,和colorNum = 3(colorNum和陣列都在字大小)。使用mov將數值從寄存器更改爲數組
mov bx, [colorNum]
mov [arr + si], bx
在此之後,我可以在陣列現在是調試器看到:{769,0,4}
我根本不知道哪裏出了問題,因爲它應該是:{0, 3,4}
我應該改變什麼才能將適當的值移動到數組中?
表達式arr + si
相當於(char*)arr+1
。
我們假設的word
大小爲2:mov [arr + si], bx
,你正在寫一個word
值到數組的第一個單元和陣列的第二單元的上半年下半年。因此您需要用替換arr + si
。
回答,謝謝! –
@AlonGroberman:不客氣。 –
'arr + si * 2'不是有效的16位尋址模式。由於該問題有* assembly *標記,因此提供一些正確的彙編代碼會很好:) –
如果每個元素都是一個WORD,則si必須是2才能存儲到第二個元素。你確定原始數組不是「{1,4,4}」嗎?這將解釋'{769,0,4}' –
如果'si'是正確的並且它已經是'2 * index'會怎麼辦?這是不可能的。 –