在程序集中将一个数组的内容复制到另一个数组
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]
...其他值依此类推。
希望这有帮助。
我想创建 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]
...其他值依此类推。
希望这有帮助。