每次我为TI-83 +计算器(Z80处理器)组装应用程序时,它都会停止在CALL上运行。这是一个示例(“Hello”) - 它开始运行得很好,但计算器在CALL指令处冻结。我在CALL之前放的任何东西都运行得很好,我放的任何东西都没有运行。这是代码的反汇编,用于显示地址而不是标签。我已经“触摸它”来显示那些落入的DB行,以便于阅读。
我从未遇到过编写程序集“程序”(将其加载到RAM中)的问题。我所知道的运行“应用程序”(保存在Flash ROM中)的唯一问题是它们无法自我修改,并且由于需要分页,因此无法访问单独页面上的数据。这不是自我修改的,只有一页......我做错了什么?
0080 218900 LD HL, 0089h
0083 cd9900 CALL 0099h ; --- App stops here
0086 c38f00 JP 008fh
0089 48656c6c6f00 DB "Hello", 0
008f fd360500 LD (IY+05h), 0
0093 ef RST 28h ; B_CALL (
0094 364c DB 4C36h ; _ReloadAppEntryVecs)
0096 ef RST 28h ; B_CALL (
0097 2740 DB 4027h ; _JForceCmdNoChar) --- App should end here
0099 7e LD A, (HL) ; --- Call goes to here
009a ef RST 28h ; B_CALL (
009b 0445 DB 4504h ; _PutC)
009d fe00 CP 0
009f c8 RET Z
00a0 23 INC HL
00a1 18f6 JR 0099h
答案 0 :(得分:9)
显然,你正在组装以解决0080h问题。这可能不正确,因为地址范围0000h - 3FFFh被锁定到ROM页面0.实际上,根据this example,,你组装到4000h。所以你的问题是你的CALL跳进了固件,而不是你应用程序的一部分。
答案 1 :(得分:2)
这是我为Ti-83 +找到的memory map。您无法在$ 0080地址加载此程序,这就是ROM所在的位置。它被装载到其他地方。这有效一段时间,直到你做JP或CALL。 CALL $ 0099没有跳转到你预期的跳转地址,它会跳转到ROM。这是一个快速结束。
您需要在.asm中选择正确的ORG指令,以便将其加载到预期地址的RAM中。无论在哪里。