嵌入式芯片汇编语言结构化编码设计的研究
2011-11-08张同华韩名君2
张同华,韩名君2,
(1.芜湖信息技术职业学院 电子信息系,安徽 芜湖 241003;2.安徽大学 电子信息工程学院,安徽 合肥 230039)
嵌入式芯片汇编语言结构化编码设计的研究
张同华1,韩名君2,1
(1.芜湖信息技术职业学院 电子信息系,安徽 芜湖 241003;2.安徽大学 电子信息工程学院,安徽 合肥 230039)
为提高嵌入式芯片汇编语言编码设计的水平,克服因语句结构本身的非结构化及存储分配的随意性所造成的困难,根据软件工程中结构化设计的规范,以MCS-51单片机汇编语言为例,提出了可操作性的解决方案:针对语句的结构,设计与结构化盒图等效的程序流程图和语句结构体,构建出结构化的选择结构和循环结构;针对存储的分配,设计依据程序之间的调用关系,同层共享非同层独享的变量存储空间分配策略。
结构化程序设计;嵌入式芯片;编码设计;汇编语言
0 引言
在电子技术应用中,各类嵌入式芯片的使用越来越广泛,芯片制造公司提供了芯片指令代码助词符系统及汇编编译软件,电子技术设计人员相应的承担着使用汇编语言进行程序设计的工作。
高质量的软件设计必须遵循软件工程规范[1],有关在软件工程规范的指导下进行嵌入式芯片汇编语言程序设计的方法,人们已做过有益的探讨,并应用于实践中[2,3]。
在软件工程规范中,要求在编码设计阶段运用结构化程序设计方法,但对嵌入式芯片却是个难题:其一,嵌入式芯片的汇编语言本身是非结构化的低级语言,不能像高级语言一样直接实现结构化的程序编码,其二,编码设计过程中的存储空间的分配,也不能像高级语言一样由编译系统完成。
因为这个难题,当前有关嵌入式芯片的各类文献及教材中,编码设计普遍达不到结构化设计的要求。在有关汇编语言编程方法的研究中,还没有直接解决这个难题的详细且可行的方案。
运用嵌入式芯片专用的已结构化的高级语言系统可以回避以上难题,如MCS-51单片机的C51高级语言[4]。但高级语言只针对长期且大量应用的芯片进行开发,新面世的芯片很少有相应的高级语言支持,另外,高级语言在提高编程效率的同时,也降低了程序的运行效率,而有些嵌入式实时系统更需要的是运行效率,芯片制造公司鼓励使用汇编语言进行芯片功能的开发[5]。
所以,需要寻找在原有嵌入式芯片汇编语言基础上直接解决这个难题的方法,现提出一种解决方案,就是,通过构建结构化的基本程序功能模块,制定存储空间使用策略,使编码设计达到结构化程序设计的标准。
本文先介绍结构化设计方法的相关规范,再以电子技术设计人员中广泛使用的MCS-51单片机汇编语言为例,解析本方案的内容。
1 编码的结构化设计规范
1.1 结构化设计的方法与要求
软件工程方法将一个完整的软件系统的设计分为:可行性研究、需求分析、总体设计、编码设计(含详细设计)、软件测试和软件维护几个阶段,每个阶段有相应的设计规范与设计方法,结构化设计方法是编码设计这个阶段的主要方法。
结构化设计的要求是:程序由一条或多条指令代码构成的程序块组成,每个程序块只能是单个入口与单个出口且程序流程是单向的,程序块的内部只能是顺序、选择或重复三种结构,程序块之间只能是顺序或嵌套二种关系。
盒图(N-S图)在形式上没有转移语句,只有顺序、选择与重复三种结构,其中重复的主要方式是循环,如图1中(a)、(b)和(c)所示,所以能用盒图表示的只能是模块化的程序结构。
图1 三种基本程序结构的盒图表示法
1.2 编码设计结构化的实现
采用汇编语言进行总体设计很容易达到模块化设计的要求,但在实行编码设计的结构化时却存在着困难。
原因之一在于汇编语言作为低级语言,没有结构化的语句结构体,系统只提供了多种转移语句。解决的办法是通过构建结构化语句体的来实现结构化,其中的关键是所有转移语句必须控制在语句结构体内,可以用所构建语句体的流程图能否能对应一个等效盒图作为是否达到结构化的标准。
另一个原因在于汇编语言作为低级语言,编译系统本身不能有效进行存储空间的分配。解决的办法是先将程序中变量所对应的存储空间机动化,再根据软件系统子程序之间的模块结构制定相应的分配策略。
在MCS-51单片机汇编语言中,转移条件一般由逻辑值表示,所以先将条件式变成逻辑值形式的“值L”,再判断“值L”进行转移,在流图中,应将条件式变成逻辑值的语句包含在判断语句体中。另外,为了使用标号表示的转移目标位置仍然在语句体内,在需要时,可以将转移的目标位置设置成空操作指令,以去除语句体与内嵌模块的地址标号的关联,达到信息隐藏的目的。
2 构建语句结构体
语句结构体有顺序、选择与重复(循环)三种,现分别说明符合结构化标准的分支选择语句和重复循环语句的语句结构体构建方法。
2.1 分支语句结构体的设计
分支结构有双分支,单分支、多分支三种形式,在结构上,单分支可以通过双分支简化得到,多分支可以通过双分支嵌套得到,还有一种常用的并行多分支,一般另行设计专用的程序结构。现介绍双分支与并行多分支的结构体的构建。
双分支语句结构体的构建如图2所示,结构化的流程图如图2(a)所示,对应的语句结构如图2(b)所示,等效的盒图如图2(c)所示。双分支内嵌判定条件分别为真与假时所要执行的“T分支”与“F分支”二个程序模块。
图2 双分支语结构体
并行多分支语句结构体的构建如图3,结构化的流程图如图3(a)所示,对应的语句结构如图3(b)所示,等效的盒图如图3(c)所示。并行多分支内嵌多个判定条件,某个条件为真则执行对应的处理分支程序模块。
图3 并行多分支语句结构体
2.2 循环语句结构体的设计
循环结构常分为当型循环、直到型循环和计数循环三种形式,计数循环可以在当型循环或直到型循环基础修改得到,现介绍当型循环与直到型循环结构体的构建。
当型循环语句结构体的构建如图4,结构化的流程图如图4(a)所示,对应的语句结构如图4(b)所示,等效的盒图如图4(c)所示。当型循环内嵌循环体程序模块。
图4 当型循环语句结构体
直到型循环语句结构体的构建如图5,结构化的流程图如图5(a)所示,对应的语句结构如图5(b)所示,等效的盒图如图5(c)所示。直到型循环内嵌循环体程序模块。
图5 直到型循环语句结构体
3 存储空间分配策略
3.1 存储空间配置的机动化
为给系统存储空间的重新分配创造条件,程序变量所对应的存储空间需机动化。编码时应当用变量名代表存储空间,而不能直接使用绝对的存储地址,这样做可以方便的实现存储空间再分配,同时,也使得程序的可读性变强,调试更容易。存储空间可分为变量与数据块二类,数据块可用首址与长度二个专用变量表示。
存储空间是分类别的,为了方便再分配,可以将变量的类别信息包含在变量名中,变量名的命名在“匈牙利命名规则”基础上做适当补充,变量命名规则设置如下:
M作用域_类别_限定词
M为变量说明,所有变量的第一个字母用M开始;作用域用P或S表示,P为全局变量,S为私有变量;类别是变量类型,Di为字节地址,Ri为可间址的工作区寄存器,Rn为普通工作区寄存器,Da为字节常数,Bi为位地址,Dbs为数据块首址,Dbl为数据块长度;限定词为区分不同变量的自选词。
图6 存储空间机动配置的程序
除了累加器A、程序状态字PSW和位累加器Cy外,变量的使用必须经等值伪指令命名,子程序间变量的传递用全局变量完成。图6为一个实现了存储空间机动配置的程序段。
3.2 存储空间分配策略
软件系统的结构一般分为主程序系统和若干个中断部分,每个部分的程序结构图如图7所示,每个程序有自己所需要的存储空间,用变量集表示。因为中断的发生有具不确定性,所以中断程序必须独立处理存储空间的分配。
图7 主程序或中断程序块结构示意图
所有子程序编码结束后,根据程序结构图,为每个程序分配实际存储空间,分配的步骤是:
①分配主程序与中断程序所需要的所有全局变量;
②为同层各模块分配存储空间,同层间空间共享;
③为不同模块层分配存储空间,空间独享;
④以同样的方式分配各中断程序的存储空间,中断程序与主程序之间空间独享。
有限的堆栈空间主要用于中断调用时的累加器A与程序状态字PSW的存储。
4 结语
本文分析了嵌入式芯片汇编语言在编码设计过程中实现结构化设计的困难所在,以通用的MCS-51单片机为样本,给出了在汇编语言基础上构建结构化语句结构体的可行的实施办法,提出了系统变量存储空间统一分配的策略,使程序编码达到了结构化设计的要求,增加了程序的可读性及可维护性。
[1] 屠立德,屠祁.软件工程方法[M].北京,机械工业出版社,2001.
[2] 杨勇,王为民.MCS-51系列单片机结构化程序设计探讨[J].电子技术应用,2007(7):24-26.
[3] 曲辉,李海军,吴利斌,等.单片机结构化程序设计方法与实现[J].内蒙古农业大学学报,2010,31(1):158-161.
[4] 熊光泽,古幼鹏,桑楠.嵌入式应用软件设计方法学研究综述[J].计算机应用,2004,24(4):1-4.
[5] 宓哲民,颜见明.浅谈结构化程序设计(上)[J].可编程控制器与工厂自动化,2010(10):127-129.
Research on the design of assembly language structured code in embedded chip
ZHANG Tong-hua1,HAN Ming-jun2,1
(1.Department of Electronic Information,Wuhu Vocational College of Information Technology,Wuhu 241003,China;2.School of Electronics and Information Engineering,Anhui University,Hefei 230039,China)
In order to improve the design level of assembly language code in embedded chip and overcome the difficulty of unstructured language statements and random storage allocation,this article,taking MCS-51 MCU assembly language as an example,presents an operable solution according to structural design specifications in software engineering.Based on sentence structures,we have designed equivalent program flowchart and sentence structures with structured box figure to construct the structured choice structure and circulation structure.According to the distribution of storage and call relationship of programs,we have presented a variable storage space distribution strategy of same layer sharing and different layer exclusive.
structured programming;embedded chip;code design;assembly Language
TP368.1
A
1009-3907(2011)06-0022-05
2011-04-13
安徽省专业带头人资助项目(DDR2008GZ94),安徽省省级教学名师资助项目(MS2009GZ07),安徽省省级电工电子示范实验中心资助项目(2008SFZX30)。
张同华(1963-),男,安徽芜湖人,副教授,硕士,主要从事程序设计与电子技术方面研究。
责任编辑:吴旭云