<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > SI02匯編語(yǔ)言集成開(kāi)發(fā)環(huán)境介紹

SI02匯編語(yǔ)言集成開(kāi)發(fā)環(huán)境介紹

作者: 時(shí)間:2012-03-07 來(lái)源:網(wǎng)絡(luò ) 收藏

4.2 模擬執行程序(仿真程序)的實(shí)現

本文引用地址:http://dyxdggzs.com/article/165830.htm

  模擬執行程序(仿真程序)由C++語(yǔ)言編寫(xiě)的軟件仿真的類(lèi)來(lái)實(shí)現。該類(lèi)被說(shuō)明為匯編程序類(lèi)的友員,以便訪(fǎng)問(wèn)匯編程序類(lèi)的數據成員。

  類(lèi)中構造了一結構型變量來(lái)實(shí)現對硬件方面的仿真,并用一個(gè)成員函數來(lái)模擬指令執行的流程。該函數的參數是當前正運行的指令的PC值,返回將要運行的下條指令的PC值。

  通過(guò)對匯編程序類(lèi)中產(chǎn)生的每條指令所在的行號、程序計數器(PC)的地址、指令的機器碼和字節數的分析,確定該指令是否改變了特殊功能寄存器、片內RAM、片外RAM以及程序計數器(PC) 的值。并根據分析的結果更新特殊功能寄存器和RAM的值。若該指令是跳轉指令,需根據跳轉條件判斷跳轉的地址,獲得跳轉到的行的PC值,作為函數的返回值。否則將源程序的PC值增加1。

  當然,該開(kāi)發(fā)還支持單步執行、執行到斷點(diǎn)等程序調試方式,它們在實(shí)現方法上和連續執行基本一致,只是單步執行時(shí)每次只執行一條語(yǔ)句,然后等待用戶(hù)輸入新的命令才開(kāi)始執行下條程序;執行到斷點(diǎn)的實(shí)現,只需在連續執行流程中增加一個(gè)是否執行到斷點(diǎn)了的判斷語(yǔ)句:如果不是斷點(diǎn),則程序往下執行;如果是斷點(diǎn)則停止執行,等待用戶(hù)輸入新的命令。而新命令的輸入,則是通過(guò)編輯器界面上的調試菜單或鍵盤(pán)操作來(lái)實(shí)現。

  4.3 編輯器(界面)的實(shí)現

  界面設計的目的是為了提供良好的人機交互,集編輯、匯編、調試和通信于一體,便于使用。利用MFC的消息映像機制,通過(guò)鼠標和鍵盤(pán)事件來(lái)驅動(dòng)相應程序的運行。面向程序設計語(yǔ)言的符號化調試技術(shù)的特點(diǎn)就是能夠支持在源程序的任何程序語(yǔ)句上設置斷點(diǎn),并支持單步執行、連續執行、執行到斷點(diǎn)等多種程序執行方式。

  上述所有功能都要以交互的方式來(lái)完成,并且以調試時(shí)顯示合適的源代碼的行號的形式來(lái)達到這些目的。面向程序設計語(yǔ)言的符號調試,可以面向多種程序設計語(yǔ)言,我們做的這個(gè)開(kāi)發(fā)環(huán)境主要面向的程序設計,因此我們所要開(kāi)發(fā)的調試環(huán)境就是為這個(gè)使用編寫(xiě)的程序提供調試服務(wù)。

  面向程序設計語(yǔ)言的符號化調試技術(shù)的實(shí)現需要從編譯或匯編連接系統中取得幫助,也就是說(shuō),編譯或匯編連接系統在進(jìn)行嵌入式軟件的編譯(匯編)生成時(shí),要盡可能多的保留程序源代碼的信息,即在所產(chǎn)生的目標代碼文件中保存目標代碼與源代碼之間聯(lián)系的信息。包括從源代碼到目標代碼的對應關(guān)系的信息、程序調試過(guò)程中出現的錯誤信息、以及源代碼中所用到的符號的定義的信息。調試環(huán)境通過(guò)對目標文件結構進(jìn)行分析,從已存在的信息中建立以下幾種聯(lián)系的運行時(shí)調試信息表,從而為實(shí)現面向程序設計語(yǔ)言的符號化調試提供了基礎。

  (1)目標地址到源代碼的對應關(guān)系表;

  (2)系統常量與內存地址的對應關(guān)系表;

  (3)系統變量與內存地址的對應關(guān)系表;

  (4)運行代碼的標號與目標地址的對應關(guān)系表;

  (5)匯編或運行過(guò)程中出現的錯誤信息表

  其中,目標地址到源代碼的對應關(guān)系可以由匯編以后生成的List文件和Obj文件來(lái)表示;系統常量與內存地址的對應關(guān)系表可由系統常量表中所保存的地址信息來(lái)建立;系統變量與內存地址的對應關(guān)系可由系統變量表中的信息來(lái)建立。另外匯編或運行過(guò)程中如果出現錯誤,調試器應能夠到錯誤信息文件中進(jìn)行查找并顯示相應的錯誤信息。

  建立這些聯(lián)系表,并不是在運行時(shí)直接提供調試所需要的信息,從這一角度來(lái)看,應用程序調試環(huán)境必須對下列現象進(jìn)行處理:

  (1)程序運行的當前行顯示;

  (2)變量跟蹤與變量?jì)热蒿@示;

  (3)斷點(diǎn)行顯示;

  (4)變量檢查及修改;

  (5)錯誤信息顯示。

  為解析上述現象,調試環(huán)境需要即時(shí)的取得模擬執行模塊的執行狀態(tài),并取得各種寄存器的值、內存狀態(tài)以及模擬執行的方式,再通過(guò)對各種聯(lián)系表的處理來(lái)實(shí)現面向程序設計語(yǔ)言的調試。開(kāi)發(fā)完成后的系統如圖5所示。

  

IDE界面 www.elecfans.com

  5.結論

  IDE作為面向語(yǔ)言的環(huán)境,將方便用戶(hù)使用SI02語(yǔ)言進(jìn)行各種開(kāi)發(fā)工作。本文的創(chuàng )新點(diǎn)在于提高了軟件開(kāi)發(fā)的速度、效率和質(zhì)量,使該軟件成為軟件開(kāi)發(fā)最重要的和必不可少的開(kāi)發(fā)工具。但該開(kāi)發(fā)環(huán)境在功能上仍有一些缺陷和不夠理想的地方。比如,對斷點(diǎn)位置的處理不如主流IDE方便和直觀(guān),仍需進(jìn)一步的改進(jìn)和提高。

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程



上一頁(yè) 1 2 3 4 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>