在汇编 (68HC11) 中递增 a table
Increment a table in Assembly (68HC11)
我有一个包含两个数据 tables 和一个结果 table
的程序
ORG $B000
TABLE1 FCB 222, 37, ...
TABLE2 FCB 37, 100, ...
ORG $B010
RESULT RMB 8
我的程序循环遍历每个 table 中的值,并将它们传递给一个函数,该函数会找到它们的最大公分母。返回值通过堆栈传递,需要存储在 Result table 中。这是我目前所拥有的
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
如果有任何不清楚的地方或者您认为问题不好,请发表评论,我会解决的。
您的代码有几个问题。例如,STAA COUNTER,RESULT
不是 68HC11 的有效汇编指令格式。
要将答案存储在 table 中,您需要第三个索引。由于 68HC11 只有 X 和 Y 用于索引,因此您需要使用一个额外的变量来保存额外的索引。如果您的 table 地址是零页范围(0 到 255)中的常量(固定地址),您甚至可以使用单个寄存器访问所有 table。例如:
LDX #0
LDA TABLE1,x
LDB TABLE2,x
...
JSR SUB
STA RESULT,x
INX
...
在我提供完整答案之前,我想先看看 SUB 子例程。对于 SUB return 堆栈上的某些东西,而不首先在堆栈上为其分配所需的 space,它必须对堆栈做一些 'acrobatics' —— 可能但不是正常方式处理这类问题。
通常的方法是在调用 SUB 之前为 returned 结果创建所需的堆栈 space,然后 SUB 将答案写入保留的 space。然而,在这种特殊情况下,除非出于学术目的另有要求,否则将 return 寄存器 A 中的结果而不是在堆栈上分配单个字节并让 SUB 写入它会更简单。
最后,调用 SUB 后的 PULA 会破坏堆栈平衡,因为你之前没有推过就拉(除非你在 SUB 中'acrobatics',我还没有看到。)
请提供更多信息,我会更新我的答案。
我有一个包含两个数据 tables 和一个结果 table
的程序 ORG $B000
TABLE1 FCB 222, 37, ...
TABLE2 FCB 37, 100, ...
ORG $B010
RESULT RMB 8
我的程序循环遍历每个 table 中的值,并将它们传递给一个函数,该函数会找到它们的最大公分母。返回值通过堆栈传递,需要存储在 Result table 中。这是我目前所拥有的
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
如果有任何不清楚的地方或者您认为问题不好,请发表评论,我会解决的。
您的代码有几个问题。例如,STAA COUNTER,RESULT
不是 68HC11 的有效汇编指令格式。
要将答案存储在 table 中,您需要第三个索引。由于 68HC11 只有 X 和 Y 用于索引,因此您需要使用一个额外的变量来保存额外的索引。如果您的 table 地址是零页范围(0 到 255)中的常量(固定地址),您甚至可以使用单个寄存器访问所有 table。例如:
LDX #0
LDA TABLE1,x
LDB TABLE2,x
...
JSR SUB
STA RESULT,x
INX
...
在我提供完整答案之前,我想先看看 SUB 子例程。对于 SUB return 堆栈上的某些东西,而不首先在堆栈上为其分配所需的 space,它必须对堆栈做一些 'acrobatics' —— 可能但不是正常方式处理这类问题。
通常的方法是在调用 SUB 之前为 returned 结果创建所需的堆栈 space,然后 SUB 将答案写入保留的 space。然而,在这种特殊情况下,除非出于学术目的另有要求,否则将 return 寄存器 A 中的结果而不是在堆栈上分配单个字节并让 SUB 写入它会更简单。
最后,调用 SUB 后的 PULA 会破坏堆栈平衡,因为你之前没有推过就拉(除非你在 SUB 中'acrobatics',我还没有看到。)
请提供更多信息,我会更新我的答案。