使用mov从寄存器到数组

时间:2016-06-27 10:45:39

标签: arrays assembly x86

当我尝试将值从BX寄存器移动到数组元素时,值会完全改变 比方说,例如我的数组是{0,4,4},SI寄存器等于1, colorNum = 3( colorNum 和数组都是字大小。)

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

在此之后,我可以在调试器中看到该数组现在是:{769,0,4}
我根本不知道出了什么问题,应该是:{0,3,4}

为了将正确的值移动到数组,我应该更改什么?

1 个答案:

答案 0 :(得分:2)

表达式arr + si相当于(char*)arr+1

假设word的大小为2:mov [arr + si], bx,您正在将word值写入数组的第一个单元格的后半部分和上半部分数组的第二个单元格。

因此,您需要将arr + si替换为等效于(char*)arr+1*sizeof(word)的表达式。