计算机研究与发展
JOURNAL OF COMPUTER RESEARCH AND DEVELOPMENT
1999年 第36卷 第8期 Vol.36 No.8 1999



汇编系统中多平台支持技术的研究
吴海平　　　罗红兵
摘　要　支持多语种、多平台是当前编译技术的发展趋势，它适应了当前计算机系统迅猛更新的需要.汇编系统作为多语种、多平台编译中必不可少的重要组成部分，是实现多平台支持的关键.文中提出了一个适用于不同计算机平台的多平台汇编系统的模型，在此基础上讨论了汇编系统中多平台支持技术的3个关键要素：平台配置机制、指令系统支持方式和目标文件处理策略，并描述了相应的设计与实现方法.最后，给出了该汇编模型应用的一些实验结论.
关键词　多平台汇编，平台配置，前后台界面
中图法分类号　TP313
RESEARCH ON SUPPORTING MULTI-PLATFORM IN ASSEMBLER
WU Hai-Ping and LUO Hong-Bing
(Department of Computer Science,National University of Defense Technology, Changsha 410073)
Abstract　Since new computer systems appear more and more rapidly, the current compiling technique is developed toward supporting multi-language and multi-platform. Assembly system, which is an important part of this kind compiler systems, is the key for compiler to implement multi-platform. In the paper here, an assembly model is described, which can support multi-platform and be used for different computer systems. Three key factors of supporting techniques are presented, which are mechanisms of plateform-configuration, supporting fashions of instruction systems, and processing strategies of object files. Some relevant methods of design and implementation are presented. Some application results of this assembly model are also given.
Key words　multi-platform assembly, platform configuration, interface of front-end and back-end
1　引　言
　　多语种、多平台编译技术是当前国际上流行的、取代传统的语言－编译－机器代码那种一对一方式的一种新的编译技术.该技术实现的主要途径是采用以一致性中间语言编译处理为连接区的前后台机制.在前台处理中，各类高级语言经过各自对应的基本处理（如词法分析、生成语法树等)后形成一种规范结构的中间语言（也可以是某一种高级语言，例如C语言).这样作为连接区的一致性中间语言处理来说，它只面向一种语言的处理.与传统编译处理结构不同的是，一致性中间语言处理所生成的输出语言是平台相关的汇编语言而不是生成目标机器上的半目标代码.从总体结构上看，多语种、多平台支持结构是由语言预处理工具集（前台处理)、一个一致性编译系统（中间语言处理)和一个支持多平台的汇编系统（后台处理)构成.
　　汇编系统对多平台的支持意味着：
　　(1) 支持不同平台上的汇编语言处理，包括不同平台上的汇编文法约定、不同的机器指令系统、宏指令集和伪指令集；
　　(2) 支持不同平台上的操作系统界面描述，包括不同的目标文件格式、不同的数据配置方式和调试支持信息等；
　　(3) 具有灵活的平台增删与配置机制和规范.
　　在本文中我们首先描述了一个在平台配置机制管理下的多平台汇编系统模型.然后基于该模型来讨论汇编系统对多平台支持的3个关键要素：平台配置机制、指令系统支持方式和目标文件处理策略.
2　多平台汇编系统模型
　　我们描述的多平台汇编系统模型（图1)主要由3个部分组成：平台模板构件组、规范文件结构处理和汇编内部处理.这些部分各自是一个独立的整体，它们必须在平台配置机制管理下进行配置才能形成平台相关汇编系统.在该模型中，平台模板是平台相关汇编指令集、平台相关操作系统接口界面和平台特性集的一个严密组合.不同平台所对应的平台模板是不相同的.因为多平台汇编系统是在一致性的平台配置机制下严格管理，因此平台模板构件组可以任意扩展.平台模板扩展时只需要按照模型所规定的规范去描述相应的模板并使用三元式（平台属类、平台厂商、操作系统版本)填充模型中的平台配置表即可为汇编系统模型建立对新平台的支持项.


