我有一个有两个数据表和一个结果表的程序。
ORG $B000
TABLE1 FCB 222, 37, ...
TABLE2 FCB 37, 100, ...
ORG $B010
RESULT RMB 8我的程序循环遍历每个表中的值,并将它们传递给一个找到它们最大公分母的函数。返回的值在堆栈上传递,需要存储在结果表中。这是我到目前为止所拥有的
ORG $C000
LDX #TABLE1
LDY #TABLE2
WHILE LDAA 0,X WHILE (*TABLE1 != -1)
CMPA #$FF
BEQ ENDWHILE
LDAA 0,X PASS VARIABLES TO
LDAB 0,Y SUBROUTINE IN REGISTER
INX TABLE1++
INY TABLE2++
JSR SUB
PULA
STAA RESULT GET RETURN VALUE FROM STACK上面的代码和我的子程序一样正常工作。我不知道如何增加结果变量。我尝试使用循环计数器作为偏移量,但出于某种原因,下面的代码存储在$B019位置,而不是$B010
STAA COUNTER,RESULT
INC COUNTER如果有什么不清楚的地方,或者你认为这个问题很糟糕,请发表评论,我会解决的。
发布于 2017-04-05 12:50:54
您的代码有几个问题。例如,STAA COUNTER,RESULT不是68HC11的有效组装指令格式。
要将答案存储在表中,需要第三个索引。由于68HC11只有X和Y用于索引,因此需要使用额外的变量来保留额外的索引。如果您的表地址是零页范围(0到255)中的常量(固定地址),您甚至可以使用单个寄存器访问所有表。例如:
LDX #0
LDA TABLE1,x
LDB TABLE2,x
...
JSR SUB
STA RESULT,x
INX
...在给出一个完整的答案之前,我想看看子例程。要想在堆栈上返回一些东西,而没有首先在堆栈上为它分配所需的空间,它必须对堆栈做一些‘杂技’--可能的,但不是处理这种问题的正常方法。
通常的方法是在调用SUB之前为返回的结果创建所需的堆栈空间,然后sub会将答案写入该保留空间。但是,在这种特殊情况下,除非出于学术目的,否则只在寄存器A中返回结果,而不是在堆栈上分配单个字节,并对其进行子写比较简单。
最后,调用SUB后的PULA正在破坏堆栈平衡,因为您之前没有按过(除非您在潜艇中执行“杂技”,这一点我还没有看到)。
请提供更多的资料,我会更新我的答案。
https://stackoverflow.com/questions/43220813
复制相似问题