汇编程序内存不足

out of program memory in assembly

我为 ATmega32 编写了一个程序来获取 8 位数字并以 7 段显示,但是当我在 Proteus 中模拟它时,它显示程序内存不足我应该怎么做?

.INCLUDE "M32DEF.INC"
.ORG [=10=]
//data to save in program memory
.DB $FC,,E,A,$B2,$DA,$DE,,$FE,$FA
.ORG 
LDI R16,
//Statements

.ORG 指令看起来不正确。处理器从地址 0 开始执行指令,但您已将数据放在那里。同样,有 10 个字节的数据,但只有 8 个字节可以放置它们。我不确定数据的用途,因为你没有给它一个标签。应该是说明书吧?是液晶显示器的数字吗?

如果您在代码中添加一些注释来描述您的程序试图做什么,将会很有帮助。我可以看到设置堆栈指针和设置端口方向的部分,但我不想尝试分析循环。告诉我们你的意思。

首先,您可以尝试改变 .ORG 个位置。通常,一个程序会有一个标记为 "main:" 的部分,其中 .ORG [=13=] 处的第一条指令是跳转到 main。这样您就可以将数据放在程序的顶部,比如 .ORG ,这样在代码中很容易找到,但不会被错误执行。

.INCLUDE "M32DEF.INC"
.ORG [=10=]
jmp main

.ORG 
digits: .DB $FC,,E,A,$B2,$DA,$DE,,$FE,$FA

main:
LDI R16, ; set stack pointer
OUT SPH,R16
LDI R16,[=10=]
OUT SPL,R16

and so on