宁振峰 黄岩/国营洛阳丹城无线电厂
某型装备采用复合制导技术,即中段为惯性制导加或不加指令校正,末端为脉冲多普勒主动雷达制导。为了能够深入了解并掌握该型装备的核心技术,提升核心竞争力,决定开展该型装备软件破译工作。
H1806BM2 微处理器是该型装备一舱计算机分组件内部的CPU 芯片,是整个一舱计算机分组件的核心,通过运行程序存储器内的工作程序代码,管理一舱的工作状态,实现一舱功能,最终完成目标的搜索、截获和跟踪。由于H1806BM2 微处理器是俄制早期处理器型号,不是主流处理器芯片,搜集到的资料非常少,特别是其指令系统仅有简单的基本指令功能介绍,诸如必需的寻址方式、每条指令的代码长度以及内部寄存器等关键信息等在搜集到的资料中没有任何介绍,不能全面完整地描述一条指令的功能内涵,也就无法进行后续的机器代码反汇编工作,无法满足软件破译的需求。
本文以此为出发点,对H1806BM2微处理器指令系统分析破译方法进行研究,力图摸索出一套正确、有效的分析破译方法,完整破译H1806BM2 微处理器的指令系统,为后续该型装备软件破译工作提供技术支撑。
通过实施该型装备一舱计算机分组件深修精修项目,已对一舱计算机硬件系统有了比较深入的了解。在工艺一舱测试过程中,首先通过逻辑分析仪采集计算机地址/数据复用总线上的动态数据;其次,按照指令的基本功能类型和复杂程度,对采集到的动态数据进行归纳分类;最后,通过对程序运行的总线数据进行动态跟踪分析,同时依据多条指令执行的结果进行联合分析,采取结构分析、推理、归纳等技术手段反推指令的详细功能,最终完成了68 条基本指令及通过寻址方式扩充的数百条指令的分析破译工作。
考虑到程序存储器芯片管脚细密,按常规拆除芯片用编程器加适配器读取的方式存在一定的风险,因而决定采取从采集数据总线中提取机器码的方法,最终将全部30kB 的机器码提取并整理成表 格。
具体步骤为:将六联体插头(内总线扩展模块)从一舱计算机上移除,用专用采集电缆网对一舱计算机各板卡内部总线接口进行连接,用逻辑分析仪的Pod1、Pod2 飞线夹对应夹接到电缆网的37 针双列插针上,使用主动雷达一舱总体检测系统对工艺一舱进行手动模式加电,顺序进行各参数的单步测试。与此同时,用逻辑分析仪对一舱计算机内部总线信息及SYNC、DIN、DOUT、RPLY 控制信号进行采集,记录计算机执行程序的轨迹,采集程序运行时计算机地址/数据复用总线上的动态 数据。
根据采集到的总线动态数据信息,结合每条机器码指令执行结果,综合分析,反推出每条指令的功能。
由于大多数指令执行结果存放在处理器内部寄存器,无法实时反映在总线数据中,只有当几条指令先后执行完毕,最终结果才反映在总线数据中,这无疑给指令分析破译增加了很大 难度。
由于各条指令要实现的功能差异较大,经初步分析发现H1806BM2 微处理器指令长度范围从1 个字到3 个字,第1 个字为操作码,第2 和第3 个字为操作数或地址码。从现有资料来看,16 位的操作码包括基本功能、寄存器选择及寻址方式3 个部分。根据指令功能及复杂程度的不同,操作码每一个部分的长度都不一致,有的指令只包含1 个操作数,有的指令却包含源操作数和目标操作数2 个操作数。例如,有的指令16 位功能码全是基本功能,后面没有操作数及寻址方式字段;有的指令有1 个操作数,基本功能码为10 位,后面寻址方式字段为6 位;有的指令有2 个操作数,基本功能码为4 位,后面寻址方式字段为12 位。通过以上分析,将处理器指令操作码进行归纳分类,具体见 表1。
通过归类整理,对指令类型及复杂程度有了初步了解,接下来将针对具体指令代码进行分析破译。采取由易到难的分析原则,先从功能单一的指令着手。
1)对于仅有基本操作码的指令,功能比较明确,相对容易理解,如清Z标志指令CLZ(00A8H)、置C 标志指令SEC(00B1H)。
2)对于只有1 个操作数的指令,如符号取反指令NEG,从动态总线数据中查找该指令的几种代码,见表2,通过对该指令几种形式的动态数据进行分析,前三种形式在总线上看不到指令执行结果,第四种可以看到指令的执行过程。该指令首先将8358H 单元内容读回处理器内部,数据符号取反后再送回8358H 单元。通过对这几种指令形式的低6 位进行综合分析,初步判断前三种为寄存器寻址,第四种为直接寻址,且辅助位5~3 表示寻址方式,辅助位2~0 表示寄存器号。后经多条指令各种指令形式的相互印证,确认了辅助位5~3 代表寄存器辅助位,辅助位2~0 代表寻址方式辅助位,且通用寄存器有6 个(R0~R5),R6 等同堆栈指示器SP,最终寻址方式辅助位结合寄存器辅助位才能构成一个完整的寻址 方式。
表1 指令操作码分类表
表2 NEG指令代码表
表3 MOV指令代码表
表4 寻址方式
表5 H1806BM2微处理器部分典型指令说明
3)对于有2 个操作数的指令,首先要区分源操作数和目标操作数,每个操作数的寻址方式与单个操作数是一致的,如数据传送指令MOV,从动态总线数据中查找到该指令的几种代码,见 表3。
由于是通过程序运行过程动态采集数据,不可能将每条指令所有的组合状态都采集到,并且大多数指令的执行结果不能显现在总线上,因而只能尽量多地采集指令运行数据,再运用归纳推理的方法,对采集到的相关指令运行数据进行联合分析。经过大量数据分析,最终完成了所有68 条基本指令以及通过寻址方式扩充的数百条指令的破译工作,整理出寻址方式说明表和H1806BM2 微处理器部分典型指令功能表(见表4 和表5),其中涵盖了部分典型指令的功能描述、操作码、指令代码长度及辅助位所表示的各种寻址方式编码。
H1806BM2 微处理器指令系统的破译工作是整个装备软件系统分析破译的关键难点之一。本文探索出一种H1806BM2 微处理器指令系统分析破译方法,最终完成了所有68 条基本指令以及通过寻址方式扩充的数百条指令的破译工作。该项工作的开展,可为今后类似处理器指令分析破译提供可借鉴的方法和经验,对工厂新装备、新技术能力建设的提升有着重要意义。