寧振峰 黃巖/國營洛陽丹城無線電廠
某型裝備采用復(fù)合制導(dǎo)技術(shù),即中段為慣性制導(dǎo)加或不加指令校正,末端為脈沖多普勒主動雷達(dá)制導(dǎo)。為了能夠深入了解并掌握該型裝備的核心技術(shù),提升核心競爭力,決定開展該型裝備軟件破譯工作。
H1806BM2 微處理器是該型裝備一艙計算機(jī)分組件內(nèi)部的CPU 芯片,是整個一艙計算機(jī)分組件的核心,通過運(yùn)行程序存儲器內(nèi)的工作程序代碼,管理一艙的工作狀態(tài),實現(xiàn)一艙功能,最終完成目標(biāo)的搜索、截獲和跟蹤。由于H1806BM2 微處理器是俄制早期處理器型號,不是主流處理器芯片,搜集到的資料非常少,特別是其指令系統(tǒng)僅有簡單的基本指令功能介紹,諸如必需的尋址方式、每條指令的代碼長度以及內(nèi)部寄存器等關(guān)鍵信息等在搜集到的資料中沒有任何介紹,不能全面完整地描述一條指令的功能內(nèi)涵,也就無法進(jìn)行后續(xù)的機(jī)器代碼反匯編工作,無法滿足軟件破譯的需求。
本文以此為出發(fā)點,對H1806BM2微處理器指令系統(tǒng)分析破譯方法進(jìn)行研究,力圖摸索出一套正確、有效的分析破譯方法,完整破譯H1806BM2 微處理器的指令系統(tǒng),為后續(xù)該型裝備軟件破譯工作提供技術(shù)支撐。
通過實施該型裝備一艙計算機(jī)分組件深修精修項目,已對一艙計算機(jī)硬件系統(tǒng)有了比較深入的了解。在工藝一艙測試過程中,首先通過邏輯分析儀采集計算機(jī)地址/數(shù)據(jù)復(fù)用總線上的動態(tài)數(shù)據(jù);其次,按照指令的基本功能類型和復(fù)雜程度,對采集到的動態(tài)數(shù)據(jù)進(jìn)行歸納分類;最后,通過對程序運(yùn)行的總線數(shù)據(jù)進(jìn)行動態(tài)跟蹤分析,同時依據(jù)多條指令執(zhí)行的結(jié)果進(jìn)行聯(lián)合分析,采取結(jié)構(gòu)分析、推理、歸納等技術(shù)手段反推指令的詳細(xì)功能,最終完成了68 條基本指令及通過尋址方式擴(kuò)充的數(shù)百條指令的分析破譯工作。
考慮到程序存儲器芯片管腳細(xì)密,按常規(guī)拆除芯片用編程器加適配器讀取的方式存在一定的風(fēng)險,因而決定采取從采集數(shù)據(jù)總線中提取機(jī)器碼的方法,最終將全部30kB 的機(jī)器碼提取并整理成表 格。
具體步驟為:將六聯(lián)體插頭(內(nèi)總線擴(kuò)展模塊)從一艙計算機(jī)上移除,用專用采集電纜網(wǎng)對一艙計算機(jī)各板卡內(nèi)部總線接口進(jìn)行連接,用邏輯分析儀的Pod1、Pod2 飛線夾對應(yīng)夾接到電纜網(wǎng)的37 針雙列插針上,使用主動雷達(dá)一艙總體檢測系統(tǒng)對工藝一艙進(jìn)行手動模式加電,順序進(jìn)行各參數(shù)的單步測試。與此同時,用邏輯分析儀對一艙計算機(jī)內(nèi)部總線信息及SYNC、DIN、DOUT、RPLY 控制信號進(jìn)行采集,記錄計算機(jī)執(zhí)行程序的軌跡,采集程序運(yùn)行時計算機(jī)地址/數(shù)據(jù)復(fù)用總線上的動態(tài) 數(shù)據(jù)。
根據(jù)采集到的總線動態(tài)數(shù)據(jù)信息,結(jié)合每條機(jī)器碼指令執(zhí)行結(jié)果,綜合分析,反推出每條指令的功能。
由于大多數(shù)指令執(zhí)行結(jié)果存放在處理器內(nèi)部寄存器,無法實時反映在總線數(shù)據(jù)中,只有當(dāng)幾條指令先后執(zhí)行完畢,最終結(jié)果才反映在總線數(shù)據(jù)中,這無疑給指令分析破譯增加了很大 難度。
由于各條指令要實現(xiàn)的功能差異較大,經(jīng)初步分析發(fā)現(xiàn)H1806BM2 微處理器指令長度范圍從1 個字到3 個字,第1 個字為操作碼,第2 和第3 個字為操作數(shù)或地址碼。從現(xiàn)有資料來看,16 位的操作碼包括基本功能、寄存器選擇及尋址方式3 個部分。根據(jù)指令功能及復(fù)雜程度的不同,操作碼每一個部分的長度都不一致,有的指令只包含1 個操作數(shù),有的指令卻包含源操作數(shù)和目標(biāo)操作數(shù)2 個操作數(shù)。例如,有的指令16 位功能碼全是基本功能,后面沒有操作數(shù)及尋址方式字段;有的指令有1 個操作數(shù),基本功能碼為10 位,后面尋址方式字段為6 位;有的指令有2 個操作數(shù),基本功能碼為4 位,后面尋址方式字段為12 位。通過以上分析,將處理器指令操作碼進(jìn)行歸納分類,具體見 表1。
通過歸類整理,對指令類型及復(fù)雜程度有了初步了解,接下來將針對具體指令代碼進(jìn)行分析破譯。采取由易到難的分析原則,先從功能單一的指令著手。
1)對于僅有基本操作碼的指令,功能比較明確,相對容易理解,如清Z標(biāo)志指令CLZ(00A8H)、置C 標(biāo)志指令SEC(00B1H)。
2)對于只有1 個操作數(shù)的指令,如符號取反指令NEG,從動態(tài)總線數(shù)據(jù)中查找該指令的幾種代碼,見表2,通過對該指令幾種形式的動態(tài)數(shù)據(jù)進(jìn)行分析,前三種形式在總線上看不到指令執(zhí)行結(jié)果,第四種可以看到指令的執(zhí)行過程。該指令首先將8358H 單元內(nèi)容讀回處理器內(nèi)部,數(shù)據(jù)符號取反后再送回8358H 單元。通過對這幾種指令形式的低6 位進(jìn)行綜合分析,初步判斷前三種為寄存器尋址,第四種為直接尋址,且輔助位5~3 表示尋址方式,輔助位2~0 表示寄存器號。后經(jīng)多條指令各種指令形式的相互印證,確認(rèn)了輔助位5~3 代表寄存器輔助位,輔助位2~0 代表尋址方式輔助位,且通用寄存器有6 個(R0~R5),R6 等同堆棧指示器SP,最終尋址方式輔助位結(jié)合寄存器輔助位才能構(gòu)成一個完整的尋址 方式。
表1 指令操作碼分類表
表2 NEG指令代碼表
表3 MOV指令代碼表
表4 尋址方式
表5 H1806BM2微處理器部分典型指令說明
3)對于有2 個操作數(shù)的指令,首先要區(qū)分源操作數(shù)和目標(biāo)操作數(shù),每個操作數(shù)的尋址方式與單個操作數(shù)是一致的,如數(shù)據(jù)傳送指令MOV,從動態(tài)總線數(shù)據(jù)中查找到該指令的幾種代碼,見 表3。
由于是通過程序運(yùn)行過程動態(tài)采集數(shù)據(jù),不可能將每條指令所有的組合狀態(tài)都采集到,并且大多數(shù)指令的執(zhí)行結(jié)果不能顯現(xiàn)在總線上,因而只能盡量多地采集指令運(yùn)行數(shù)據(jù),再運(yùn)用歸納推理的方法,對采集到的相關(guān)指令運(yùn)行數(shù)據(jù)進(jìn)行聯(lián)合分析。經(jīng)過大量數(shù)據(jù)分析,最終完成了所有68 條基本指令以及通過尋址方式擴(kuò)充的數(shù)百條指令的破譯工作,整理出尋址方式說明表和H1806BM2 微處理器部分典型指令功能表(見表4 和表5),其中涵蓋了部分典型指令的功能描述、操作碼、指令代碼長度及輔助位所表示的各種尋址方式編碼。
H1806BM2 微處理器指令系統(tǒng)的破譯工作是整個裝備軟件系統(tǒng)分析破譯的關(guān)鍵難點之一。本文探索出一種H1806BM2 微處理器指令系統(tǒng)分析破譯方法,最終完成了所有68 條基本指令以及通過尋址方式擴(kuò)充的數(shù)百條指令的破譯工作。該項工作的開展,可為今后類似處理器指令分析破譯提供可借鑒的方法和經(jīng)驗,對工廠新裝備、新技術(shù)能力建設(shè)的提升有著重要意義。