【发布时间】:2013-03-11 16:51:54
【问题描述】:
我正在尝试将数组 A 复制到数组 N 中,然后打印该数组(以测试它是否有效)但它输出的只是 -1
这是我的代码:
ORG $1000
START: ; first instruction of program
clr.w d1
movea.w #A,a0
movea.w #N,a2
move.w #6,d2
for move.w (a0)+,(a2)+
DBRA d2,for
move.w #6,d2
loop
move.l (a2,D2),D1 ; get number from array at index D2
move.b #3,D0 ; display number in D1.L
trap #15
dbra d2,loop
SIMHALT ; halt simulator
A dc.w 2,2,3,4,5,6
N dc.l 6
END START ; last line of source
为什么-1 只在输出中?如果有更好的解决方案,那将非常有帮助
【问题讨论】:
-
有些事情一目了然:
N dc.l 6- 我很确定这只会为单个长字分配存储空间(值为 6),而不是为 6 个长字分配存储空间(正如我认为你想要的那样)。move.l (a2,D2),D1 ; get number from array at index D0dbra(参见例如here) -
@user786653 你说得对,应该是
(a2,D2),D1 ; get number from array at index D2。不知道dbra怎么用错了,我想把d2递减到0,否则循环。我将如何为 6 个 long 分配存储空间?谢谢 -
链接页面显示了正确和错误的
dbra用法示例,找到符合您需求的。如何分配存储取决于您使用的汇编程序,但通常类似于ds.l。 -
据我所知,我的问题可以通过转到
endl来解决,这将启动循环,或者将我的循环次数减少 1,因为它会循环 6+1 次而不是 6 次。我尝试了减量,但它仍然不起作用,我不想使用endl。我忘了分配存储是使用ds.l谢谢。 -
看起来你的数据大小到处都是。您正在将地址加载为 16 位(好的,您已经在内存中组织了代码低位,但是......),然后复制单词,但是您尝试通过以字节为单位进行索引来打印它们,但加载为长话...