图1　多平台汇编系统模型
　　多平台汇编系统模型本身并不是一个可运行系统，它对多平台的支持主要反映在该模型提供了平台配置所需要的平台模板，同时采用了一种前后台汇编处理策略，即将不同平台的汇编指令集和基于汇编指令集所形成的目标文件在前台进行规范预处理，然后进行一致性的后台处理.这样整个模型保持了界面清晰、结构简单精炼的特点.
　　在处理技术上，多平台汇编系统模型以传统的汇编方法为骨架，扩展了如下几个关键技术：
　　(1) 平台模板技术.将平台相关的指令系统、操作系统界面描述、平台相关文件格式以模板结构设计并依据平台配置机制形成平台相关的汇编处理模式；
　　(2) 汇编的通用处理与平台相关处理分离技术；
　　(3) 规范文件结构技术.
3　平台配置机制
　　平台配置机制是汇编系统模型对多平台支持得以实现的关键.我们在这里描述的平台配置机制由两级配置构成：
　　① 平台模板配置；
　　② 平台处理系统配置.
　　平台模板配置的目的是生成平台处理系统的集成文件（在UNIX系统下是Makefile文件).因此在平台模板配置时要产生集成文件的3个主要子文件：
　　(1) 目标机系统平台描述文件.在交叉汇编环境下，汇编系统的运行平台与它所生成的目标部指派.平台模板配置机制根据指派来形成相关的平台描述文件；
　　(2) 指令模板处理文件.因为多平台汇编系统模型中各平台的指令集的处理是一致的，因此文件中，从而形成相应平台的汇编指令处理文件；
　　(3) 操作系统界面文件.包括文件格式描述、目标文件生成机制、二进制文件操纵机制等.
　　平台模板配置采用外部指派配置三元式〈平台属类，平台厂商，操作系统版本〉来牵引平台模板的方式进行.在该三元式中，平台属类和操作系统版本直接决定了要配置的平台模板（平台厂商只是用于标识平台模板的版本)，从而也决定了如何形成集成文件的子文件.
　　集成文件用来自动进行平台处理系统配置.换句话说，集成文件的作用是形成一个具体平台的汇编系统.在多平台汇编系统模型中，集成文件的初始结构是一个文件模板.该文件模板在平台模板配置机制的驱动下，通过插入处理子文件而转换为一个可执行的集成文件.该集成文件是平台配置机制的最后一个执行步骤，它的执行将产生如下的结果：
　　(1) 描述系统的执行序.即按词法分析、语法分析、语法树处理、目标代码生成等常规汇编处理顺序集成相应的程序；
　　(2) 集成前、后台处理程序.包括不同指令集的规范界面处理程序和一致性汇编指令处理程序、不同目标文件格式的界面处理程序和规范目标文件格式处理与转换程序等；
　　(3) 操作系统接口处理程序.包括文件格式、表格结构、参数传递等.
　　多平台汇编系统模型的平台配置机制可以由图2来直观表示.图中所示的平台配置表决定了该模型对平台的支持范围，它可以按模型的规则来扩展.牵引表描述了平台模板配置机制在构造集成文件的子文件时的查找目录.


图2　多平台汇编系统模型的配置结构
4　多指令系统的支持方式
　　为了实现对多种指令系统的支持，我们的汇编模型要求平台模板的指令集要以规范形式编排.在配置时组成指令集的伪指令和机器指令分别用一种灵活的内部结构来存放.机器指令按操作码汇编助记符的字典序存放在一个转接数组中.该数组的元素可以方便地增加或删除，从而使模型能处理不同平台的任意大小的指令集.与转接数组对应有一个大小一样的指令操作数组，它是在配置时与转接数组一起同时形成的.它的每个项由机器编码或处理函数指针构成.如果汇编码表示的操作要用多条机器指令实现，那么该汇编码对应的指令操作数组项是其扩展函数的指针，否则就是该汇编码对应的机器指令内码.对于伪指令来说，则按通用伪指令和机器相关伪指令分别存放在类似存放机器指令那样的数组中.机器相关伪指令具有较高的优先级，即汇编内部处理时优先匹配机器相关伪指令.
　　在汇编内部处理的初始化时，通过Hash表的形式，将当前平台指令系统的机器指令集和伪指令集从转接数组放进Hash表并连接其相应的处理函数地址.当汇编面对一条分割划分出来的指令时，通过Hash表匹配找到相应的处理函数，然后转去处理.
　　我们的汇编模型采用如下结构来保存每一条汇编机器指令：
　　struct　 xxxx-code {
　　　　const char　　　*name；
　　　　const char　　　*args；
　　　　unsigned long　　match；
　　　　unsigned long　　mask；
　　　　unsigned long　　pinfo；
　　}
其中 xxxx为平台名称；name为指令名；args为指令参数描述串；match为指令的基本操作码.当汇编时，该操作码被参数修改，产生实际的操作码.mask有两重含义.当pinfo不是INSN－MARCO，这是一个反汇编时操作码相应部分的位屏蔽.若实际的操作码与匹配字段等于操作码字段，那么我们找到了正确的指令.若pinfo是INSN－MACRO，它是宏扩展标识符，表示该指令将扩展为多条机器指令.

