在程序集中将一个数组的内容复制到另一个数组

Copying the contents of one array to another in assembly

我想创建 2 个数组,大小均为 5,并填满第一个数组。然后我想用另一个数组中的元素填充空白数组,但顺序相反。 唯一的问题是我不能在这个练习中使用循环,这就是为什么将大小设置为较小的数字,在本例中为 5。

现在,我正在努力解决很多问题,但我的代码如下所示:

a DB 4, 72, 52, 12, 29
b DB 0, 0, 0, 0, 0 ;I don't know how to define an empty array, so I am setting everything to zero

LEA SI, a[4]
MOV b[0], [SI]

LEA SI, a[3]
MOV b[1], [SI]

LEA SI, a[2]
MOV b[2], [SI]

LEA SI, a[1]
MOV b[3], [SI]

LEA SI, a[0]
MOV b[4], [SI]

所以我从相反的顺序加载每个 space 的地址,并将该数据移动到 b。这是正确的解决方案吗?

谢谢。

在 8086 汇编中,您不能在一条指令中同时使用两个内存操作数。您必须使用中间寄存器,也不需要先使用 LEA 指令获取地址。

因此,例如,更改

LEA SI  , a[4]    ; get address of a[4]
MOV b[0], [SI]    ; invalid OpCodes -!!!-

MOV AL  , a[4]    ; mov a[4] to intermediate register AL
MOV b[0], AL      ; mov intermediate register AL to b[0]

...其他值依此类推。
希望这有帮助。