正在加载……
专注、离线、切勿分心
FORTH 系统的内存分布图又可以分为单用户FORTH和多用户poly FORTH 那样的多道程序系统。最简单的就是单用户的FORTH系统:




预编译系统(precompiled  portion)
    在内存低区驻留着系统唯一的预编译部分(已经被编译成词典形式)。在一些系统中,这种代码被保存在磁盘上(通常在1~8块中),当你启动或“引导”计算机时,他被自动装配进RAM低区。在另一些系统中,预编译部分永久驻留在PROM中,只要你一启动计算机它便可以被使用。
    预编译部分通常包括大部分单字长算术运算符和数字格式化词,单字长栈操作符,编辑命令,转移和结构控制词,汇编程序,差不多笔记做到现在遇到过的定义词。也包括文本和地址解释程序。




系统变量(System Variables)
    这个区域包含有预编译部分生成的并可由整个系统使用的“系统变量”。他们一般情况下是不能被用户使用的。




任选定义(Elective Definitions)
    未被预编译的FORTH系统部分以源文本形式保存在磁盘上。这是为了更好的控制使用内存空间,可以根据需要决定装配还是不装配这些定义中的任何部分。所有“任选定义”的装配块称为“任选快”。比如16块,16 LOAD   可以加载一个小屏面编辑程序。




用户词典(User Dictionary)
    在内存中能存贮自己定义的词的区域称为“用户词典”,词典区随着新词的增加向内存高区生成。词典中下一个可以用单元总是由变量 DP 指示。在编译过程中,随着词典条目的增加,指针 DP 也逐单元(或逐字节)地调整。因此,DP 是编译程序的书签;在词典中指向的位置是编译程序下次可编译的地方。
    DP 可能被 ALLOT 使用。ALLOT 使DP向前推进给定数量的字节数。系统中有一个词 HERE 就是用DP实现的 。
DP (  ---  addr  )    词典指针变量,它包含词典中下一个自由存储地址,他的值可以由HERE给出,也可以由ALLOT更改。
HERE   (   ---  addr  )   把下一个可用词典位置的地址留在堆栈顶;(定义里面就用到了上面的指针变量 DP)
            //HERE 来确定自己写的程序占用了多少内存空间





高速暂存缓冲区(The Pad)
    词典中HERE一固定距离有一个小块叫做“高速暂存缓冲区”它通常用于保存先被操作然后送往终端的 ASCII 码字符串。例如,在使用 TYPE 之前,数字格式化词用这个区域来保存转换过程中的数字的 ASCII 码。
    pad的大小没有限制。在大多数系统中,在pad的起点到参数堆栈栈顶之间有数百个甚至数千个字节。
    由于pad的起始地址被规定与最后的词典条目有关,所以每当加入新的定义或执行了 FORGET 或 EMPTY 之后,该起始地址都会发生变化。但是这种安排是安全的。因为当上述时间中的任何一件发生时,pad都不会被用到。词 PAD 给出了pad的当前起始地址。
         //可以看出pad的空间大小是256 (0-255)刚好是一个字节。
PAD  (  ---   addr  )    留下保存中间处理过程数据的暂存区低地址。PAD的地址或内容可以改变,如果下一个可用词典单元的地址被改变,则这些数据被舍弃。PAD的容量为84个字符。




参数堆栈(Parameter Stack)
    数据压入数据堆栈的时候只是栈顶指针的移动;把一个数放入堆栈是,指针先减1,然后数值被存入指针指向的位置。一个数移出堆栈,指针增加1。(堆栈地址是从低到高,数据最先存在在地址高位上,向上增长也是就向着低地址方向增长)。数据堆栈是向下生长(向着地址减小的方向增长)
SP@   (  ---  addr  )   将堆栈顶地址回送到堆栈顶的与计算机相关过程,所说的堆栈顶的地址是指在执行SP@之前的地址。(取出堆栈顶指针)
       //最早放入堆栈中的数据存放在最高位,要想访问前面的数据就要用当前栈顶元素地址+上偏移量,一个字节包含两个8位数据,所以偏移一个要+2.
有了这个就可以随心所欲的访问堆栈中任意位置的元素。(最好不要在编程中使用)
S0  (  ---  addr  )    含有“堆栈指针初始值的用户变量。
SP@  (  ---  addr  )  将堆栈顶地址回送到堆栈顶的与计算机相关过程,所说的堆栈顶的地址是指在执行SP@之前的地址。
栈底由一个 S0 的变量指示。S0 的内容总是“空栈”单元的下一个单元的地址。




输入信息缓冲区(Input Message Buffer)
    S0 也包含着“输入信息缓冲区”的起始地址。输入信息缓冲区向内存高区生成(与pad方向相同)。当从终端输入文本时,文本便存放在此缓冲区,文本解释程序将在此缓冲区内扫描文本。




返回堆栈(Return Stack)
    在输入信息缓冲区的上面是返回堆栈,其操作相同于参数堆栈,但是返回堆栈没有类似于SP@S0这样的高级FORTH词。




用户变量区(User Variables)
    返回堆栈上面就是用于存放“用户变量”的内存区域,这些变量包括 BASES0 ……




块缓冲区(Block Buffers)
    在高端内存区是若干块缓冲区。每个缓冲区为一个磁盘块提供1024个字节空间。当访问磁盘快的时候(显示或装配),系统将该块从磁盘中复制到缓冲区,在缓冲区能由编辑程序修改该块或由 LOAD 解释该块。



posted on 2019-01-04 11:20  正在加载……  阅读(254)  评论(0编辑  收藏  举报