- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向单片机的FOR丁H交叉编译系统
郝立中
西北纺织工学院计算中心 西安710048
摘 要 本文介绍的面向MCS-96系列和MCS-51系列单片机的FORTH交叉编译系统各设计了一种适合
于开发一般的工控应用程序的精简型版本和一种适合于自展开发的版本。本文介绍了它的实现方
案的基本思想,针对MCS-96系列及MCS-51系列单片机的特殊处理,以及它所带的交叉汇编的结构
化设计 .
关键词 FORTH;交叉编译:单片机:交叉汇编;微型机化仪表
FORTH交叉编译系统是一种作为开发工具的系统软件,它可以用来把用FORTH语
言编写的应用程序翻译成目标系统的机器程序。本文介绍笔者设计的面向MCS-96和
MCS-51系列单片机的FORTH交又编译系统。各设计了两种:较小的OCROSS适合于一般
控制软件开发,较大的CROSS适合于FORTH自展开发。
FORTH语言是一种既有高的开发效率又有较高的目标质量的一种高级计算机语
言,同时它兼具面向过程语言和面向问题语言的优点,因此它特别适合于对目标程序
质量要求较高的工业控制系统软件或微型机化仪器仪表控制软件的开发[[1].
1.交叉编译的基本思想
这里采用的实现方案是在资料 2【1基础上的改进。
普通的FORTH系统中,编译、解释和运行是穿插在一起的,每定义一个新的词,
下文马上就可以调用执行。所以FORTH程序中常常在定义应用功能词的中间穿插定义
一些辅助编译用词,这一特点造成了FORTH语言强大的开发能力。但在交叉编译的时
候,情况就和普通FORTH系统中很不一样。交叉编泽工作时是在宿主系统环境下,而
目标程序有待于在另一环境下运行。所以应用功能词在编译过程中不可以运行.而编
译过程中可以执行的那些辅助编译用词又不可以拿到 目标环境中执行。
类似于汇编语言中的 “指令”及 “伪指令”,我们将交叉编译过程中定义的词分
为 “实词”和 “伪词”两种。对实词的定义称作 “实定义”,对伪词的定义称作 “伪
定义”。实词是有待于在 目标环境中执行的词,而伪词是可以在编译过程中直接执行
而不编入 目标程序中的词。实定义在 目标映象中产生代码,而伪定义产生的是宿主系
统的代码。故被编译文本中执行态和编译态中的立即词只可以引用宿主系统提供的
词、交叉编译中规定的词和上文定义的伪词,而目标编译态中的非立即词则只可以引
用上文定义的实词。
我们知道FORTH的高级定义 (冒号定义)中间是编译态,因而被编译程序中韵第
一个实词不能用高级定义,故文本开头的核心部分只能用汇编来描述。所以交叉编译
程序中应该包括一个交叉汇编功能。
显然,交叉编译时的实定义,和普通FORTH系统中定义一个词,其内在功能是不
同的。但是它们的外观作用却很相似。有些应用程序段,在宿主系统环境下仿真运行
通过后,再编入待交又编译的程序文本时,其原有的大多数 “定义”都应改为 “实定
义”。为了尽可能减少此时文字上的修改,我们直接用原有FORTH中的常用定义用词,
来充当交又编译中的 “实定义”用词,如冒号、CODE.CONSTANT.VARIABLE等等。当
然其功能己在交叉编译程序中作了另外的设计。还有,原来的某些编译立即词如IF等,
用在交叉编译中时虽然仍然是编译立即词,但其内部的功能已经不同,也需要另外设
计 。
这些编译词和定义用词虽然是在编译过程中执行的,但它们的运行时代码却应包
320
括在目标系统中,故这些运行时代码应写入被编译文本。我们约定,它应写在第一次
使用该编译词或定义用词之前。
至于伪词,主要是供下文汇编中引用,作用类似于汇编语言中的标号。如
L:name 定义伪词name)代表当前目标地址,其后若接着是汇编程
序段,贝〕name就成为该机器程序的入口地址标号
V-L:name 在目标RAM中留出2字节空间,并定义伪词name代表该空
间地 址
nEQUname) 定义伪词name)代表常数n
等等,其中的L:,V-
文档评论(0)