我有一个包含两个数据表和一个结果表的程序
ORG $B000
TABLE1 FCB 222, 37, ...
TABLE2 FCB 37, 100, ...
ORG $B010
RESULT RMB 8
我的程序循环遍历每个表中的值,并将它们传递给找到最大公分母的函数。返回的值通过堆栈传递,需要存储在Result表中。这是我到目前为止所拥有的
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
上面的代码和我的子程序一样正常工作。我无法弄清楚如何增加我的RESULT变量。我尝试使用循环计数器作为偏移但由于某种原因,下面的代码存储在位置$ B019而不是$ B010
STAA COUNTER,RESULT
INC COUNTER
如果有任何不清楚的地方,或者您认为问题不好,请发表评论,我会解决。
答案 0 :(得分:1)
您的代码存在一些问题。例如,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在堆栈中返回某些东西而没有先在堆栈上分配所需的空间,它必须做一些杂技'堆栈 - 可能但不是处理这类问题的正常方法。
通常的方法是在调用SUB之前为返回的结果创建所需的堆栈空间,然后SUB会将答案写入该保留空间。但是,在这种特殊情况下,除非出于学术目的而要求其他方法,否则只需将结果返回到寄存器A而不是在堆栈上分配单个字节,并将SUB写入它
最后,调用SUB之后的PULA正在摧毁堆叠平衡,因为你在没有推动之前拉动(除非你在SUB中做杂技'我还没见过。)
请提供更多信息,我会更新我的答案。