国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

異構(gòu)計(jì)算機(jī)軟件移植可視化仿真技術(shù)

2009-10-29 10:07鄭麗麗
中國新技術(shù)新產(chǎn)品 2009年17期

鄭麗麗

摘要:本文針對(duì)控制系統(tǒng)開發(fā)中程序調(diào)試難的問題,分析了計(jì)算機(jī)體系結(jié)構(gòu)和指令系統(tǒng),研究異構(gòu)計(jì)算機(jī)軟件移植可視化仿真技術(shù),并設(shè)計(jì)了軟件移植的可視化仿真系統(tǒng)。實(shí)驗(yàn)表明,該方法能解決異構(gòu)機(jī)之間軟件兼容和移植問題,提高了控制系統(tǒng)開發(fā)的效率。

關(guān)鍵詞:異構(gòu)計(jì)算機(jī);軟件移植;可視化仿真;指令系統(tǒng)

1軟件移植方法

計(jì)算機(jī)系統(tǒng)層次模型[1]說明了各層次之間的關(guān)系及程序的執(zhí)行情況。指令在計(jì)算機(jī)中執(zhí)行的過程,實(shí)際上是指令由系統(tǒng)的高層逐級(jí)向低層轉(zhuǎn)換的過程,從應(yīng)用語言級(jí)直到微程序語言級(jí),最后產(chǎn)生各種控制命令,驅(qū)動(dòng)計(jì)算機(jī)的硬件完成指令功能。高層語言轉(zhuǎn)換為低層語言的實(shí)現(xiàn)方法有翻譯法和解釋法:翻譯法是將高層程序變換成低一層等效程序,其處理流程可描述為

while(excutingFlag)

{ 取指令;

分析指令;

轉(zhuǎn)換成本層指令并保存;

}

執(zhí)行轉(zhuǎn)換后的指令;

上述流程中變量excutingFlag為執(zhí)行程序是否結(jié)束標(biāo)志,其值為0表示程序結(jié)束。翻譯法又分為動(dòng)態(tài)翻譯和靜態(tài)翻譯。動(dòng)態(tài)翻譯在程序運(yùn)行過程中,將被仿真的指令逐條轉(zhuǎn)換成仿真程序代碼;靜態(tài)翻譯是代一次將所有被仿真的程序轉(zhuǎn)換為仿真代碼后執(zhí)行。解釋法是低層機(jī)器仿真高層機(jī)器級(jí)語句或指令,即對(duì)高層機(jī)器級(jí)語言進(jìn)行解釋并執(zhí)行。其處理流程可描述為

while(excutingFlag)

{取讀指令;

分析指令;

解釋執(zhí)行;

}

翻譯法速度快,但編程和調(diào)試?yán)щy;解釋法易實(shí)現(xiàn)和調(diào)試,但速度慢。異構(gòu)機(jī)之間的軟件移植實(shí)際上也可以看成是將一臺(tái)機(jī)器上所描述的語言在另一臺(tái)機(jī)器上從高層向低層轉(zhuǎn)換的過程。要實(shí)現(xiàn)異構(gòu)機(jī)之間的軟件移植,可以采用模擬和仿真兩種方法[1]。模擬就是用一臺(tái)機(jī)器(宿主機(jī))的機(jī)器語言解釋另一臺(tái)機(jī)器(虛擬機(jī))的指令系統(tǒng)來實(shí)現(xiàn)軟件移植方法。但是這種方法運(yùn)行速度顯著降低、實(shí)時(shí)性差、編寫程序困難。仿真是用微程序(宿主機(jī))直接解釋另一種機(jī)器(目標(biāo)機(jī))指令系統(tǒng)的方法。這種方法速度快,但微程序機(jī)器結(jié)構(gòu)依賴于傳統(tǒng)機(jī)器級(jí)結(jié)構(gòu),開發(fā)人員需要了解微程序機(jī)器的邏輯結(jié)構(gòu),當(dāng)兩種機(jī)器結(jié)構(gòu)差別較大時(shí)很難仿真。

2 數(shù)據(jù)結(jié)構(gòu)描述

數(shù)據(jù)結(jié)構(gòu)描述關(guān)系到程序運(yùn)行效率。在實(shí)際應(yīng)用中,我們?cè)O(shè)計(jì)的仿真系統(tǒng)主要解決在IBM-PC機(jī)上執(zhí)行由MCS51系列單片機(jī)指令系統(tǒng)所編寫的匯編源程序,在分析MCS51單片機(jī)內(nèi)部結(jié)構(gòu)[2]的基礎(chǔ)上,根據(jù)C語言的特點(diǎn),同時(shí)兼顧程序運(yùn)行的效率,合理地描述了系統(tǒng)設(shè)計(jì)所需的數(shù)據(jù)結(jié)構(gòu)。

2.1 程序存儲(chǔ)器結(jié)構(gòu)

