首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在汇编中增加一个表(68HC11)

在汇编中增加一个表(68HC11)
EN

Stack Overflow用户
提问于 2017-04-05 02:30:32
回答 1查看 270关注 0票数 0

我有一个有两个数据表和一个结果表的程序。

代码语言:javascript
复制
          ORG $B000
TABLE1    FCB        222, 37, ...
TABLE2    FCB        37, 100, ...

          ORG $B010
RESULT    RMB        8

我的程序循环遍历每个表中的值,并将它们传递给一个找到它们最大公分母的函数。返回的值在堆栈上传递,需要存储在结果表中。这是我到目前为止所拥有的

代码语言:javascript
复制
          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

代码语言:javascript
复制
         STAA    COUNTER,RESULT
         INC     COUNTER

如果有什么不清楚的地方,或者你认为这个问题很糟糕,请发表评论,我会解决的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 12:50:54

您的代码有几个问题。例如,STAA COUNTER,RESULT不是68HC11的有效组装指令格式。

要将答案存储在表中,需要第三个索引。由于68HC11只有X和Y用于索引,因此需要使用额外的变量来保留额外的索引。如果您的表地址是零页范围(0到255)中的常量(固定地址),您甚至可以使用单个寄存器访问所有表。例如:

代码语言:javascript
复制
LDX #0
LDA TABLE1,x
LDB TABLE2,x
...
JSR SUB
STA RESULT,x
INX
...

在给出一个完整的答案之前,我想看看子例程。要想在堆栈上返回一些东西,而没有首先在堆栈上为它分配所需的空间,它必须对堆栈做一些‘杂技’--可能的,但不是处理这种问题的正常方法。

通常的方法是在调用SUB之前为返回的结果创建所需的堆栈空间,然后sub会将答案写入该保留空间。但是,在这种特殊情况下,除非出于学术目的,否则只在寄存器A中返回结果,而不是在堆栈上分配单个字节,并对其进行子写比较简单。

最后,调用SUB后的PULA正在破坏堆栈平衡,因为您之前没有按过(除非您在潜艇中执行“杂技”,这一点我还没有看到)。

请提供更多的资料,我会更新我的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43220813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档