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