MCS51內(nèi)部雖然只有4kB的程序存儲(chǔ)器,但在實(shí)際應(yīng)用中可以在外部擴(kuò)展至64kB,其內(nèi)部有一個(gè)16位的程序計(jì)數(shù)器PC可尋址64kB以訪問程序存儲(chǔ)器。根據(jù)單片機(jī)指令結(jié)構(gòu)[2]及C語言的數(shù)據(jù)類型關(guān)系,并考慮到程序仿真時(shí)并不會(huì)用到所有的存儲(chǔ)單元,因此采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。程序存儲(chǔ)器的數(shù)據(jù)結(jié)構(gòu)描述如下:

typedef struct progMEM

{ char opCode;

unsigned label;

//該條指令如果有標(biāo)號(hào),則存放其地址

char opNum1;

char opNum2;

char opNum3;

pMEM recAddr;

//存放當(dāng)前指令的地址

pMEM nextIs;

//指向下一條指令的地址

}MemData, *pMEM;

pMEM PC;

在結(jié)構(gòu)體中,幾個(gè)字符型變量分別用于存放指令的操作碼和操作數(shù),并用結(jié)構(gòu)體指針變量存放當(dāng)前指令及下一條指令的地址。仿真系統(tǒng)將單片機(jī)源程序翻譯成目標(biāo)代碼放在程序存儲(chǔ)器(結(jié)構(gòu)體)中,通過結(jié)構(gòu)體類型的指針變量可以訪問程序存儲(chǔ)器中的指令。

2.2 數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)

MCS51將工作寄存器、端口和數(shù)據(jù)存儲(chǔ)器統(tǒng)一編址,存儲(chǔ)空間為256B。堆棧區(qū)設(shè)在30H~7FH,由堆棧指針SP指向棧頂。內(nèi)部RAM,除了工作寄存器、位標(biāo)志、堆棧以外的單元,其余都可以當(dāng)一般數(shù)據(jù)寄存器使用。如果內(nèi)部數(shù)據(jù)存儲(chǔ)器不夠用,可以外接數(shù)據(jù)存儲(chǔ)器,擴(kuò)展至64kB。內(nèi)部數(shù)據(jù)存儲(chǔ)器在程序調(diào)試時(shí)需經(jīng)常查看單元內(nèi)容,且數(shù)量不大,因此將內(nèi)部數(shù)據(jù)存儲(chǔ)器定義為數(shù)組,堆棧指針定義為整型,并初始化為30H。

char dataRAM[256];

int ramSP=0x30;

數(shù)據(jù)存儲(chǔ)器單元的地址和數(shù)組的下標(biāo)對(duì)應(yīng),這樣在程序調(diào)試時(shí),如果要查看內(nèi)部數(shù)據(jù)存儲(chǔ)器的內(nèi)容,只要查看數(shù)據(jù)相應(yīng)元素的值即可。另外定義一個(gè)結(jié)構(gòu)體類型,模擬外部擴(kuò)展的數(shù)據(jù)存儲(chǔ)器,結(jié)構(gòu)體定義如下:

typedef exDataRAM

{ char data;

unsigned addrRAM;

//存放存儲(chǔ)單元的地址,用于查詢

exRAMpt exDataP;

}RAMdata, *exRAMpt;

如果用到外部數(shù)據(jù)存儲(chǔ)器,則將數(shù)據(jù)存在動(dòng)態(tài)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,由于仿真程序運(yùn)行時(shí)使用本機(jī)的存儲(chǔ)器,因此其地址與仿真的單片機(jī)的地址不同,用一個(gè)變量addrRAM存放數(shù)據(jù)存儲(chǔ)器的地址,以便于地址單元內(nèi)的數(shù)據(jù)查詢。

3軟件移植的可視化仿真

軟件移植可視化仿真系統(tǒng),不僅要完成匯編指令的功能,而且應(yīng)該根據(jù)要求查詢程序執(zhí)行后各寄存器的內(nèi)容、端口的狀態(tài)和運(yùn)行結(jié)果。在系統(tǒng)開發(fā)過程中,我們?cè)敿?xì)分析了單片機(jī)指令格式[2]和計(jì)算機(jī)執(zhí)行指令的過程[3],并根據(jù)仿真的速度要求,通過比較各語言的特點(diǎn),選用Visual C++語言和80x86匯編語言,采用C語言環(huán)境下的在線匯編技術(shù),用解釋法實(shí)現(xiàn)可視化指令仿真系統(tǒng)。

3.1 軟件移植過程

解釋法完成異構(gòu)機(jī)指令仿真,需要對(duì)源程序中的每一條指令執(zhí)行如下操作:

step1 對(duì)指令從右向左掃描,如果有注釋,則去掉注釋;

setp2 對(duì)指令從左向右掃描,如果有標(biāo)號(hào),則去掉標(biāo)號(hào),并記錄標(biāo)號(hào)所在位置;

step3 將無標(biāo)號(hào)和注釋的指令從左向右逐步分離出操作碼和操作數(shù);

