浅谈同一流程图下如何精简汇编指令

时间:2022-06-17 07:01:30

摘要:笔者在《单片机》课程教学中,发现学生面对一些可重复利用的软件流程,可以很好地统一在一起反复使用,然而针对同一流程,写出的汇编程序软件代码并没有做出精简方面的思考,导致浪费了指令周期。本文针对课堂遇到的问题,就如何精简汇编指令进行一些思考和探讨。

关键词:流程图;汇编;精简

中图分类号:TP314 文献标识码:A 文章编号:1007-9599 (2011) 21-0000-01

How to Streamline the Assembly Instructions in the Same Flow Chart

Fan Zhicheng

(Heyuan Polytechnic school teaching mechanical and electrical department,Heyuan 517000,China)

Abstract:The author of"chip"teaching,found that students face a number of reusable software process can be a good unity with repeated use,however,for the same process,the assembler to write the software code and not made to streamline aspects of thinking,resulting in wasted cycles.In this paper,classroom problems,the assembly instructions on how to streamline some thought and discussion.

Keywords:Flow chart;Assembly;Streamline

一、引言

市场上有许多关于单片机学习的书籍,可以让学生对单片机的引脚功能,定时计数器,数模模数转换,串行口通信等方面的知识进行系统的学习,起到启蒙入门的作用。专门讲解如何重复利用同一流程图的角度来分析处理事情的书籍,却是凤毛麟角,此类书籍能让学生学习到如何把软件架构高度精简化。然而,对同一软件流程下,如何精简汇编程序,并没有书籍专门对此提及。本文将使用课堂中遇到的例子,来对如何编写同一流程下的汇编程序做一个探讨,希望能起到启发灵感,抛砖引玉的作用,让学生意识到,在同一软件架构下也能有不同的精简软件方式。

二、判断句式的流程

笔者在讲授软件架构时,常会遇到判断句式流程图。此类流程图在程序中频繁出现,学生也能很容易地写出相应的汇编程序代码,现在举一例子来谈谈用汇编语言来写判断句式流程图,是否具有可以精简的空间,具体的流程图如下:

根据上图框架内的信息,可以知道,此流程图处理是对如下两种情况的数据,进行分类处理:(1)当标志位FLED为1时,就把#11100110B这个数传送到P1口中;(2)当标志位FLED为0时,就把#10100010B这个数传送到P1口中。

三、汇编代码的精简过程

根据以上的分析结果,学生可以很容易地写出如下的汇编语言程序(以台湾松翰单片机为例):

B0BTS1 FLED

JMP NEXT00 ; = 0

JMP NEXT01 ; = 1

NEXT00:MOV A,#10100010B

B0MOV P1,A

JMP OK

NEXT01:MOV A,#11100110B

B0MOV P1,A

OK: ...

显然,上面这段程序是完全正确的,也是完全依据流程图写出来的。对指令周期进行计算,可知:整段程序占用了13个指令周期。

那么,以上的程序,是否有可以精简的空间呢?在课堂上提出这样的问题后,有些同学写出了以下的精简后的汇编指令:

B0BTS1 FLED

JMP NEXT00 ; = 0

MOV A,#11100110B ; = 1

B0MOV P1,A

JMP OK

NEXT00:MOV A,#10100010B

B0MOV P1,A

OK: ...

对精简后的整段程序的指令周期进行计算,可知:整段程序占用了11个指令周期。只是调换了代码的先后顺利,便比之前那段程序,减小了2个指令周期。

那么,是否可以有更精简的写法呢?提出这个疑问后,在课堂上学生并没有给出更精简的程序段。我便根据传送的数据特点及逻辑运算符号,写出了如下这段精简后的程序:

MOV A,#11100110B

B0BTS1 FLED

JMP NXET

AND A,#10111011B

NEXT: B0MOV P5,A

OK: ...

整段程序占用了8个指令周期,实现了和前两段程序一样的功能。

四、反思第三种精简方式

传统的按照流程图写程序的思维方式能稳健地实现单片机功能,然而通过观察分析流程图中实现的内容而进行深入思考,并巧妙地利用逻辑运算来编写程序,往往能做到独辟蹊径的作用,对拓展学生的思维,有很大帮助。

五、结语

回看示例的软件流程图,是C语言中的经典的IF结构流程,每个程序员对此流程图写出的C语言代码几乎都能达到一致,然而,汇编语言却能让程序员实时地跟踪指令周期,并对同一软件流程图依据自己的思维而写出不同的代码,也许,这就是汇编语言的难点及魅力所在。

参考文献:

[1]范红刚等编著.51单片机自学笔记[M].北京航空航天大学出版社

[2]"SONIX 8_bit MCU INSTRUCTION SET"Sonix Technology Co.,Ltd.

[作者简介]范志诚(1981.9-),男,广东紫金县人,硕士,中级职称,研究方向:机械电子工程。

上一篇:浅析奖学金评定系统的设计研究 下一篇:基于FlashPaper的文档在线阅读方法研究