官术网_书友最值得收藏!

第2章 MARS匯編程序開發(fā)環(huán)境

2.1 MARS界面簡介

MARS是一個MIPS匯編和運行模擬器,可以匯編和模擬MIPS匯編語言程序的執(zhí)行。它可以從命令行或集成開發(fā)環(huán)境(IDE)中使用。MARS采用Java編寫,需要J2SE Java運行時環(huán)境(JRE)1.5以上版本才能工作。它作為可執(zhí)行Jar文件發(fā)布。從版本4.0開始,MARS匯編和模擬器支持155條MIPS-32指令集指令以及約370條偽指令和宏指令,如MIDI輸出、隨機數(shù)生成等。通過設置,可禁止使用偽指令和宏指令以及其他存儲器尋址模式。

MARS界面如圖2-1所示,包含菜單欄、快捷鍵、寄存器窗口、工作區(qū)窗口、消息窗口等。

圖2-1 MARS界面

工作區(qū)窗口不僅僅包含代碼編輯窗,也包含運行窗口。工作區(qū)運行窗口各部分含義如圖2-2所示。

圖2-2 MARS工作區(qū)運行窗口

數(shù)據(jù)段數(shù)據(jù)以字為單位顯示,字節(jié)序與主機一致,即模擬器若運行在小字節(jié)序計算機中,那么MARS就以小字節(jié)序將連續(xù)4個內存單元的數(shù)據(jù)讀取并顯示出來。也就是說,若地址0x00002000、0x00002001、0x00002002、0x00002003存儲單元分別存放數(shù)據(jù)0x61、0x62、0x63、0x64,那么MARS數(shù)據(jù)顯示區(qū)域中起始地址為0x00002000、偏移地址為+0處顯示數(shù)據(jù)0x64636261。

2.2 MARS菜單欄簡介

2.2.1 File菜單

File菜單下含有的子菜單如圖2-3所示。該菜單下大部分子菜單都為常規(guī)功能,這里不一一介紹。

圖2-3 MARS File子菜單

子菜單Dump Memory可導出MARS中存儲單元數(shù)據(jù)到文件中。具體操作方法為:單擊Dump Memory子菜單,在如圖2-4所示彈出窗口的左邊選擇需要導出的內存區(qū)間,可能選項如圖2-5所示,分別為用戶程序代碼段和數(shù)據(jù)段;在右邊選擇導出文件數(shù)據(jù)格式,可能選項如圖2-6所示,分別為ASCII碼文本、二進制數(shù)、二進制文本、十六進制文本、英特爾十六進制數(shù)、代碼或數(shù)據(jù)段窗口。為方便閱讀,通常導出十六進制文本,這樣導出的數(shù)據(jù)格式與工作區(qū)運行窗口顯示的數(shù)據(jù)格式完全一致。

圖2-4 MARS Dump Memory窗口

圖2-5 可導出的內存區(qū)間

圖2-6 可導出的數(shù)據(jù)類型

2.2.2 Run菜單

Run菜單下的子菜單如圖2-7所示,含義從上到下分別為匯編、運行、單步運行、單步退回、暫停、停止、復位、清除斷點、設置斷點等。對應的快捷鍵如圖2-8所示,從左到右分別為匯編、運行、單步運行、單步退回、暫停、停止、復位。同時還有一個控制運行速度的調節(jié)條,如圖2-9所示。調節(jié)運行速度可以清晰觀察各條指令運行結果,無須逐條指令手動單擊單步運行按鈕。

圖2-7 MARS Run子菜單

圖2-8 運行快捷鍵

圖2-9 運行速度調節(jié)條

MARS非常方便MIPS匯編語言初學者調試匯編程序的地方在于它設置了單步退回功能。若程序運行時發(fā)現(xiàn)錯誤,可以暫停運行,并逐步返回,通過逆向追溯發(fā)現(xiàn)問題,而不用從頭開始運行。

2.2.3 Settings菜單

Settings菜單下的子菜單如圖2-10所示。從上到下依次為標號窗口顯示(符號表)、傳遞參數(shù)給MIPS程序、為系統(tǒng)功能調用(5、6、7、8、12)彈出對話框、十六進制形式顯示地址、十六進制形式顯示數(shù)據(jù);打開文件同時匯編、匯編同一目錄下所有匯編源程序、匯編警告信息當作錯誤、程序指針初始化時指向全局標號main;允許使用擴展指令和偽指令、允許分支延遲、允許自動修改代碼;編輯器設置、高亮設置、異常句柄設置、存儲設置等。凡是子菜單前帶有方框表示可選項,選中則啟用相應功能,否則不啟用。沒有方框的子菜單,單擊之后會彈出新的窗口,允許用戶進行相應設置。

圖2-10 MARS Settings子菜單