step4 保存操作碼和操作數(shù);

step5 分析操作碼的功能并執(zhí)行該指令。重復(fù)執(zhí)行以上步驟直到程序結(jié)束,對(duì)分離出的操作碼和操作數(shù)存入結(jié)構(gòu)體progMEM定義的變量中。實(shí)現(xiàn)這一過程的函數(shù)結(jié)構(gòu)如下:

pMEM StringSplit(char *IstructionString)

{ IsCode_Num=new MemData;

if(scan_char==';')

{ 去除分號(hào)后的內(nèi)容; }

if(scan_char==':')

{ 保存該指令所在單元地址; }

if(scan_char==' ')

{ 保存空格前的字符串; }

//得到的第一個(gè)字符串為操作碼

return(IsCode)

}

該函數(shù)入口參數(shù)為指令字符串,返回指向保存該指令的結(jié)構(gòu)體變量的指針。生成目標(biāo)代碼和執(zhí)行指令的過程可以用switch語句或事先設(shè)計(jì)函數(shù)跳轉(zhuǎn)表實(shí)現(xiàn)[4],本文采用switch語句實(shí)現(xiàn),實(shí)現(xiàn)函數(shù)結(jié)構(gòu)如下:

void GetCode(pMEM inCode)

{ …

switch(opCode)

{ case code1: excuCode1();break;

case code2: excuCode2(); break;

case codeN: excuCodeN();break;

}

}

以上代碼中excuCodeN的入口參數(shù)為指令的操作碼和相應(yīng)的操作數(shù)。

3.2 可視化仿真的實(shí)現(xiàn)

可視化仿真系統(tǒng)應(yīng)該提供一個(gè)集成開發(fā)環(huán)境,在此環(huán)境下可以編輯新的匯編程序和打開已經(jīng)存在的源程序,并能將用被仿真計(jì)算機(jī)語言所編寫的源程序匯編(編譯或解釋)成IBM-PC所能識(shí)別的代碼及執(zhí)行所需的操作,根據(jù)需要查詢相應(yīng)存儲(chǔ)器單元的內(nèi)容和端口的狀態(tài)并顯示查詢結(jié)果。本系統(tǒng)在實(shí)現(xiàn)集成開發(fā)環(huán)境時(shí),設(shè)計(jì)一個(gè)文本窗口,在窗口內(nèi)輸入的每條指令占用一行,程序輸入后,選擇工具菜單中的"執(zhí)行"命令,則對(duì)窗口內(nèi)的指令逐行掃描,完成對(duì)程序的解釋執(zhí)行。程序執(zhí)行分單步執(zhí)行和連續(xù)執(zhí)行,如果是單步執(zhí)行,則執(zhí)行一條指令后顯示相應(yīng)存儲(chǔ)單元或寄存器的內(nèi)容。連續(xù)執(zhí)行,則在執(zhí)行完所有的指令后,彈出一個(gè)對(duì)話窗口,根據(jù)實(shí)際,可以查看所有數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器的內(nèi)容,或者輸入要查看的寄存器或內(nèi)存單元的地址,顯示相應(yīng)單元內(nèi)容,結(jié)果顯示采用十進(jìn)制或二進(jìn)制。對(duì)于端口狀態(tài),顯示數(shù)據(jù)為二進(jìn)制形式。結(jié)果的可視化查詢對(duì)于存儲(chǔ)器和寄存器采用不同的技術(shù),為每一個(gè)寄存器設(shè)置一個(gè)文本框,用以顯示對(duì)應(yīng)寄存器的內(nèi)容,而所有程序中涉及到的存儲(chǔ)單元的內(nèi)容顯示在同一個(gè)文本窗口中。

4 結(jié)束語

本文介紹的可視化仿真系統(tǒng)的開發(fā)技術(shù),使用圖形用戶界面(GUI),實(shí)驗(yàn)結(jié)果表明,該方法顯示直觀、結(jié)果查詢方便,而且應(yīng)用VC環(huán)境下在線匯編技術(shù),編寫的程序代碼占用系統(tǒng)資源少,又能保證系統(tǒng)運(yùn)行效率。雖然本文以IBM-PC和單片機(jī)作為應(yīng)用實(shí)例,但是詳細(xì)分析其它異構(gòu)計(jì)算機(jī)的體系結(jié)構(gòu)和指令功能,使用本文提出的軟件移植的可視化仿真技術(shù),不僅可以解決各種系統(tǒng)開發(fā)中的難題,而且可以解決各種異構(gòu)計(jì)算機(jī)之間的軟件兼容性和移植性問題。

參考文獻(xiàn)

[1] 張吉鋒, 徐煒民, 嚴(yán)允中. 計(jì)算機(jī)系統(tǒng)結(jié)構(gòu).北京:電子工業(yè)出版社,1997

[2]徐君毅,張友德,余寶洪等.單片微型計(jì)算機(jī)原理與應(yīng)用.上海:上??茖W(xué)技術(shù)出版社,1990.