Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 将其内容向后复制到另一个数组的数组工作不正常_Arrays_Assembly_X86_Masm - Fatal编程技术网

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]
返回第一个项的上半部分与第二个项的下半部分组合。这应该可以工作。