實(shí)驗(yàn)一掌握DEBUG的基本命令及其功能_第1頁(yè)
實(shí)驗(yàn)一掌握DEBUG的基本命令及其功能_第2頁(yè)
實(shí)驗(yàn)一掌握DEBUG的基本命令及其功能_第3頁(yè)
實(shí)驗(yàn)一掌握DEBUG的基本命令及其功能_第4頁(yè)
實(shí)驗(yàn)一掌握DEBUG的基本命令及其功能_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一 掌握DEBUG 基本命令及其功能 實(shí)驗(yàn)作業(yè)截止日 2015年3月14日(星期六)23:59:59 【上篇】 查看CPU和內(nèi)存,用機(jī)器指令和匯編指令編程一實(shí)驗(yàn)?zāi)康模赫莆誅EBUG 的基本命令及其功能掌握win7 win8 使用DEBUG功能二實(shí)驗(yàn)內(nèi)容:1.預(yù)備知識(shí):Debug的使用(1)什么是Debug?Debug是DOS、Windows都提供的實(shí)模式(8086方式)程序的調(diào)試工具。使用它,可以查看CPU各種寄存器中的內(nèi)容、內(nèi)存的情況和在機(jī)器碼級(jí)跟蹤程序的運(yùn)行。(2)我們用到的Debug功能l 用Debug的R命令查看、改變CPU寄存器的內(nèi)容;l 用Debug的D命令查看內(nèi)存中的內(nèi)容;l

2、 用Debug的E命令改寫內(nèi)存中的內(nèi)容;l 用Debug的U命令將內(nèi)存中的機(jī)器指令翻譯成匯編指令;l 用Debug的T命令執(zhí)行一條機(jī)器指令;l 用Debug的A命令以匯編指令的格式在內(nèi)存中寫入一條機(jī)器指令。(3) 進(jìn)入DebugDebug是在DOS方式下使用的程序。我們?cè)谶M(jìn)入Debug前,應(yīng)先進(jìn)入到DOS方式。用以下方式可以進(jìn)入DOS:重新啟動(dòng)計(jì)算機(jī),進(jìn)入DOS方式,此時(shí)進(jìn)入的是實(shí)模式的DOS。在Windows中進(jìn)入DOS方式,此時(shí)進(jìn)入的是虛擬8086模式的DOS。 (4)用R命令查看、改變CPU寄存器的內(nèi)容1)顯示CPU內(nèi)部所有寄存器內(nèi)容和標(biāo)志位狀態(tài);格式為:-R2)顯示和修改某個(gè)指定寄存器

3、內(nèi)容,格式為:-R 寄存器名若要修改一個(gè)寄存器中的值,比如AX中的值,可用R命令后加寄存器名來(lái)進(jìn)行,輸入“r ax”后按Enter鍵,將出現(xiàn)“:”作為輸入提示,在后面輸入要寫入的數(shù)據(jù)后按Enter鍵,即完成了對(duì)AX中內(nèi)容的修改。若想看一下修改的結(jié)果,可再用R命令查看(5)用Debug的D命令查看內(nèi)存中的內(nèi)容1)格式:-d 段地址:偏移地址,Debug將列出從指定內(nèi)存單元開始的128個(gè)內(nèi)存單元的內(nèi)容。使用D命令,Debug將輸出3部分內(nèi)容,如圖2.34所示。中間是部分從指定地址開始的128個(gè)內(nèi)存單元的內(nèi)容,用十六進(jìn)制的格式輸出,每行的輸出從16的整數(shù)倍的地址開始,最多輸出16個(gè)單元的內(nèi)容。左邊是

4、每行的起始地址。右邊是每個(gè)內(nèi)存單元中的數(shù)據(jù)對(duì)應(yīng)的可顯示的ASCII碼字符。2)格式:-d 段地址:起始偏移地址 結(jié)尾偏移地址,Debug將列出指定范圍的內(nèi)存單元的內(nèi)容。(6) 用Debug的E命令改寫內(nèi)存中的內(nèi)容,有兩種格式:1)格式:-e 起始地址 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù),如要將1000:0開始的10個(gè)內(nèi)存單元修改為09,可以用”-e 1000:0 0 1 2 3 4 5 6 7 8 9”2)格式:-e起始地址,逐個(gè)單元相繼地修改。如:-e 1000:10 1000:0010 6D.0 61.1 72.2 6B.1c輸入e 1000:10 ,Debug 顯示起始地址1000:0010,和1000:

