找回密码
 立即注册
查看: 155|回复: 0

F351(6):Forth是纯结构化的编程语言

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-11-26 17:12:37 | 显示全部楼层 |阅读模式
1Forth是纯结构化的编程语言,Forth语言里没有,也不允许有“goto”语句来让程序跳转到某个地方继续执行。
2)笔者多年来一直在PC-DOS 环境下进行Forth系统的研究工作。2007年开始研究“Forth交叉编译器”,即使用一个运行在DOS环境下的Fort系统,通过对异机种单片机(非80x86指令集)的汇编语言程序进行编译,生成目标机的HEX烧录文件,然后由该单片机的烧录器将HEX文件二进制机器码烧录到单片机后,单片机独立运行。下图上当时的设计说明:
Fig_01_JL Meta.jpg
当时把异机种单片机指令集的汇编语言称为“J#”计算机语言。


3)笔者在20098月就已经用“JL META交叉编译平台”在8051单片机上实现了“JL51 Forth系统”:
Fig_02_JL51系统.jpg
3JL51 Forth系统的特点:
1)单片机:C8051F02064KB FLASH4096字节XDATA256字节IDATA
2JL51 Forth系统的HEX烧录到C8051F单片机中后独立运行,通过RS-232串口与PC机或笔记本电脑通讯。
3PC机上通过“超级终端”软件与单片机通讯。在超级终端上用户可以直接输入“Forth命令”,比如输入“LIST<CR>”,单片机上的Forth系统就会在超级终端的屏幕上列出系统的所有Forth字。
当然也可以输入一行标准Forth程序: 1 2 3 * + .<CR>,这时单片机Forth系统就会将表达式“1+2*3”的计算结果“7”显示在超级终端上。
4JL51系统除了标准的Forth功能外,也增加了8051单片机的功能,比如在PC机超级终端上输入Forth程序“ HEX 55 P0!<CR>”,则就会将十六进制数“55”送给P0端口,连接在P0端口上的LED灯就会交替的亮和不亮。

4JL51 Forth系统使用的Forth语言是纯结构化的编程语言,它只支持下面的语法结构,不支持goto语句:
Fig_03_JL51语法A.jpg

Fig_04_JL51语法B.jpg
58051指令集里面本身就具有类似C语言“goto”语句的“LJMP”长转移指令(转移地址偏移可以为64KB),因此WD-Forth 8051中会有这样的程序:
Main_Loop
将十六进制数 55   写入_P0,
将十六进制数 33   写入_P1,
将十六进制数 F0   写入_P2,
延时500毫秒,
将十六进制数 AA   写入_P0,
将十六进制数 CC   写入_P1,
将十六进制数 0F   写入_P2,
延时500毫秒,
向 Main_Loop 转移,           


6)但是对于Forth 8051汇编语言而言,要想消除“goto”语句,引入结构化编程语法也是很容易得。下图是改进后的结果:
Fig_05_结构化.jpg
经过新增加第108行和第109行的定义,下面的第125行和第135行程序看起来就像C语言一样是“面向结构”的程序了。


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:49 , Processed in 0.116757 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表