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. Olap学习笔记

    数据仓库建设--OLAP和数据立方体概念 http://student-lp.iteye.com/blog/2263154 OLAP(On-LineAnalysis Processing)在线分析处理 ...

  2. Django框架详细介绍---视图系统

    Django视图系统 1.什么是视图 在Django中,一个视图函数/类,称为视图.实质就是一个用户自定义的简单函数,用来接收WEB请求并xing响应请求,响应的内容可以是一个HTML文件.重定向.一 ...

  3. spring AOP自定义注解方式实现日志管理

    今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...

  4. vue mandmobile ui实现三列列表的方法

    vue mandmobile ui实现三列列表的方法 请问这种列表的要用那个组件好呢?Cellitem 只能用到两列,这个要三列的怎么弄?mand的好像没有listview,grid组件的 问了man ...

  5. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图

    vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...

  6. 腾讯云服务器使用smtp发送邮件

    问题:在腾讯云服务器上使用自编写的邮件服务失败.查其原因,是该邮件服务调用smtpclient.Send(mailMessage)时,出现错误:由于连接方在一段时间后没有正确答复或连接的主机没有反应, ...

  7. 使用 mysqladmin debug 查看死锁信息

    使用 mysqladmin debug 查看死锁信息 mysqladmin -S /mysql/data/mysql.sock debug 然后在error日志中,会看到: 11 lock struc ...

  8. UI自动化(四)css样式

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. 剑指offer(2)替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 题目分析 我们如果要替换空格,两步 ...

  10. log4net:ERROR ConfigureFromXml called with null 'element' parameter

    场景重现 ASP.NET Core 下集成 log4net 时, 运行时报错如下: log4net:ERROR ConfigureFromXml called with null 'element' ...