5、0010單元的原始內(nèi)容:6D,然后光標(biāo)停在“.”的后面提示輸入想要寫入數(shù)據(jù),輸入數(shù)據(jù)0,然后按空格鍵,即用輸入的數(shù)據(jù)0改寫了當(dāng)前的內(nèi)存單元。當(dāng)前單元處理完成后,Debug將接著顯示下一個(gè)內(nèi)存單元的原始內(nèi)容,并提示讀者進(jìn)行修改,可以用同樣的方法處理。改寫完畢后,按Enter鍵,E命令操作結(jié)束??梢杂肊命令向內(nèi)存中寫入字符,比如:用E命令從內(nèi)存1000:0開始寫入:數(shù)值1、字符“a”,數(shù)值2,字符“b”,數(shù)值3,字符“c”,可以用:“-e 1000:0 1 a 2 b 3 c”修改的結(jié)果是,向1000:0、1000:2、1000:4單元中寫入數(shù)值1、2、3,向1000:1、1000:3、1000:

6、 5單元中寫入字符“a”、“b”、“c”的ASCII碼值:61H、62H、63H。也可以用E命令向內(nèi)存中寫入字符串,比如:用E命令從內(nèi)存1000:0開始寫入:數(shù)值1、字符串“a+b”、數(shù)值2、字符串“c+”、字符3、字符串“IBM”。 可以用:-e 1000:0 1 “a+b” 2 “c+” 3 “IBM” 。可以用E命令向內(nèi)存中寫入機(jī)器碼比如要從內(nèi)存1000:0單元開始寫入這樣一段機(jī)器碼:機(jī)器碼 對(duì)應(yīng)的匯編指令b80100 mov ax,0001b90200 mov cx,000201c8 add ax, cx可用:”-e 1000:0 b8 01 00 b9 02 00 01 c8”(7)

7、 用U命令查看寫入的或內(nèi)存中原有的機(jī)器碼所對(duì)應(yīng)的匯編指令1)-U 段地址:偏移地址該命令從指定地址開始,反匯編32個(gè)字節(jié),若地址省略,則從上一個(gè)U命令的最后一條指令的下一個(gè)單元開始顯示32個(gè)字節(jié)。2)-U地址范圍該命令對(duì)指定范圍的內(nèi)存單元進(jìn)行反匯編 (8) 使用T命令,可以執(zhí)行CS:IP指向的指令,格式:-t,指令執(zhí)行后,Debug顯示輸出CPU中寄存器的狀態(tài)。(9)用Debug的A命令以匯編指令的形式在內(nèi)存中寫入機(jī)器指令。格式:-A 段地址:偏移地址該命令從指定地址開始允許輸入?yún)R編語(yǔ)句,把它們匯編成機(jī)器代碼相繼存放在從指定地址開始的存儲(chǔ)器中。三.實(shí)驗(yàn)任務(wù)(1)使用Debug,將下面的程序段寫

8、入內(nèi)存,逐條執(zhí)行,觀察每條指令執(zhí)行后,CPU中相關(guān)寄存器中內(nèi)容的變化。(逐條執(zhí)行,每條指令執(zhí)行結(jié)果截圖)機(jī)器碼 匯編指令b8 20 4e mov ax,4E20H05 16 14 add ax,1416Hbb 00 20 mov bx,2000H01 d8 add ax,bx89 c3 mov bx,ax01 d8 add ax,bxb8 1a 00 mov ax,001AHbb 26 00 mov bx,0026H00 d8 add al,bl00 dc add ah,bl00 c7 add bh,alb4 00 mov ah,000 d8 add al,bl04 9c add al,9CH

9、提示:可用E命令和A命令以兩種方式將指令寫入內(nèi)存。注意用T命令執(zhí)行時(shí),CS:IP的指向。(2) 將下面3條指令寫入從2000:0開始的內(nèi)存單元中,利用這3條指令計(jì)算2的8次方。mov ax,1add ax,axjmp 2000:0003(3)查看內(nèi)存中的內(nèi)容PC機(jī)主板上的ROM中寫有一個(gè)生產(chǎn)日期,在內(nèi)存FFF00HFFFFFH的某幾個(gè)單元中,請(qǐng)找到這個(gè)生產(chǎn)日期并試圖改變它。(內(nèi)存ffff:0005ffff:000C(共8個(gè)字節(jié)單元中)處)【下篇】用機(jī)器指令和匯編指令編程一實(shí)驗(yàn)內(nèi)容1.預(yù)備知識(shí):Debug命令的補(bǔ)充(1)在D命令中使用段寄存器格式:“d 段寄存器:偏移地址”,以段寄存器中的數(shù)據(jù)為

