如果我创建一个简单地调用.
的第四个单词,我可以看到它看起来像这样
: 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
当mytest 2被分解时,我得到了我想要的:
see mytest2
MYTEST2
( 0010D9B0 E8BB6EF1FF ) CALL 00024870 .
( 0010D9B5 C3 ) RET/NEXT
1条答案
按热度按时间vbopmzt11#
只是张贴我自己的答案,以帮助任何人可能会绊倒在这一点上。
问题是要调用的函数的地址
00024870
是十六进制的,它以一种可能是十进制的格式显示出来,所以当我用0x00024870
将00024870
公开地转换成十六进制时,它是有效的:当mytest2被分解时,我得到了我想要的:
另外,请注意,
CALL
语句末尾的.
不是法律的的汇编。相反,反汇编程序(某种程度上)会帮助添加地址Map到的函数的第四个名称。因此,如果我调用.S
来查看堆栈,它会将.S
放在那里。