我想创建两个大小均为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中。这是正确的解决方案吗?
谢谢。
答案 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]
...以此类推,以获取其他值。
希望这会有所帮助。