Arrays 将其内容向后复制到另一个数组的数组工作不正常
当我运行此代码时,我的理解是Arrays 将其内容向后复制到另一个数组的数组工作不正常,arrays,assembly,x86,masm,Arrays,Assembly,X86,Masm,当我运行此代码时,我的理解是arrayA将向后复制到arrayB。因此,当我试图查看arrayB[1]中的内容时,它应该是6,但结果是0 我知道这个代码效率很低。这只是使用运算符offset、sizeof和lengthof避免直接访问内存和使用常量的练习。我是一名学生,所以最简单的方法就是最好的方法 .386 .model flat,stdcall ; memory system .stack 4096 ; declare stack memory size 4kb ExitProcess
arrayA
将向后复制到arrayB
。因此,当我试图查看arrayB[1]
中的内容时,它应该是6,但结果是0
我知道这个代码效率很低。这只是使用运算符offset
、sizeof
和lengthof
避免直接访问内存和使用常量的练习。我是一名学生,所以最简单的方法就是最好的方法
.386
.model flat,stdcall ; memory system
.stack 4096 ; declare stack memory size 4kb
ExitProcess proto,dwExitCode:dword
.data
arrayA word 01d, 05d, 06d, 02d
arrayB word 00d, 00d, 00d, 00d
.code
main proc
mov eax, 0
mov esi, offset arrayA
mov ecx, sizeof arrayA
mov ebx, lengthof arrayB
sub ebx, 1
L1:
mov ax, [esi]
add esi, type arrayA
mov arrayB[ebx], ax
sub ebx, 1
sub ecx, type arrayA
cmp ecx, 0
jne L1
mov ax, arrayB[1]
invoke ExitProcess,0
main endp
end main
看起来代码没有正确地适应
arrayB
是word
。需要将sub-ebx,1
更改为sub-ebx,键入arrayB
和mov-ax,arrayB[1]
更改为mov-ax,arrayB[type-arrayB]
(对于word
,键入arrayB为2
)。好的,我试过了,但没用,你不需要先从ebx中减去1,这样它就得到第四个值了吗(索引3)在循环开始时,每个循环执行一次?因为我在开始时将arrayB的长度存储在ebx中,即4。您有单词。每个是2字节。您必须执行与arrayA
相同的操作,即按2
aka缩放所有内容。typeof arrayB
。编辑:我看到您使用了lengthof
,它给出了它em count不是字节大小,所以您也应该更改它。您需要将所有内容按2缩放,因为每个字都是2个字节。寻址工作在字节上。因此arrayB[1]
返回第一个项的上半部分与第二个项的下半部分组合。这应该可以工作。