从字符串执行 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(
缩小。
是否可以从字符串执行 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(
缩小。