文件头描述
代码信息
数据信息

　
下面的数据结构保存伪指令处理信息：
　　struct pseudo-typeS {
　　　　char 　　 *poc-name；
　　　　void　　　（*poc－handler） PARAMS （int）；
　　　　intpoc－val；
　　}
poc－name为伪指令助记符；poc－handler为伪指令处理函数；poc－val为传给handler的值. 
5　目标文件格式的处理策略
　　目前流行的机器平台众多，操作系统版本繁杂，导致各种目标文件格式存在.例如ELF，
COFF，ECOFF，a.out等文件格式，甚至还有各种各样的自定义格式.我们的汇编模型采用规范文件格式来对不同文件格式进行一致性处理.模型中的二进制文件操纵机制（简称BFD)就是用来实现这一目的的.
　　BFD由前台界面处理和后台规范处理两部分组成.BFD的前台界面处理面向不同的操作系统界面描述和目标文件格式，按要求组织文件信息、产生数据配置方式、产生半目标文件代码等.BFD后台是一种规范文件格式的处理.BFD自定义了一种规范文件格式(见下图).
　　这个格式类似ELF文件格式，但它不包含辅助信息.汇编系统按该格式的要求处理汇编程序，组织相应的信息并形成有关文件，然后转BFD的前台处理.由于该规范文件格式不包含诸如调试、参数传送、日志标记等信息，因此除BFD后台产生的信息外，汇编还要将BFD后台规范处理之外的平台相关信息组织在一个防丢失数据区中并送BFD前台处理.
　　BFD前台处理的工作是按将规范文件格式转换为平台相关文件格式，并将防丢失数据区中的信息补充到相关文件格式中.
　　我们在本文描述的多平台汇编模型具有包含范围广、结构层次简单清晰、扩展性强等特点.理论上它可以支持几乎所有的平台.我们已经成功地将该模型应用到了诸如mips，powerpc，sun，IBMPC等平台上.结果证明，我们的模型对新平台支持所需要增加的程序量大约是模型在裸平台状态时程序量的1/15～1/20，并且大部分工作只是简单直观的平台指令集的编排.想象一下如果要从头到尾为一个新平台设计汇编系统，那将会有多大的工作量啊！
基金项目：本课题得到国防科技大学预研基金资助.
作者简介：吴海平，男，1962年2月生，副教授，长期从事并行语言、并行编译、软件环境集成和软件可视化的研究.罗红兵，男，1968年1月生，讲师，主要从事并行编译和办公自动化研究.
作者单位：吴海平　罗红兵　国防科学技术大学计算机科学系　长沙　410073
参考文献
1　Mary Lou Nohr. Understanding ELF Object Files and Debugging Tools. Englewood Cliffs, NJ: Prentice Hall, 1994
2　Erin Farquhar, Philip Bunce. The Mips Programmer's Handbook. San Francisco，California: Morgan Kaufmann Publishers, 1994
3　夏仁霖等. RISC技术参考手册. 上海: 长江计算机集团联合公司，1992
(Xia Renlin. RISC Technique Reference Handbook(in Chinese), Shanghai: Changjiang Computer Association Company, 1992)
4　Constantine D Polychronopoulos. Parallel programming and compilers. Boston: Kluwer Academic Publishers, 1988
收到日期：1997-11-19
修改日期：1998-06-29
