Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用mov将值从寄存器更改为数组_Arrays_Assembly_X86 - Fatal编程技术网

Arrays 使用mov将值从寄存器更改为数组

Arrays 使用mov将值从寄存器更改为数组,arrays,assembly,x86,Arrays,Assembly,X86,当我尝试将值从BX寄存器移动到数组元素时,该值会完全更改。 比如说,我的数组是{0,4,4},SI寄存器等于1,colorNum=3(colorNum和数组都是字大小) 接下来,我可以在调试器中看到数组现在是:{769,0,4} 我只是不知道出了什么问题,应该是:{0,3,4} 要将正确的值移动到数组,我应该更改什么?表达式arr+si相当于(char*)arr+1 假设word的大小为2:使用mov[arr+si],bx,将word值写入数组第一个单元格的后半部分和数组第二个单元格的前半部分

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

接下来,我可以在调试器中看到数组现在是:{769,0,4}
我只是不知道出了什么问题,应该是:{0,3,4}


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

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

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


因此,您需要将
arr+si
替换为一个表达式,该表达式相当于
(char*)arr+1*sizeof(word)

如果每个元素都是一个单词,
si
必须为2才能存储到第二个元素。您确定原始数组不是
{1,4,4}
?这将解释
{769,0,4}
如果
si
是正确的,并且它已经是
2*索引了怎么办?无法确定是否是这种情况。
arr+si*2
不是有效的16位寻址模式。由于问题有汇编标记,最好提供一些正确的汇编代码:)@MargaretBloom:我同意,我最初只写了“您需要使用一个相当于
(char*)arr+1*sizeof(word)
”的表达式”。我会回复的,谢谢你指出。。。
mov bx, [colorNum]
mov [arr + si], bx