如何在通过Forth创建的汇编代码中调用Forth函数?
用Forth汇编语法调用已有Forth函数的问题与解决
问题背景
我创建了一个仅调用.的Forth单词,使用see查看其汇编代码如下:
: mytest . ; see mytest MYTEST ( 0010D7B0 E8BB70F1FF ) CALL 00024870 . ( 0010D7B5 C3 ) RET/NEXT ( 6 bytes, 2 instructions )
尝试实现时的错误
我尝试用CODE和END-CODE语法手动实现相同功能,编写了以下代码:
CODE mytest2 CALL 00024870 . NEXT, END-CODE
在命令行运行时触发错误:
Err# -4 ERR: Data stack underflow. Source: "/Users/xxx/scratch/forth/test1.fth" on line 3 -> NEXT, ^ Received SIGHUP or SIGTERM
请问是否可以通过Forth的汇编语法创建单词并调用已有Forth函数?是语法错误还是该功能无法实现?
运行环境:VfxForth、x86_64架构、Linux系统。
问题解决
问题已解决!函数地址00024870实际是十六进制,但反汇编的显示格式容易被误认为十进制。修改代码为以下形式后成功运行:
CODE mytest2 CALL 0x00024870 NEXT, END-CODE
使用see查看mytest2的反汇编,得到预期结果:
see mytest2 MYTEST2 ( 0010D9B0 E8BB6EF1FF ) CALL 00024870 . ( 0010D9B5 C3 ) RET/NEXT
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

