四类程序

前几天读了沈公的《也谈写写编译器》,很认同其观点。我也赞同“编译原理”就像数据结构一样是很基础、很实用的课程:“unix/linux 下随便哪个项目为了方便都可能随手做一个, 这是 unix 程序员的基本功”。但很可惜我们学校软件工程专业不开设编译原理,理由是学了没用。

我们都知道“程序=数据结构+算法”,我们姑且通俗地说是程序由“数据”和处理数据的“行为”组成。根据程序对数据和行为的控制,可以将其归类为“硬编码”、“可配置”、“可控制”以及“可编程”四类。下面以简易计算器为例依次讨论。

硬编码

此级别的程序,数据和行为都是硬编码到代码中,执行时用户不能改变。比如在C程序中直接printf ( "%d/n", 1+2 );。这时候程序的数据“1”、“2”和行为“+”都是固定不必的。

硬编码的程序在实际应用中不常见。

可配置

到了可配置级别,程序的行为依然固定,但数据由用户来决定。比如ACM的经典入门题“a+b”:scanf ( "%d%d", &a, &b ); printf ( "%d/n", a + b );。此时程序行为依然是求和,但数据是运行时才确定,程序变得比较灵活。

为可配置的程序提供的数据文本,可以看作是一种数据格式(Data formats)。比如 /etc/passwd。

可控制

可控制的程序比可配置更灵活,运行时用户不仅可以指定数据,还能指定处理该数据的行为。即运算符“+、-、×、÷”也由用户指定。例如scanf ( "%d%c%d", &a, &c, &b );,接下来用switch (c) 分别处理四则运算。可控制就是指程序的行为可控制,但行为的范围依然是固定的。也就是说用户指定的行为必须是程序本身提供的,程序只能进行四则运算,求根、阶乘等运算行为程序没提供,因此就无法使用。

此时,程序的数据文本具有隐式操作,可以理解成一种暗含控制流的声明性语言。例如 fetchmail(1) 的运行控制语法可视为一种很弱的命令性语言。

可编程

可编程的程序,已经同时具备“输入输出、算数运算、内存管理、按条件跳转”四种性质(请参考前文《用DOS批处理来做数字图像处理)。此时程序的行为是可扩展的,例如能通过迭代来运算阶乘。

此时的程序已经发展到命令性(具有显示操作)的微型语言范畴,几乎快成为通用解释器。bc(1) 和 dc(1) 都是完备图灵机语言的好例子,它们都是命令性微型语言。


版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者“redraiment”和主站点上的本文原始地址


我的邮箱,欢迎来信(redraiment@gmail.com
我的玩具箱(子清行
我的百度空间(梦婷轩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为一个语言模型AI,我无法直接提供图片或图表等视觉化内容。但是,我可以为您解释四类指令的执行流程。 四类指令包括数据传输指令、算术运算指令、逻辑运算指令和程序转移指令。它们的执行流程如下: 1. 数据传输指令:数据传输指令用于将数据从一个地方传输到另一个地方。执行流程如下: - 从指令存储器中读取指令; - 将指令中的源操作数(如寄存器或内存地址)读入到CPU的数据总线; - 将数据从源操作数传输到目的操作数(如寄存器或内存地址); - 将指令计数器加1。 2. 算术运算指令:算术运算指令用于执行加减乘除等算术运算操作。执行流程如下: - 从指令存储器中读取指令; - 将指令中的操作数(如寄存器或内存地址)读入到CPU的数据总线; - 执行相应的算术运算; - 将结果存回操作数(如寄存器或内存地址)中; - 将指令计数器加1。 3. 逻辑运算指令:逻辑运算指令用于执行与、或、非等逻辑运算操作。执行流程如下: - 从指令存储器中读取指令; - 将指令中的操作数(如寄存器或内存地址)读入到CPU的数据总线; - 执行相应的逻辑运算; - 将结果存回操作数(如寄存器或内存地址)中; - 将指令计数器加1。 4. 程序转移指令:程序转移指令用于改变指令执行的顺序。执行流程如下: - 从指令存储器中读取指令; - 根据指令中的条件(如无条件转移或条件转移)和转移地址(如绝对地址或相对地址),计算出下一条要执行的指令地址; - 将指令计数器设置为下一条要执行的指令地址。 希望这些解释能够帮助您理解四类指令的执行流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值