目的是在字典中创建一个Forth单词,然后打印出该单词的记忆内容。第一步很简单。: main
单词是按照教程中所述创建的。创建单词后,字典指针将移动到下一个位置,因此我必须从中减去一些项目,现在可以转储创建单词的内存区域:
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
不幸的是,dump 命令显示的内存区域没有以 : main
开头的部分,并且单词 1 dup ...
中的语句也丢失了。那么新创造的单词到底在哪里呢?如何查看内存中的原始字节?
1)有一个预定义的单词see
它应该做你想要的,查看相应的来源应该给你一个提示。
2)您的方法仅适用于某个内存模型,即将名称和代码放入同一区域,这远不能保证。(我不确定它是否适用于 Gforth)。从dup
、1
、+
等中,您将无法识别任何内容,因为它们被相应的地址或呼叫指令所取代。