【问题标题】:CA65: 'Range error' from 16-bit computed addressCA65:来自 16 位计算地址的“范围错误”
【发布时间】:2013-05-17 18:21:31
【问题描述】:

给定以下 CA65 代码:

foo = $82

.scope
        LDA #$ff
        STA foo*$40
.endscope

我收到此错误消息:

foo.s(5): Error: Range error (8320 not in [0..255])

有趣的是,以下版本按预期工作:

foo = $82

        LDA #$ff
        STA foo*$40

那么我如何让这个在.scope 中工作?

【问题讨论】:

    标签: assembly 6502 c64 commodore ca65


    【解决方案1】:

    如果您从.scope.proc 中引用全局符号,有时您必须明确声明该符号在全局范围内而不是内部范围内。为此,您可以在符号前添加“paamayim nekudotayim”(冒号对)运算符:::spam。我主要通过.if 之类的东西注意到这一点。

    以下在ca65中编译:

    foo = $82
    
    .scope
            LDA #$ff
            STA ::foo*$40
    .endscope
    

    【讨论】:

      【解决方案2】:

      我不确定为什么 scope 会导致问题,但您似乎需要告诉汇编器 STA 是绝对的,而不是它推断的零页引用:

      foo = $82
      
      .scope
              LDA #$ff
              STA a:foo*$40
      .endscope
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 2010-09-08
        • 1970-01-01
        • 2011-12-01
        相关资源
        最近更新 更多