資源描述:
《匯編語言上機(jī)過程88820》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、附加1用DEBUG驗證程序段通常匯編教學(xué)中,匯編程序結(jié)構(gòu)會在指令系統(tǒng)后面講,學(xué)生在學(xué)習(xí)指令系統(tǒng)時由于沒有講匯編程序結(jié)構(gòu)而無法編寫匯編程序來加深對匯編指令的理解,因此,在這里我們通過2個例子,介紹使用DEBUG調(diào)試工具編寫程序段來學(xué)習(xí)匯編指令。有關(guān)DEBUG的常用命令的用法請參看《現(xiàn)代微機(jī)原理與接口技術(shù)》教材的附錄A.2.4題目:非壓縮BCD碼的減法運算,做68-9movax,0608hmovbl,09hsubal,blaas運行debug首先用A命令輸入程序Debug中只使用16進(jìn)制數(shù),且無需加H后綴直接用回車退出匯編編輯狀態(tài)使用T命令跟蹤執(zhí)行第一個T命令要
2、帶上程序首地址后面的T命令無需地址標(biāo)志位當(dāng)前指令執(zhí)行后的各寄存器的結(jié)果這是還未執(zhí)行的下一條指令的反匯編這是還未執(zhí)行的下一條指令的地址和指令碼調(diào)試完后用Q命令退出DEBUG。DEBUG命令參見教材2附錄D。下面給出DEBUG中標(biāo)志位狀態(tài)符號的含義。標(biāo)志為1時為0時溢出OF方向DF中斷IF符號SF零位ZF輔助AF奇偶PF進(jìn)位CFOVDNEINGZRACPECYNVUPDIPLNZNAPONC再舉一個有訪存操作的例子MOVSI,0050H;(DS)=2000HMOVDI,0100H;(ES)=3000HMOVCX,5CLDREPMOVSB1)先用A命令輸入程序2)
3、用R命令修改DS和ES寄存器到約定值DS的原始值輸入的修改值3)用D命令查看源數(shù)據(jù)區(qū)和目標(biāo)數(shù)據(jù)區(qū)4)用E命令初始化源數(shù)據(jù)區(qū)后再用D命令檢查源數(shù)據(jù)區(qū)和目的數(shù)據(jù)區(qū)5)單步跟蹤執(zhí)行程序6)執(zhí)行后檢查源數(shù)據(jù)區(qū)和目標(biāo)數(shù)據(jù)區(qū)注意,用A命令輸入指令時,如果輸入錯誤debug會立即指出錯誤和位置。地址不會變化,以便用戶修正指令。附加2匯編語言上機(jī)過程用MASM5.0上機(jī)過程第一步編輯:第二步匯編:可以不輸入,用回車回應(yīng)修改好后再匯編:第三步連接并執(zhí)行:可以直接用回車回應(yīng)執(zhí)行用DEBUG調(diào)試程序:段值偏移指令碼反匯編的源碼1)用U命令查看程序和目標(biāo)碼及指令地址2)用T命令單步
4、跟蹤,逐條執(zhí)行看中間結(jié)果,DEBUG將顯示每個寄存器以及各標(biāo)志位的當(dāng)前值這是還未執(zhí)行的下一條指令這是MOVBX,[SI]的執(zhí)行結(jié)果標(biāo)志位3)對于系統(tǒng)功能調(diào)用,可以用G命令設(shè)置斷點執(zhí)行,也可以用P命令跳過過程與系統(tǒng)功能服務(wù)程序。設(shè)斷點執(zhí)行,斷點設(shè)在INT21H的后一句INT21H輸出的一個字符注意:DEBUG只支持16位匯編調(diào)試,如果要編寫32位匯編程序,需要用MASM6.11匯編和連接,用CodeView軟件查看執(zhí)行代碼。但MASM6.11中帶的CodeView4.01可以查看32位程序的執(zhí)行代碼,不能進(jìn)行單步調(diào)試。要調(diào)試可以考慮使用SoftICE軟件。另外
5、,VC嵌入?yún)R編可以支持80486的所有指令,也支持32位匯編。用VC6.0實現(xiàn)C++中嵌入?yún)R編建立源程序asmsample.cpp將下列程序輸入到asmsample.cpp中#includeintpower2(int,int);voidmain(void){cout<<"2的6次方乘5等于:t";cout<6、/返回值存于EAX}編譯執(zhí)行后看結(jié)果