从字符串执行 TI BASIC

Executing TI BASIC from a String

是否可以从字符串执行 TI BASIC?这样: execute(":Disp Str1") 会打印出 Str1 吗?

不幸的是,不,不是这样的 - expr 和 eval 仅适用于表达式。

这可以用一个小的 Asm( 程序来完成,该程序接受一个字符串(来自 Ans),将其转换为 BASIC 程序并执行它。例如:

.nolist
#include "ti83plus.inc"
.list
    .org userMem-2
    .db $BB,D
    ld hl,SavesScreen
    ld (hl),tTheta
    inc hl
    ld (hl),0
    inc hl
    push hl
    bcall(_AnsName)
    rst rFindSym
    ex de,hl
    ld c,(hl)
    inc hl
    ld b,(hl)
    dec hl
    inc bc
    inc bc
    pop de
    ldir
    ld hl,SavesScreen
    ld a,6
    bcall(_ExecuteNewPrgm)
    ; no ret because _ExecuteNewPrgm does not return

这不理想,

  • 如果 Ans 不包含字符串(可以添加)则不安全。
  • 名为θ的程序不应该存在,因为它会被覆盖。如果 prgmθ 已经存在并被存档,那么它根本不起作用。 (可以改进)
  • prgmθ之后没有删除。 (不知道该怎么做)
  • prgmθ 完成后,它退出到主屏幕,它不会 return 到调用程序。 (不知道该怎么做)

除此之外,它确实有效,例如:

:"TESTING->Str1
:":Disp Str1
:Asm(prgmRUNSTR

之后看起来像这样:

您可以通过在普通程序中键入以下内容来创建汇编程序:

AsmPrgmBB6D21
EC86365B2336
0023E5EF524B
D7EB4E23462B
0303D1EDB021
EC863E06EF3C
4C

可以用AsmComp(缩小。