assembly - CA65:来自 16 位计算地址的 'Range error'

标签 assembly 6502 c64 commodore ca65

给出以下 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 中工作?

最佳答案

如果您从 .scope.proc 内部引用全局符号,有时您必须明确声明该符号位于全局范围内,并且不是内部范围。您可以通过在符号 ::spam 之前添加“paamayim nekudotayim”(冒号对)运算符来实现此目的。我注意到这一点主要是在 .if 之类的事情上。

以下内容在 ca65 中编译:

foo = $82

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

关于assembly - CA65:来自 16 位计算地址的 'Range error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615553/

相关文章:

使用优化标志编译 C

assembly - 比较击键 - assembly CCS64

emulation - 对于 6502 Cpu,当 X 和 Y 为 0 时递减(DEX/DEY 操作码)

assembly - ca65:包含 Guard 生成 "Error: Identifier expected"

C64 代码艺术的 Bash 版本 : 10 PRINT CHR$(205. 5+RND(1)); : 转到 10

assembly - 在 VICE 模拟器中加载 PRG 文件后出现 C64 内存不足错误

performance - 如果 CPU 是二进制机器,为什么它在位操作上很慢?

assembly - 如何在汇编 8086 中使用带符号整数的 ADD 指令?

c - 在用 C 语言设计编译器时如何集成汇编代码?