body, table{font-family: 微软雅黑; font-size: 13.5pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

  FORTH 是以词典为核心,以堆栈为基础的自我扩充系统。FORTH 语言允许发挥计算机的效率,并以简明灵活的结构为程序员提供了得心应手的软件开发工具。
  FORTH 核心(Nucleus)的标准命令是用汇编语言直接编写的,也称为 CODE 词。FORTH 中 CODE 词的建立,是使 FORTH 的执行速度快于其他高级语言的一有效措施。           
     CODE 定义的词典条目的格式和冒号定义的词典条目结构基本相同。
     CODE 定义和 冒号定义的区别:
1、在冒号定义的代码指针域中存放的是地址解释程序 NEST 的首址。当执行冒号定义时,首先转去执行地址解释程序,然后再执行存放在词身中的编译地址序列所代表的程序。
     而在 CODE 定义的代码指针域中的内容总是该定义的参数域地址。当执行 CODE 定义时,则是直接执行词身中已汇编好的相应的机器代码序列。
2、当在编译冒号定义的时候,FORTH 计算机处于编译状态。从输入流中摘取的词并不被执行,而是把该词的代码指针域地址 CFA 编入冒号定义的参数域中。
     在汇编过程中,FORTH 计算机处于解释状态。执行所有的汇编定义,其结果是将相应的机器代码编入 CODE 定义的参数域中。汇编过程比编译冒号定义要复杂的多,因此,汇编需要整个 FORTH 系统的支持。
3、当系统在运行中遇到以冒号开头的新定义时,首先使 context 词汇与 current 词汇相一致,然后再把组成该定义的每一个词的地址编译进参数域中,最后将该定义所在支链中的上一个词的 LFA 存入该定义的链接域中,并把该定义的 LFA 作为新的支链端存入当前词汇的参数域。于是完成了新定义的链接工作,使该定义成为一个新的冒号定义。
     遇到 CODE 定义时,使 ASSEMBLER 词汇成为 context 词汇。ASSEMBLER 就把相应的汇编程序段汇编成机器代码存入词典。
4、CODE 定义中,汇编程序段必须由 NEXT 结束,以保证在 CODE 定义执行完毕后,能正确地转移到下一个将要执行的定义的地址。
     冒号定义的最后一个成分是 UNNEST 的 CFA 。

FORTH 83 的 8086 汇编语言
  FORTH 计算机中有一组专门用于存放必不可少的信息和控制程序执行的寄存器:   
SP     参数堆栈指针 RP    返回堆栈指针
IP      解释指针 W     现行词指针
8086寄存器 FORTH 寄存器 功能
AX 累加器
CX 暂存、计数
DX 暂存、输入/输出控制
BX W 现行词指针
SP SP 参数堆栈指针
BP RP 返回堆栈指针
SI IP 解释指针
DI 暂存
// SP 作为数据堆栈的指针。在寄存器中,SP 能自动完成加 1 、减 1 的操作,其他寄存器不能。SI 、DI 除外。
// 8086 中的其他寄存器 AX、CX、DX和DI 能被自由的运用于 CODE 定义中的汇编程序段中,但是不能通过这些寄存器把一个定义中的参数和其他信息传递到另一个定义中去。运用这些寄存器之前不用预置初值,CODE 定义结束也不必恢复,但是如果使用了SP、BP、IP 在 CODE 定义结束必须要恢复原来的值。

Forth 采用CODE定义新词的更多相关文章

  1. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. 采用Lambda表达式快速实现实体模型对象转换到DTO

    在项目中,采用code first时建立的模型对象不能直接用于数据传输,需要从新根据需求建立Dto对象 为什么需要建立Dto对象呢? DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来 ...

  3. Code First :使用Entity. Framework编程(1) ----转发 收藏

    这个是在学习EF CodeFirst时发现的,对于初学者还是不错的.果断转发,方便自己以后查阅和学习. 对于学习Code First 这个教程讲解的还是很详细. 第一章:欢迎来到Code First ...

  4. (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  5. .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  6. 深入理解javascript函数定义与函数作用域

    最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...

  7. .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

  8. C语言中struct位域的定义和使用

    位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...

  9. ArcGIS中的坐标系统定义与投影转换【转】

    ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统 ...

随机推荐

  1. appium启动

    from appium import webdriver from time import sleep capabilitise = { "platformName": " ...

  2. Vue 使用swiper4导致ie或手机浏览器打开空白的问题

    from:https://segmentfault.com/a/1190000015831092 在ie下发现就是swiper的不兼容,一加上去ie就不显示了.结果是swiper版本的问题,最新的sw ...

  3. 网页头部meta标签

    <meta http-equiv="content-Type" content="text/html;charset=UTF-8">    //设置 ...

  4. axf 文件包含太多的调试信息,导致的编译错误

    构建工程时,提示: build\my_test_prj.axf: Error: L6291E: Cannot assign Fixed Execution Region MCU_FLASH1 Load ...

  5. UI框架搭建DAY1

    分析:UI框架主要是为了用户(使用框架的程序猿)更快捷.方便地开发UI,UI框架的好处还在于解耦,使得程序更具有灵活性. UI框架的核心是窗口的管理,窗口管理的主要任务就是显示窗口和关闭窗口. 因为窗 ...

  6. java微信开发之地图定位

    页面代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  7. 使用C#爬小说

    最近因朋友需要在研究如何从网站上爬小说,说到爬,很多人首先想到的是Python,但是因为没有用过Python,加上时程比较紧,就直接使用C#. 其原理也很简单,就是利用HttpWebRequest对象 ...

  8. java static语句的总结

    static 是静态方法,他的引用不需要对象,可以使用类名直接进行引用,当然也不需要this.      由于不需要对象,所以static方法内无法调用非static的方法或对象   至于为什么mai ...

  9. 1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍 (转)

    转载自  斩秋的专栏  http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 Dubbo采用 微内核 + 插件体系,使得设计优 ...

  10. 2019年1月6日 没有nainai吃 习题1

    1列举布尔值是False的所有值 0,False,'',[],{},(),None 2根据范围获取其中3和7整除的所有数的和,并返回调用者:符合条件的数字个数以及符合条件的数字的总和 def func ...