SI02匯編語(yǔ)言集成開發(fā)環(huán)境介紹
4.2 模擬執(zhí)行程序(仿真程序)的實(shí)現(xiàn)本文引用地址:http://m.butianyuan.cn/article/165830.htm
模擬執(zhí)行程序(仿真程序)由C++語(yǔ)言編寫的軟件仿真的類來(lái)實(shí)現(xiàn)。該類被說(shuō)明為匯編程序類的友員,以便訪問(wèn)匯編程序類的數(shù)據(jù)成員。
類中構(gòu)造了一結(jié)構(gòu)型變量來(lái)實(shí)現(xiàn)對(duì)硬件方面的仿真,并用一個(gè)成員函數(shù)來(lái)模擬指令執(zhí)行的流程。該函數(shù)的參數(shù)是當(dāng)前正運(yùn)行的指令的PC值,返回將要運(yùn)行的下條指令的PC值。
通過(guò)對(duì)匯編程序類中產(chǎn)生的每條指令所在的行號(hào)、程序計(jì)數(shù)器(PC)的地址、指令的機(jī)器碼和字節(jié)數(shù)的分析,確定該指令是否改變了特殊功能寄存器、片內(nèi)RAM、片外RAM以及程序計(jì)數(shù)器(PC) 的值。并根據(jù)分析的結(jié)果更新特殊功能寄存器和RAM的值。若該指令是跳轉(zhuǎn)指令,需根據(jù)跳轉(zhuǎn)條件判斷跳轉(zhuǎn)的地址,獲得跳轉(zhuǎn)到的行的PC值,作為函數(shù)的返回值。否則將源程序的PC值增加1。
當(dāng)然,該開發(fā)環(huán)境還支持單步執(zhí)行、執(zhí)行到斷點(diǎn)等程序調(diào)試方式,它們?cè)趯?shí)現(xiàn)方法上和連續(xù)執(zhí)行基本一致,只是單步執(zhí)行時(shí)每次只執(zhí)行一條語(yǔ)句,然后等待用戶輸入新的命令才開始執(zhí)行下條程序;執(zhí)行到斷點(diǎn)的實(shí)現(xiàn),只需在連續(xù)執(zhí)行流程中增加一個(gè)是否執(zhí)行到斷點(diǎn)了的判斷語(yǔ)句:如果不是斷點(diǎn),則程序往下執(zhí)行;如果是斷點(diǎn)則停止執(zhí)行,等待用戶輸入新的命令。而新命令的輸入,則是通過(guò)編輯器界面上的調(diào)試菜單或鍵盤操作來(lái)實(shí)現(xiàn)。
4.3 編輯器(集成開發(fā)環(huán)境界面)的實(shí)現(xiàn)
界面設(shè)計(jì)的目的是為了提供良好的人機(jī)交互環(huán)境,集編輯、匯編、調(diào)試和通信于一體,便于使用。利用MFC的消息映像機(jī)制,通過(guò)鼠標(biāo)和鍵盤事件來(lái)驅(qū)動(dòng)相應(yīng)程序的運(yùn)行。面向程序設(shè)計(jì)語(yǔ)言的符號(hào)化調(diào)試技術(shù)的特點(diǎn)就是能夠支持在源程序的任何程序語(yǔ)句上設(shè)置斷點(diǎn),并支持單步執(zhí)行、連續(xù)執(zhí)行、執(zhí)行到斷點(diǎn)等多種程序執(zhí)行方式。
上述所有功能都要以交互的方式來(lái)完成,并且以調(diào)試時(shí)顯示合適的源代碼的行號(hào)的形式來(lái)達(dá)到這些目的。面向程序設(shè)計(jì)語(yǔ)言的符號(hào)調(diào)試,可以面向多種程序設(shè)計(jì)語(yǔ)言,我們做的這個(gè)開發(fā)環(huán)境主要面向SI02匯編語(yǔ)言的程序設(shè)計(jì),因此我們所要開發(fā)的調(diào)試環(huán)境就是為這個(gè)使用匯編語(yǔ)言編寫的程序提供調(diào)試服務(wù)。
面向程序設(shè)計(jì)語(yǔ)言的符號(hào)化調(diào)試技術(shù)的實(shí)現(xiàn)需要從編譯或匯編連接系統(tǒng)中取得幫助,也就是說(shuō),編譯或匯編連接系統(tǒng)在進(jìn)行嵌入式軟件的編譯(匯編)生成時(shí),要盡可能多的保留程序源代碼的信息,即在所產(chǎn)生的目標(biāo)代碼文件中保存目標(biāo)代碼與源代碼之間聯(lián)系的信息。包括從源代碼到目標(biāo)代碼的對(duì)應(yīng)關(guān)系的信息、程序調(diào)試過(guò)程中出現(xiàn)的錯(cuò)誤信息、以及源代碼中所用到的符號(hào)的定義的信息。調(diào)試環(huán)境通過(guò)對(duì)目標(biāo)文件結(jié)構(gòu)進(jìn)行分析,從已存在的信息中建立以下幾種聯(lián)系的運(yùn)行時(shí)調(diào)試信息表,從而為實(shí)現(xiàn)面向程序設(shè)計(jì)語(yǔ)言的符號(hào)化調(diào)試提供了基礎(chǔ)。
(1)目標(biāo)地址到源代碼的對(duì)應(yīng)關(guān)系表;
(2)系統(tǒng)常量與內(nèi)存地址的對(duì)應(yīng)關(guān)系表;
(3)系統(tǒng)變量與內(nèi)存地址的對(duì)應(yīng)關(guān)系表;
(4)運(yùn)行代碼的標(biāo)號(hào)與目標(biāo)地址的對(duì)應(yīng)關(guān)系表;
(5)匯編或運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤信息表
其中,目標(biāo)地址到源代碼的對(duì)應(yīng)關(guān)系可以由匯編以后生成的List文件和Obj文件來(lái)表示;系統(tǒng)常量與內(nèi)存地址的對(duì)應(yīng)關(guān)系表可由系統(tǒng)常量表中所保存的地址信息來(lái)建立;系統(tǒng)變量與內(nèi)存地址的對(duì)應(yīng)關(guān)系可由系統(tǒng)變量表中的信息來(lái)建立。另外匯編或運(yùn)行過(guò)程中如果出現(xiàn)錯(cuò)誤,調(diào)試器應(yīng)能夠到錯(cuò)誤信息文件中進(jìn)行查找并顯示相應(yīng)的錯(cuò)誤信息。
建立這些聯(lián)系表,并不是在運(yùn)行時(shí)直接提供調(diào)試所需要的信息,從這一角度來(lái)看,應(yīng)用程序調(diào)試環(huán)境必須對(duì)下列現(xiàn)象進(jìn)行處理:
(1)程序運(yùn)行的當(dāng)前行顯示;
(2)變量跟蹤與變量?jī)?nèi)容顯示;
(3)斷點(diǎn)行顯示;
(4)變量檢查及修改;
(5)錯(cuò)誤信息顯示。
為解析上述現(xiàn)象,調(diào)試環(huán)境需要即時(shí)的取得模擬執(zhí)行模塊的執(zhí)行狀態(tài),并取得各種寄存器的值、內(nèi)存狀態(tài)以及模擬執(zhí)行的方式,再通過(guò)對(duì)各種聯(lián)系表的處理來(lái)實(shí)現(xiàn)面向程序設(shè)計(jì)語(yǔ)言的調(diào)試。開發(fā)完成后的系統(tǒng)如圖5所示。
5.結(jié)論
SI02IDE作為面向SI02語(yǔ)言的集成開發(fā)環(huán)境,將方便用戶使用SI02語(yǔ)言進(jìn)行各種開發(fā)工作。本文的創(chuàng)新點(diǎn)在于提高了軟件開發(fā)的速度、效率和質(zhì)量,使該軟件成為軟件開發(fā)最重要的和必不可少的開發(fā)工具。但該開發(fā)環(huán)境在功能上仍有一些缺陷和不夠理想的地方。比如,對(duì)斷點(diǎn)位置的處理不如主流IDE方便和直觀,仍需進(jìn)一步的改進(jìn)和提高。
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評(píng)論