這里僅簡要介紹存儲設置彈出窗口功能,它用來配置用戶代碼段、數(shù)據(jù)段起始地址以及程序的存儲結構。單擊存儲設置(Memory Configuration...)子菜單,彈出如圖2-11所示窗口,支持三種不同存儲配置方案:系統(tǒng)默認模式、數(shù)據(jù)段起始地址為0的壓縮模式、代碼段起始地址為0的壓縮模式。不同方案下,程序各個段的起始地址都詳細列在窗口右側。為方便導出代碼段機器指令,可配置為代碼段起始地址為0的壓縮模式。若僅僅模擬運行MIPS程序,可以采用其中任何一種配置。需要注意的是:無論哪種方案,MIPS程序訪問數(shù)據(jù)的存儲地址都必須處于數(shù)據(jù)段相應范圍之內,否則指令運行時會報錯。

圖2-11 存儲設置彈出窗口

MARS其他菜單這里不再一一介紹,讀者若有興趣,可以直接查閱MARS幫助手冊。查閱方法為從MARS Help菜單中選擇Help,彈出如圖2-12所示的幫助手冊。該手冊詳細介紹了MARS以及MIPS匯編指令用法。

圖2-12 MARS幫助手冊

用戶在MARS代碼編輯窗口輸入?yún)R編指令時,MARS自動給出如圖2-13所示相應MIPS匯編指令語法提示信息,以便讀者正確使用MIPS匯編指令。

圖2-13 MARS MIPS指令語法提示

2.3 MARS匯編、調試程序

2.3.1 匯編語言源程序編輯

MARS集成了代碼編輯器,用戶可直接在代碼編輯器中編輯匯編語言源程序,無須考慮程序入口,也可以不定義main標號,此時直接從編寫的第一條匯編指令開始執(zhí)行。它不同于QtSpim,無須考慮內核程序,即運行的第一條指令就是用戶編寫的匯編指令。它支持所有MIPS匯編指令、偽指令以及擴展指令。

2.3.2 匯編器

可以直接通過快捷鍵或菜單調用MARS匯編器。匯編如果沒有錯誤,工作區(qū)窗口將直接顯示運行窗口,即顯示用戶程序代碼段和數(shù)據(jù)段。若有錯誤,如圖2-14所示,則在消息窗口顯示相關錯誤提示信息。錯誤提示信息包含匯編出錯源文件、行、列以及錯誤原因等。

圖2-14 MARS匯編出錯提示信息

2.3.3 查看程序存儲映像

MARS查看程序存儲映像非常方便。下面結合一個具體示例闡述如何通過MARS查看MIPS匯編源程序存儲映像。

若有如圖2-15所示匯編語言源程序,則MARS匯編之后對應代碼段和數(shù)據(jù)段如圖2-16所示,由此可知該匯編源程序裝載到存儲空間時,代碼段起始地址為0x0,數(shù)據(jù)段起始地址為0x00002000。代碼段的第一列為存儲單元地址,第二列為匯編指令對應的機器碼,第三列為反匯編指令,第四列為匯編源代碼。通過對比代碼段中的源代碼可得到圖2-15 MIPS匯編語言源程序代碼段存儲映像如表2-1所示,根據(jù)圖2-15 MIPS匯編語言源程序數(shù)據(jù)段定義可知該程序數(shù)據(jù)段僅定義了5個存儲單元(4個字符+字符串結束符0),主機為小字節(jié)序,因此圖2-15 MIPS匯編語言源程序數(shù)據(jù)段存儲映像如表2-2所示。

圖2-15 MIPS匯編語言源程序

圖2-16 MARS顯示的代碼段和數(shù)據(jù)段

表2-1 代碼段存儲映像

表2-2 數(shù)據(jù)段存儲映像

2.3.4 運行程序

MARS不同于QtSpim,可以設置程序運行速度,用戶可根據(jù)自身需要調整運行速度以便逐步觀察各條指令運行結果,也可以直接在代碼段相應指令前方方框內選中設置斷點,還可以根據(jù)需要單步運行指令。圖2-17設置2s僅運行一條指令,并且在第4條指令前設置斷點。當單擊Run快捷鍵時,程序將慢速運行。用戶可以實時調節(jié)運行速度并觀察數(shù)據(jù)段存儲單元以及寄存器變化是否正確。一旦發(fā)現(xiàn)問題,可以單擊暫停快捷鍵暫停執(zhí)行。程序運行時,若碰到非法指令,MARS暫停執(zhí)行,高亮顯示的指令即為暫停點,并在消息窗口中顯示錯誤提示信息,指出錯誤指令的行號以及錯誤原因,如圖2-18所示。

圖2-17 MARS運行速度調節(jié)以及斷點設置示意

圖2-18 MARS運行錯誤提示信息

主站蜘蛛池模板: 福建省| 松溪县| 靖西县| 抚州市| 大化| 洪洞县| 大洼县| 开阳县| 龙胜| 若羌县| 泰顺县| 洛宁县| 都江堰市| 儋州市| 涟源市| 峨眉山市| 三台县| 仁化县| 苏州市| 特克斯县| 大宁县| 时尚| 皮山县| 古蔺县| 开平市| 元江| 佛冈县| 常州市| 黄龙县| 西华县| 房产| 江北区| 营口市| 望城县| 清水县| 布拖县| 昭平县| 文山县| 讷河市| 阳春市| 毕节市|