10、段地址SA,列出從SA:偏移地址開始的內(nèi)存區(qū)間中的數(shù)據(jù)。以下是4個(gè)例子:-r ds:1000-d ds:0 ;查看從1000:0開始的內(nèi)存區(qū)間中的內(nèi)容-r ds:1000-d ds:10 18 ;查看1000:101000:18中的內(nèi)容-d cs:0 ;查看當(dāng)前代碼段中的指令代碼-d ss:0 ;查看當(dāng)前棧段中的內(nèi)容(2)在E、A、U命令中使用段寄存器在E、A、U這些可以帶有內(nèi)存單元地址的命令中,也可以同D命令一樣,用段寄存器表示內(nèi)存單元的段地址。以下是3個(gè)例子:-r ds:1000-e ds:0 11 22 33 44 55 66 ;在從1000:0開始的內(nèi)存區(qū)間中寫入數(shù)據(jù)-u cs:0 ;

11、以匯編指令的形式,顯示當(dāng)前代碼段中的代碼,0代碼的偏移地址-r ds:1000-a ds:0 ;以匯編指令的形式,向從1000:0開始的內(nèi)存單元中寫入指令(3)下一條指令執(zhí)行了嗎? 在Debug中,用A命令寫一段程序:mov ax,2000mov ss,axmov sp,10 ;安排2000:00002000:000F 為??臻g,初始化棧頂。mov ax,3123 push axmov ax,3366push ax ;在棧中壓入兩個(gè)數(shù)據(jù)。在用T命令單步執(zhí)行mov ax,2000后,顯示出當(dāng)前CPU各個(gè)寄存器的狀態(tài)和下一步要執(zhí)行的指令:mov ss,ax;在用T命令單步執(zhí)行mov ss,ax后,

12、下一條指令應(yīng)該是mov sp,10,卻變成了mov ax,3123?注意,在用T命令單步執(zhí)行mov ss,ax 前,ax=0000,ss=0b39,sp=ffee,而執(zhí)行后 ss=2000,sp=0010。ss變?yōu)?000是正常的,這正是mov ss,ax的執(zhí)行結(jié)果。而能夠?qū)p設(shè)為0010的只有指令mov sp,10,看來(lái),mov sp,10一定是得到了執(zhí)行。在用T命令執(zhí)行mov ss,ax的時(shí)候,它的下一條指令mov sp,10也緊接著執(zhí)行了。整理一下我們分析的結(jié)果:在用T命令執(zhí)行mov ss,ax的時(shí)候,它的下一條指令mov sp,10也緊接著執(zhí)行了。一般情況下,用T命令執(zhí)行一條指令后,

13、會(huì)停止繼續(xù)執(zhí)行,顯示出當(dāng)前CPU各個(gè)寄存器的狀態(tài)和下一步要執(zhí)行的指令,但T命令執(zhí)行mov ss,ax的時(shí)候,沒(méi)有做到這一點(diǎn)。不單是mov ss,ax,對(duì)于如:mov ss,bx,mov ss,0,pop ss等指令都會(huì)發(fā)生上面的情況,這些指令有哪些共性呢?它們都是修改棧段寄存器SS的指令。結(jié)論:Debug的T命令在執(zhí)行修改寄存器SS的指令時(shí),下一條指令也緊接著被執(zhí)行。二實(shí)驗(yàn)任務(wù)(1)使用Debug,將上面的程序段寫入內(nèi)存,逐條執(zhí)行,根據(jù)指令執(zhí)行后的實(shí)際運(yùn)行情況填空。(逐條執(zhí)行,每條指令執(zhí)行結(jié)果截圖)mov ax,ffffmov ds,axmov ax,2200mov ss,axmov sp,0

14、100mov ax,0 ;ax= c0ea add ax,2;ax= c0fc mov bx,4 ;bx= 30f0 add bx,6;bx= 6021 push ax ;sp= 00fe ;修改的內(nèi)存單元的地址是 2200:00fe 內(nèi)容為 c0fc push bx ;sp= 00fc ;修改的內(nèi)存單元的地址是 2200:00fc 內(nèi)容為 6021 pop ax ;sp= 00fe ;ax= 6021 pop bx ;sp= 0100 ;bx= c0fc push 4;sp= 00fe ;修改的內(nèi)存單元的地址是 ffff:0100 內(nèi)容為 6021 push 6 ;sp= 00fc ;修改的內(nèi)存單元的地址是 ffff:0110 內(nèi)容為 c0fc (2)使用Debug,將下面的程序段寫入內(nèi)存,逐條執(zhí)行,觀察每條指令執(zhí)行后,CPU中相關(guān)寄存器中內(nèi)容的變化。(逐條執(zhí)行,每條指令執(zhí)行結(jié)果截圖) 如果有問(wèn)題請(qǐng)說(shuō)明原因匯編指令mov ax,1000Hmov ds,axmov ds,0add ds,axadd不可以對(duì)段寄存器進(jìn)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論