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. 细说@Html.ActionLink()的用法

    一.@Html.ActionLink()概述 在MVC的Rasor视图引擎中,微软采用一种全新的方式来表示从前的超链接方式,它代替了从前的繁杂的超链接标签,让代码看起来更加简洁.通过浏览器依然会解析成 ...

  2. java poi 合并 word文档

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import jav ...

  3. Interesting (manacher + 前缀和处理)

    题意:相邻的两端回文串的价值为两个回文串总的区间左端点 × 区间右端点.然后计算目标串中所有该情况的总和. 思路:首先用manacher求出所有中心点的最大半径,然后我们知道对于左区间我们把贡献记录在 ...

  4. codeforces 982B Bus of Characters

    题意: 有n排座位,每排有两个座位,每排座位的宽度都不一样. 有2 * n个人要上车,如果是内向的人,那么它会选择一排两个都是空位并且宽度最小的一排去坐: 如果是外向的人,会选择一排座位已经有人坐的, ...

  5. JavaScript 原型链学习(三)原型对象存在的问题 与 组合使用构造函数和原型

    原型对象也不是没有缺点.首先,它省略了为构造函数传递初始化参数这一环节, 结果所有实例在默认情况下都将取得相同的属性值.虽然这会在某种程度上带来一些不方便, 但还不是原型对象的最大问题.原型对象的最大 ...

  6. opencv计算两个轮廓之间hu矩相似程度,MatchShapes

    https://blog.csdn.net/jiake_yang/article/details/52589063 [OpenCV3.3]通过透视变换矫正变形图像 https://blog.csdn. ...

  7. Java中static的用法解析

    知识点1.static关键字a.可以修饰变量,方法,代码块b.修饰的变量和方法可以使用类名.变量名/类名.方法名调用c.static修饰的资源为静态资源,在类加载的时候执行d.在静态方法中只能调用静态 ...

  8. JS访问或设置cookie的方法+跨域调用方法

    无意中从163网站获取的JS访问或设置cookie的方法,Log到日志上以防遗忘 //COOKIE功能检查function fCheckCookie(){    if(!navigator.cooki ...

  9. js同步、异步、回调的执行顺序以及闭包的理解

    首先,记住同步第一.异步第二.回调最末的口诀 公式表达:同步=>异步=>回调 看一道经典的面试题: for (var i = 0; i < 5; i++) { setTimeout( ...

  10. 机器学习实战1-2.1 KNN改进约会网站的配对效果 datingTestSet2.txt 下载方法

    今天读<机器学习实战>读到了使用k-临近算法改进约会网站的配对效果,道理我都懂,但是看到代码里面的数据样本集 datingTestSet2.txt 有点懵,这个样本集在哪里,只给了我一个文 ...