如何在Forth中转储单词?

时间:2019-01-14 10:45:45

标签: forth gforth

目的是在词典中创建一个Forth单词,然后打印出该单词的内存内容。第一步很容易。 U字的创建方式与教程中所述相同。创建单词后,字典指针将移至下一个位置,因此我必须从中减去一些项目,现在可以转储创建单词的内存区域了:

: main

不幸的是,dump命令显示的内存区域没有以\ create a dummy routine : main 1 dup + . ; \ put dictionary pointer to the stack \ and subtract 50 indizies dp 50 - \ print out 20 cells to the screen from dp-50 until dp+50 \ but where is my newly created routine ": main"? 100 dump bye ------ gforth "a.fs" 7F81DF443FC6: 00 00 20 17 12 AF 60 55 - 00 00 04 00 00 00 00 00 .. ...`U........ 7F81DF443FD6: 00 00 A0 58 14 AF 60 55 - 00 00 10 00 00 00 00 00 ...X..`U........ 7F81DF443FE6: 00 00 FF FF FF FF FF FF - FF FF 00 00 00 00 00 00 ................ 7F81DF443FF6: 00 00 50 82 49 DF 81 7F - 00 00 F8 3F 44 DF 81 7F ..P.I......?D... 7F81DF444006: 00 00 08 82 49 DF 81 7F - 00 00 F0 81 49 DF 81 7F ....I.......I... 7F81DF444016: 00 00 32 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ..2............. 7F81DF444026: 00 00 00 00 开头的部分,并且单词: main中的语句也丢失了。那么,新创建的单词到底在哪里?如何查看内存中的原始字节?

1 个答案:

答案 0 :(得分:5)

1)有一个预定义的单词see可以满足您的要求,并查看相应的源代码可以为您提供提示。

2)您的方法仅适用于特定的内存模型,即e。将名称和代码放在同一区域,这是远远不能保证的。 (我不确定它是否适用于 Gforth )。在dup1+等中,您将一无所获,因为它们已被相应的地址或呼叫说明所取代。