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

时间:2018-11-16 19:47:40

标签: assembly x86-16

我想创建两个大小均为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]

因此,我以相反的顺序加载a中每个空间的地址,并将该数据移动到b中。这是正确的解决方案吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

在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]

...以此类推,以获取其他值。
希望这会有所帮助。