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. IdentityServer4授权和认证集成Identity和profile

    identiyt的使用可以看之前的文章:https://www.cnblogs.com/nsky/p/10323415.html 之前的ids4授权服务器都是用的in-men方式把数据添加到内存, 现 ...

  2. 《linux就该这么学》第九节课:第七章,RAID阵列和LVM逻辑卷技术

    笔记 (借鉴请改动) 7.1.RAID(独立冗余磁盘阵列) 常见的几种RAID:RAID0,RAID1,RAID5,RAID10   raid0  实现写入速度但安全性略低. raid1 实现了速度和 ...

  3. 024-母版页MasterPage

    网站的布局通常是统一的,上面是Logo.菜单条.下面是公司地址.版权声明等.如果每个页面都重复做这些功能的话:重复性劳动.一旦修改那么每个页面都要修改..Net中一般用母版(MasterPage)技术 ...

  4. sublime-text3按tab跳出括号

    功能 通过按tab自动跳过右括号,右引号,虽然也可以按右方向键,但离得太远按起来太麻烦 在首选项->按键绑定里添加: { "keys": ["tab"], ...

  5. 【软件工程1916|W(福州大学)_助教博客】团队第一次作业成绩公示

    题目 第一次作业 评分准则: 队名(最好能够体现项目内容,要求有亮点与个性):(1分) 拟作的团队项目描述:一句话(中英文不限):(1分) 队员风采:介绍每一名队员,包括成员性格.擅长的技术.编程的兴 ...

  6. codeforces 982A Row

    题意: 一个01串是否合法满足以下两个要求: 1.没有两个相邻的1: 2.在满足第一个条件的情况下,不能再放下更多的1. 判断一个给定的串是否合法. 思路: 最近cf的A怎么都这么坑啊... 首先是判 ...

  7. flask重要点

    django与flask的区别 django: 大而全的框架,包含了很多组件,例如:ORM.form.ModelForm.session... flask: 轻量级的可扩展强的框架.有丰富的第三方组件 ...

  8. 在java中,将String类型字符串s赋值为null后,将字符串与其他字符串拼接后得到结果出现了null字符串与其他字符连接的样式

    String s = null; s  += "hello"; System.out.println(s); 结果为:nullhello 原因: 先应用String.valueOf ...

  9. u-boot2010.06移植阶段三--norflash驱动

    2011-03-20 23:06:24 学习笔记: 效果图: 参考步骤: 一,把smdk2410 # 改成apple2440 #  1,在board/samsung/apple2440/apple24 ...

  10. SQL小结1

    #数据表的查询框架: select [all | distinct] select_list from tb_name [where 查询条件] [group by <group_by_expr ...