




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Debug常用命令集 名稱(chēng) 解釋 格式 a (Assemble) 逐行匯編 a address c (Compare) 比較兩內(nèi)存塊 c range address d (Dump) 內(nèi)存16進(jìn)制顯示 d address或 d range e (Enter) 修改內(nèi)存字節(jié) e address list f (fin) 預(yù)置一段內(nèi)存 f range list g (Go) 執(zhí)行程序 g =addressaddress. h (Hexavithmetic) 制算術(shù)運(yùn)算 h value value i (Input) 從指定端口地址輸入 i pataddress l (Load) 讀盤(pán) l addr
2、ess driver seetor m (Move) 內(nèi)存塊傳送 m range address n (Name) 置文件名 n filespec filespec. o (Output) 從指定端口地址輸出 o portadress byte q (Quit) 結(jié)束 q r (Register) 顯示和修改寄存器 r register name s (Search) 查找字節(jié)串 s range list t (Trace) 跟蹤執(zhí)行 t =address value u (Unassemble) 反匯編 u address 或range w (Write) 存盤(pán) w addressdrive
3、r sector secnum ? 聯(lián)機(jī)幫助 ? debug小匯編a命令 debug小匯編a命令是一個(gè)很有用的功能,許多的小程序都要他來(lái)做。 編一些小程序比匯編要來(lái)得方便,快潔。 在Debug中,中斷是非常有用的,首先,讓我們先了解一下中斷。 所謂中斷,其實(shí),就是,當(dāng)你做某事時(shí),有人過(guò)來(lái)找你有其他事,你先放下手中的事(計(jì)算機(jī)中,稱(chēng)為保護(hù)現(xiàn)場(chǎng)),再去與叫你的那個(gè)人辦事去,等完了,你又回,接著做剛才的事。這是個(gè)很通俗的講法。 計(jì)算機(jī)在運(yùn)行時(shí),也會(huì)出現(xiàn)這種情況,我們叫之中斷。 下面是他的一些常用中斷向量的入口值詳解:(記住哦,很用的.呵呵) IBM PC 中斷int10 ooH 屏幕方式設(shè)置 入口:
4、AH0,AL顯示方式代碼(06) 0:40*25黑白 1:40*25彩色 2:80*25黑白 3:80*25彩色文本 4:320*200彩色 5:320*200黑白 6:640*200黑白圖形模式 7:80*25單色字符(單色顯示器) 0BH色彩設(shè)置 入口:AH0B,BL0設(shè)背景色,BH015BL1設(shè)調(diào)色碼,BH01 0CH寫(xiě)圖形點(diǎn) 入口:AH0C,CX:DX列號(hào):行號(hào),AL顏色 ODH讀圖形點(diǎn) 入口:AH0D,CX:DX列號(hào):行號(hào) 返回:AL顏色 0EH在當(dāng)前頁(yè)、當(dāng)前光標(biāo)處寫(xiě)字符 入口:AH0E,AL字符的ASCII碼,BL前景色 OFH顯示器狀態(tài) 入口:AH0F 返回:AL當(dāng)前顯示器方式,
5、AH屏幕列數(shù),BH當(dāng)前頁(yè)號(hào) 01H光標(biāo)設(shè)置 入口:AH1,CH光標(biāo)起始行號(hào)(000C),CL光標(biāo)結(jié)束行號(hào)(000C) 注:CHCL 02H光標(biāo)定位 入口:AH2,BH頁(yè)號(hào),DH:DL起始行:列 03H讀光標(biāo)位置 入口:AH3,BH頁(yè)號(hào)。 返回:DH:DL起始行:列 06H窗口上卷 入品:AH6,AL窗口上卷行數(shù),CH:CLDH:DL窗口坐標(biāo) 注:AL0卷動(dòng)整個(gè)窗口 07H窗口下卷 入口:AH7,AL窗口下卷行數(shù),CH:CLDH:DL窗口坐標(biāo) 08H讀當(dāng)前光標(biāo)處字符和屬性 入口:AH8,BH頁(yè)號(hào)。 返回:AH:AL字符的顏色:字符的ASCII碼 注:顏色代碼見(jiàn)下對(duì)照表 09H:在當(dāng)前光標(biāo)處寫(xiě)字符
6、和屬性 注:光標(biāo)不下移 入口:AH9,BH頁(yè)號(hào),BL:AL字符的顏色:字符的ASCII碼,CX重復(fù)次數(shù) 1 2 3 4 5 6 7 8 BL R G B I R G B 閃爍字符底色加亮字符顏色 中斷向量號(hào)表 中斷號(hào) 解釋 中斷號(hào) 解釋 0 除數(shù)為0錯(cuò) 19 引導(dǎo)裝入程序 1 音步中斷 1A 日時(shí)調(diào)用 2 不可屏蔽中斷NMI 1B 鍵盤(pán)阻斷時(shí)得到控制權(quán) 3 斷電中斷(CCH) 1C 時(shí)鐘中斷時(shí)得到控制權(quán) 4 溢出中斷 1D 指向CRT初始參數(shù)表 5 屏幕打印中斷 1E 指向盒帶參數(shù)表 6-7 保留 1F 1KB圖形模式 8 計(jì)時(shí)器中斷(18.2秒) 20 結(jié)束DOS程序 9 鍵盤(pán)中斷 21 D
7、OS功能調(diào)用 A-D 保留 22 結(jié)束地址(建義用EXEC) E 軟盤(pán)機(jī)中斷 23 DOS Crtl-Break退出地址 F 保留 24 DOS致命錯(cuò)向量 10 屏幕I/O調(diào)用 25 DOS絕對(duì)磁盤(pán)讀 11 設(shè)備檢查調(diào)用 26 DOS絕對(duì)磁盤(pán)寫(xiě) 12 存儲(chǔ)器檢查調(diào)用 27 結(jié)束程序并駐留(建義用31h) 13 軟盤(pán)機(jī)I/O調(diào)用 28-3F DOS保留 14 RS-233I/O調(diào)用 40-7F 未用 15 盒帶機(jī)I/O調(diào)用 80-85 BASIC保留 16 鍵盤(pán)I/O調(diào)用 86-F0 BASIC解釋程序用 17 打印機(jī)I/O調(diào)用 F1-FF 未用 18 ROMBASIC入口 指令名詳解 call
8、 指令(過(guò)程調(diào)用)(控制指令長(zhǎng)轉(zhuǎn)移) 詳解: 段內(nèi)直接調(diào)用 段內(nèi)間接調(diào)用(寄存器) 段內(nèi)間接調(diào)用(存儲(chǔ)器) 段間直接調(diào)用 段間間接調(diào)用 指令名 jmp 指令(無(wú)條件轉(zhuǎn)移指令)(控制指令長(zhǎng)轉(zhuǎn)移) 詳解: 段內(nèi)直接跳轉(zhuǎn) 短段內(nèi)直接跳轉(zhuǎn) 段內(nèi)間接跳轉(zhuǎn)(寄存器) 段內(nèi)間接跳轉(zhuǎn)(存儲(chǔ)器) 段間直接跳轉(zhuǎn) 段間間接跳轉(zhuǎn) 指令名 ret 指令(過(guò)程返回)(控制指令長(zhǎng)轉(zhuǎn)移) 詳解: 段內(nèi)返回 段內(nèi)返回立即數(shù)加于sp 段間返回 段間返回立即數(shù)加于sp na/jnbe 指令(控制指令短轉(zhuǎn)移) 不小于或不等于時(shí)轉(zhuǎn)移 jae/jnb 指令 (控制指令短轉(zhuǎn)移) 大于或等于時(shí)轉(zhuǎn)移 jb/jnae 指令 (控制指令短轉(zhuǎn)移)
9、小于轉(zhuǎn)移 jbe/jna 指令 (控制指令短轉(zhuǎn)移) 小于或等于轉(zhuǎn)移 jg/jnle 指令(控制指令短轉(zhuǎn)移) 大于轉(zhuǎn)移 jge/jnl 指令 (控制指令短轉(zhuǎn)移) 大于或等于轉(zhuǎn)移 jl/jnge 指令 (控制指令短轉(zhuǎn)移) 小于轉(zhuǎn)移 jle/jng 指令 (控制指令短轉(zhuǎn)移) 小于或等于轉(zhuǎn)移 je/jz 指令 (控制指令短轉(zhuǎn)移) 等于轉(zhuǎn)移 jne/jnz 指令 (控制指令短轉(zhuǎn)移) 不等于轉(zhuǎn)移 jc 指令 (控制指令短轉(zhuǎn)移) 有進(jìn)位時(shí)轉(zhuǎn)移 jnc 指令 (控制指令短轉(zhuǎn)移) 列進(jìn)位時(shí)轉(zhuǎn)移 jno 指令 (控制指令短轉(zhuǎn)移) 不溢出時(shí)轉(zhuǎn)移 jnp/jpo 指令 (控制指令短轉(zhuǎn)移) 奇偶性為奇數(shù)時(shí)轉(zhuǎn)移 jns
10、指令 (控制指令短轉(zhuǎn)移) 符號(hào)位為"0"轉(zhuǎn)移 jo 指令 (控制指令短轉(zhuǎn)移) 溢出轉(zhuǎn)移 jp/jpe 指令 (控制指令短轉(zhuǎn)移) 奇偶性為偶數(shù)時(shí)轉(zhuǎn)移 js 指令 (控制指令短轉(zhuǎn)移) 符號(hào)位為"1"時(shí)轉(zhuǎn)移 loop 指令 (循環(huán)控制指令短轉(zhuǎn)移) cx不為0時(shí)循環(huán) loope/loopz 指令 (循環(huán)控制指令短轉(zhuǎn)移) cx 不為0且標(biāo)志 z1 時(shí)循環(huán) loopne/loopnz 指令 (循環(huán)控制指令短轉(zhuǎn)移) cx 不為0且標(biāo)志 z=0 時(shí)循環(huán) jcxz 指令 (循環(huán)控制指令短轉(zhuǎn)移) cx 為0時(shí)轉(zhuǎn)移 int 指令 (中斷指令) 中斷指令(后詳解) into 指
11、令 (中斷指令) 溢出中斷 iret 指令 (中斷指令) 中斷返回 指令名 shl 指令(邏輯左移) sal 指令(算術(shù)左移) shr 指令(邏輯右移) sar 指令(算術(shù)右移) 寄存器,1 rol 指令(循環(huán)左移) 寄存器,cl ror 指令(循環(huán)右移) 存儲(chǔ)器,1 rcl 指令(通過(guò)進(jìn)位的循環(huán)左移)存儲(chǔ)器,cl rcr 指令(通過(guò)進(jìn)位的循環(huán)右移)(邏輯運(yùn)算) not 指令(取反運(yùn)算)寄存器求反 (邏輯運(yùn)算)存儲(chǔ)器求反 and 指令(與運(yùn)算) (邏輯運(yùn)算) 寄存器 and 寄存器寄存器 寄存器 and 存儲(chǔ)器寄存器 存儲(chǔ)器 and 寄存器存儲(chǔ)器 立即數(shù) and 存儲(chǔ)器存儲(chǔ)器 立即數(shù) and
12、累加器累加器 or 指令(或運(yùn)算)(邏輯運(yùn)算) 寄存器 or 寄存器寄存器 寄存器 or 存儲(chǔ)器寄存器 存儲(chǔ)器 or 寄存器存儲(chǔ)器 立即數(shù) or 存儲(chǔ)器存儲(chǔ)器 立即數(shù) or 累加器累加器 test 指令(測(cè)試) (邏輯運(yùn)算) 寄存器 test 寄存器 寄存器 test 存儲(chǔ)器 寄存器 test 立即數(shù) 存儲(chǔ)器 test 立即數(shù) 累加器 test 立即數(shù) movs 指令(串傳送)(字符串操作指令) 單個(gè)傳送 重復(fù)傳送 cmps 指令(串比較) (字符串操作指令) 單個(gè)比較 重復(fù)比較 scas指令(串掃描)(字符串操作指令) 單個(gè)搜索 重復(fù)搜索 lods 指令(裝入串) (字符串操作指令) 單個(gè)裝
13、載 重復(fù)裝載 stos 指令(保存串) (字符串操作指令) 單個(gè)存儲(chǔ) 重復(fù)存儲(chǔ) mov 指令(傳送字或字節(jié))(數(shù)據(jù)傳送命令) 寄存器與寄存器間傳送 存儲(chǔ)器與寄存器間傳送 立即數(shù)傳送給存儲(chǔ)器 立即數(shù)傳送給寄存器 存儲(chǔ)器傳送給累加器 累加器傳送存儲(chǔ)器 寄存器傳送給段寄存器 存儲(chǔ)器傳送給段寄存器 段寄存器傳送給寄存器 段寄存器傳送給存儲(chǔ)存器 pop 指令(把字彈出堆棧) (數(shù)據(jù)傳送命令) push 指令(把字壓入堆棧) 存儲(chǔ)器 寄存器 段寄器 xchg 指令(交換字或字節(jié)) (數(shù)據(jù)傳送命令) 寄存器與寄存器交換 存儲(chǔ)器與寄存器交換 寄存器與累加器交換 in 指令(端口輸入) (數(shù)據(jù)傳送命令) 直接輸
14、入 間接輸入 out 指令(端口輸出) (數(shù)據(jù)傳送指令) 直接輸出 間接輸出 add 指令(加法)(算術(shù)指令) adc 指令(帶進(jìn)位加法) 寄存器寄存器寄存器 寄存器存儲(chǔ)器寄存器 存儲(chǔ)器寄存器存儲(chǔ)器 立即數(shù)存儲(chǔ)器存儲(chǔ)器 立即數(shù)累加器累加器 inc 指令(加1)(算術(shù)指令) 存儲(chǔ)器增量 寄存器增量 sub 指令(減法) (算術(shù)指令) sbb 指令(帶借位減法) 寄存器寄存器寄存器 寄存器存儲(chǔ)器寄存器 存儲(chǔ)器寄存器存儲(chǔ)器 立即數(shù)存儲(chǔ)器存儲(chǔ)器 立即數(shù)累加器累加器 dec 指令(減1)(算術(shù)指令) 存儲(chǔ)器減量 寄存器減量 nec 指令(求反,以0減之) 寄存器求補(bǔ) 存儲(chǔ)器求補(bǔ) cmp 指令(比較)(算
15、術(shù)指令) 寄存器與寄存器比較 寄存器與存儲(chǔ)器比較 寄存器與立即數(shù)比較 存儲(chǔ)器與立即數(shù)比較 累加器與立即數(shù)比較 mul 指令(無(wú)符號(hào)乘法) (算術(shù)指令) imul 指令(整數(shù)乘法) 與8位寄存器相乘 與16位寄存器相乘 與8位存儲(chǔ)單元相乘 與16位存儲(chǔ)單元相乘 div 指令(無(wú)符號(hào)除法)(算術(shù)指令) idiv 指令(整數(shù)除法) 被8位寄存器除 被16位寄存器除 被8位存儲(chǔ)單元除 被16位存儲(chǔ)單元除 Debug實(shí)戰(zhàn) 1.查看主板的生產(chǎn)日期,版本 D ffff:05 D fe00:0e 2.模擬Rest鍵功能 A :100 jmp ffff:0000 :105 g 3.快速格式化軟盤(pán) L 100 0
16、 0 * '插入一張己格式化軟盤(pán) W 100 0 0 * '放入一張欲格式化軟盤(pán) 注:* 分別為:720K e |1.2M id |1.44M 21 4.硬盤(pán)格式化兩種方法 (1)G=c800:05 (2) A 100 mov ax,0703 mov cx,0001 mov dx,0080 int 13 int 3 g 100 5.加速鍵盤(pán) A mov ax,0305 mov bx,0000 int 16 int 20 rcx 10 n w q 6.關(guān)閉顯示器(恢復(fù)時(shí),按任意鍵) A mov ax,1201 mov bl,36 int 10 mov ah,0 int 16 mo
17、v ax,1200 int 10 rcx 10 n crt- w q 7.硬盤(pán)DOS引導(dǎo)記錄的修復(fù) 在軟驅(qū)中放入一張己格式化軟盤(pán) debug -l 100 2 0 1 -w 100 0 50 1 把軟盤(pán)放入故障機(jī)軟驅(qū)中 debug -l 100 0 50 1 -w 100 2 0 1 -q 8.清coms中setup口令 debug -a mov bx,0038 mov cx,0000 mov ax,bx out 70,al inc cx cmp cx,0006 jnz 0106 int 20 -rcx :20 - -w -q 注:以上適合super與dtk機(jī),對(duì)于ast機(jī),因?yàn)樗目诹罘旁赾
18、oms的4ch-51h地址處,只要將:mov bx,0038改為: mov bx,004c即可 9.取消coms的密碼(將coms數(shù)據(jù)清為初始化) -o 70,10 -o 71,10 -g -q 10.將硬盤(pán)主引導(dǎo)記錄保存到文件中 debug -a mov ax,0201 mov bx,0200 mov cx,0001 mov dx,0080 mov int 13 int 3 -rcx :200 -nboot.dat -w -q 11.調(diào)用中斷實(shí)現(xiàn)重啟計(jì)算機(jī)(可以成文件) debug -a int 19 int 20 -rcx :2 - -w -q DEBUG主要命令 DEBUG是為匯編語(yǔ)言設(shè)
19、計(jì)的一種高度工具,它通過(guò)單步、設(shè)置斷點(diǎn)等方式為匯編語(yǔ)言程序員提供了非常有效的調(diào)試手段。 一、DEBUG程序的調(diào)用 在DOS的提示符下,可鍵入命令: C:DEBUG D:PATHFILENAME.EXTPARM1PARM2 其中,文件名是被調(diào)試文件的名字。如用戶鍵入文件,則DEBUG將指定的文件裝入存儲(chǔ)器中,用戶可對(duì)其進(jìn)行調(diào)試。如果未鍵入文件名,則用戶可以用當(dāng)前存儲(chǔ)器的內(nèi)容工作,或者用DEBUG命令N和L把需要的文件裝入存儲(chǔ)器后再進(jìn)行調(diào)試。命令中的D指定驅(qū)動(dòng)器PATH為路徑,PARM1和PARM2則為運(yùn)行被調(diào)試文件時(shí)所需要的命令參數(shù)。 在DEBUG程序調(diào)入后,將出現(xiàn)提示符,此時(shí)就可用DEBUG命
20、令來(lái)調(diào)試程序。 二、DEBUG的主要命令 1、顯示存儲(chǔ)單元的命令D(DUMP),格式為: _Daddress或_Drange 例如,按指定范圍顯示存儲(chǔ)單元內(nèi)容的方法為: -d100 120 18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G.8.G.G. 18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 .;.h.M PQVW. 7 18E4:0120 8B 其中0100至0120是DEBUG顯示的單元內(nèi)容,左邊用十六進(jìn)制表示每個(gè)字節(jié),右邊用ASCII字符表示每
21、個(gè)字節(jié),·表示不可顯示的字符。這里沒(méi)有指定段地址,D命令自動(dòng)顯示DS段的內(nèi)容。如果只指定首地址,則顯示從首地址開(kāi)始的80個(gè)字節(jié)的內(nèi)容。如果完全沒(méi)有指定地址,則顯示上一個(gè)D命令顯示的最后一個(gè)單元后的內(nèi)容。 2、修改存儲(chǔ)單元內(nèi)容的命令有兩種。 ·輸入命令E(ENTER),有兩種格式如下:第一種格式可以用給定的內(nèi)容表來(lái)替代指定范圍的存儲(chǔ)單元內(nèi)容。命令格式為: -E address list 例如,-E DS:100 F3'XYZ'8D 其中F3,'X','Y','Z'和各占一個(gè)字節(jié),該命令可以用這五個(gè)字節(jié)來(lái)替代存儲(chǔ)單
22、元DS:0100到0104的原先的內(nèi)容。 第二種格式則是采用逐個(gè)單元相繼修改的方法。命令格式為: -E address 例如,-E DS:100 則可能顯示為: 18E4:0100 89.- 如果需要把該單元的內(nèi)容修改為78,則用戶可以直接鍵入78,再按"空格"鍵可接著顯示下一個(gè)單元的內(nèi)容,如下: 18E4:0100 89.78 1B.- 這樣,用戶可以不斷修改相繼單元的內(nèi)容,直到用ENTER鍵結(jié)束該命令為止。 ·填寫(xiě)命令F(FILL),其格式為: -F range list 例如:-F 4BA:0100 5 F3'XYZ'8D 使04BA:010
23、00104單元包含指定的五個(gè)字節(jié)的內(nèi)容。如果list中的字節(jié)數(shù)超過(guò)指定的范圍,則忽略超過(guò)的項(xiàng);如果list的字節(jié)數(shù)小于指定的范圍,則重復(fù)使用list填入,直到填滿指定的所有單元為止。 3)檢查和修改寄存器內(nèi)容的命令R(register),它有三種格式如下: ·顯示CPU內(nèi)所有寄存器內(nèi)容和標(biāo)志位狀態(tài),其格式為: -R 例如,-r AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC 18
24、E4:0100 C70604023801 MOV WORD PTR 0204,0138 DS:0204=0000 ·顯示和修改某個(gè)寄存器內(nèi)容,其格式為: -R register name 例如,鍵入 -R AX 系統(tǒng)將響應(yīng)如下: AX F1F4 : 即AX寄存器的當(dāng)前內(nèi)容為F1F4,如不修改則按ENTER鍵,否則,可鍵入欲修改的內(nèi)容,如: -R bx BX 0369 :059F 則把BX寄存器的內(nèi)容修改為059F。 ·顯示和修改標(biāo)志位狀態(tài),命令格式為: -RF系統(tǒng)將響應(yīng),如: OV DN EI NG ZR AC PE CY- 此時(shí),如不修改其內(nèi)容可按ENTER鍵,否則,可鍵
25、入欲修改的內(nèi)容,如: OV DN EI NG ZR AC PE CY-PONZDINV 即可,可見(jiàn)鍵入的順序可以是任意的。 4)運(yùn)行命令G,其格式為: -G=address1address2address3 其中,地址1指定了運(yùn)行的起始地址,如不指定則從當(dāng)前的CS:IP開(kāi)始運(yùn)行。后面的地址均為斷點(diǎn)地址,當(dāng)指令執(zhí)行到斷點(diǎn)時(shí),就停止執(zhí)行并顯示當(dāng)前所有寄存器及標(biāo)志位的內(nèi)容,和下一條將要執(zhí)行的指令。 5)跟蹤命令T(Trace),有兩種格式: ·逐條指令跟蹤 -T =address 從指定地址起執(zhí)行一條指令后停下來(lái),顯示所有寄存器內(nèi)容及標(biāo)志位的值。如未指定地址則從當(dāng)前的CS:IP開(kāi)始執(zhí)行。
26、·多條指令跟蹤 -T =addressvalue 從指定地址起執(zhí)行n條指令后停下來(lái),n由value指定。 6)匯編命令A(yù)(Assemble),其格式為: -Aaddress 該命令允許鍵入?yún)R編語(yǔ)言語(yǔ)句,并能把它們匯編成機(jī)器代碼,相繼地存放在從指定地址開(kāi)始的存儲(chǔ)區(qū)中。必須注意:DEBUG把鍵入的數(shù)字均看成十六進(jìn)制數(shù),所以如要鍵入十進(jìn)制數(shù),則其后應(yīng)加以說(shuō)明,如100D。 7)反匯編命令U(Unassemble)有兩種格式。 ·從指定地址開(kāi)始,反匯編32個(gè)字節(jié),其格式為: -Uaddress 例如: -u100 18E4:0100 C70604023801 MOV WORD PT
27、R0204,0138 18E4:0106 C70606020002 MOV WORD PTR0206,0200 18E4:010C C70606020202 MOV WORD PTR0208,0202 18E4:0112 BBO4O2 MOV BX,0204 18E4:0115 E80200 CALL 011A 18E4:0118 CD20 INT 20 18E4:011A 50 PUSH AX 18E4:011B 51 PUSH CX 18E4:011C 56 PUSH SI 18E4:011D 57 PUSH DI 18E4:011E 8B37 MOV SI,BX 如果地址被省略,則從上一
28、個(gè)U命令的最后一條指令的下一個(gè)單元開(kāi)始顯示32個(gè)字節(jié)。 ·對(duì)指定范圍內(nèi)的存儲(chǔ)單元進(jìn)行反匯編,格式為: -Urange 例如: -u100 10c 18E4:0100 C70604023801 MOV WORD PTR0204,0138 18E4:0106 C70606020002 MOV WORD PTR0206,0200 18E4:010C C70606020202 MOV WORD PTR0208,0202 或 -u100 112 18E4:0100 C70604023801 MOV WORD PTR0204,0138 18E4:0106 C70606020002 MOV WOR
29、D PTR0206,0200 18E4:010C C70606020202 MOV WORD PTR0208,0202 可見(jiàn)這兩種格式是等效的。 8)命名命令N(Name),其格式為: -N filespecs filespecs 命令把兩個(gè)文件標(biāo)識(shí)符格式化在CS:5CH和CS:6CH的兩個(gè)文件控制塊中,以便在其后用L或W命令把文件裝入存盤(pán)。filespecs的格式可以是: d:path filename.ext 例如, -N myprog -L - 可把文件myprog裝入存儲(chǔ)器。 9)裝入命令(Load),有兩種功能。 ·把磁盤(pán)上指定扇區(qū)范圍的內(nèi)容裝入到存儲(chǔ)器從指定地址開(kāi)始的區(qū)域
30、中。其格式為: -Laddressdrive sector sector ·裝入指定文件,其格式為: -Laddress 此命令裝入已在CS:5CH中格式化了文件控制塊所指定的文件。如未指定地址,則裝入CS:0100開(kāi)始的存儲(chǔ)區(qū)中。 10)寫(xiě)命令W(Write),有兩種功能。 ·把數(shù)據(jù)寫(xiě)入磁盤(pán)的指定扇區(qū)。其格式為: -W address drive sector sector ·把數(shù)據(jù)寫(xiě)入指定的文件中。其格式為: -Waddress 此命令把指定的存儲(chǔ)區(qū)中的數(shù)據(jù)寫(xiě)入由CS:5CH處的文件控制塊所指定的文件中。如未指定地址則數(shù)據(jù)從CS:0100開(kāi)始。要寫(xiě)入文件的字節(jié)
31、數(shù)應(yīng)先放入BX和CX中。 11)退出DEBUG命令Q(Quit),其格式為: -Q 它退出DEBUG,返回DOS。本命令并無(wú)存盤(pán)功能,如需存盤(pán)應(yīng)先使用W命令。 問(wèn)題:初學(xué)者問(wèn)一個(gè)低級(jí)問(wèn)題,執(zhí)行debug-a后,如果有一行輸入錯(cuò)誤,如何更改這一行? 回答: 加入進(jìn)行如下輸入: D:PWIN95Desktop>debug -a 2129:0100movax,200 2129:0103movbx,200 2129:0106movcx,200 2129:0109 此時(shí),發(fā)現(xiàn)movbx,200一句錯(cuò)誤,應(yīng)為movbx,20,可以敲回車(chē)返回"-"狀態(tài),然后輸入: -a103 21
32、29:0103movbx,20 如果多或者少若干行,不必重新輸入,可以用M命令移動(dòng)后面的程序來(lái)去掉或者增加程序空間。 如何除錯(cuò)和匯編你的第一個(gè)PC x86匯編語(yǔ)言程序呢? 以下這些簡(jiǎn)單的解釋可以讓一個(gè)匯編語(yǔ)言新手使用DEBUG: 0)在使用時(shí),如何快速獲得debug的使用幫助呢。 1)讓我們開(kāi)始工作吧,例如:顯示BIOS的日期。 2)在你的電腦的COMMANG.COM文件里搜尋"IBM"這幾個(gè)字符。 3) 一位十六進(jìn)制數(shù)的運(yùn)算。 4) 檢查 x86寄存器內(nèi)容。 5)我們來(lái)編寫(xiě)我們的第一個(gè)用機(jī)械語(yǔ)言編寫(xiě)的程序-打印一個(gè)字符。 6) 我們現(xiàn)在用匯編語(yǔ)言指令來(lái)做和例5一樣的事情。
33、 7)現(xiàn)在,我們不但要編寫(xiě)一個(gè)匯編程序,而且我們還要把它存盤(pán)。 8) 現(xiàn)在,我們?cè)囈辉嚥榭匆粋€(gè)已經(jīng)編好的程序。 9)你可以用DEBUG的計(jì)算功能計(jì)算程序的長(zhǎng)度。 10)另一種顯示在屏幕上字符串的方法。 11)讓我們?cè)囈辉嚪磸?fù)輸出。 12)我們現(xiàn)在把兩個(gè)程序連接起來(lái)。 13) 讓我們逐步運(yùn)行這個(gè)剛剛修補(bǔ)的程序。 14)如果一開(kāi)始的命令不是跳轉(zhuǎn)命令,那么可能就要用這種方法了。 以下所有的命令都是可以運(yùn)行在WIN9x的MS-DOS方式下的。 進(jìn)入MS-DOS的方式有: 開(kāi)始程序MS-DOS方式 開(kāi)始運(yùn)行打開(kāi)COMMAND確定 或者你可以雙擊它: C:WindowsC 0)在使用時(shí),如何快速獲得deb
34、ug的使用幫助呢 以下PROMPT>表示目錄提示符:一般為:C:WINDOWSCOMMANDPROMPT> DEBUG /?<按回車(chē)press the enter key now> 怎樣?出錯(cuò)了吧。顯示如下 C:WINDOWS>DEBUG/? Runs Debug, a program testing and editing tool. DEBUG drive:pathfilename testfile-parameters drive:pathfilename Specifies the file you want to test. testfile-param
35、eters Specifies command-line information required by the file you want to test. After Debug starts, type ? to display a list of debugging commands. 因?yàn)殄e(cuò)了所以它給你顯示一些提示。留意到最后一句了嗎? 現(xiàn)在我們?cè)賮?lái)試一試: PROMPT> DEBUG<按回車(chē)> (注意, DEBUG程序的命令是在一條橫線"-"后出現(xiàn)的。) -?<在出現(xiàn)的橫線后面輸入?再回車(chē)> (下面的內(nèi)容是按字母順序排列的) (注意
36、:Note: Don't type the dash or comments - just the ?) 顯示如下,但是沒(méi)有中文的哦,中文是我加上去的。 匯編assemble A address 比較compare C range address 傾倒dump D range 進(jìn)入enter E address list 填充fill F range list 進(jìn)行g(shù)o G =address addresses 十六進(jìn)制hex H value1 value2 輸入input I port 裝載load L address drive firstsector number 移動(dòng)move
37、M range address 命名name N pathname arglist 輸出output O port byte 進(jìn)行proceed P =address number 離開(kāi)quit Q 紀(jì)錄register R register 搜尋search S range list 描述trace T =address value 反匯編unassemble U range 寫(xiě)write W address drive firstsector number 分配擴(kuò)展內(nèi)存allocate expanded memory XA #pages 釋放擴(kuò)展內(nèi)存deallocate expanded
38、memory XD handle map expanded memory pages XM Lpage Ppage handle display expanded memory status XS -q<按回車(chē)> (這是退出DEBUG回到DOS狀態(tài))This quits out of debug, returning to the DOS prompt) Tested examples below walk the user thru the following debug examples: 在下面的例子里讀者必須明白以下幾條DEBUG命令。 -D 顯示一定范圍內(nèi)存的內(nèi)容Disp
39、lay the contents of an area of memory -Q 退出DEBUG程序Quit the debug program -S 搜尋Search for whatever -H 十六進(jìn)制的運(yùn)算Hex arithmatic -R 顯示或者改變一個(gè)或者多個(gè)寄存器的內(nèi)容Display or change the contents of one or more registers -E 輸入數(shù)據(jù)進(jìn)入內(nèi)存,在一個(gè)詳細(xì)的地址里Enter data into memory, beginning at a specific location -G 運(yùn)行現(xiàn)在在內(nèi)存里的程序。Go run
40、the executable program in memory -U 反匯編,把我們不認(rèn)識(shí)的機(jī)械代碼變?yōu)槲覀兛梢哉J(rèn)識(shí)匯編語(yǔ)言符號(hào)Unassemble machine code into symbolic code -T 描述一條指令的用法。Trace the contents of one instruction -P 進(jìn)行或者執(zhí)行一個(gè)相關(guān)的指令Proceed, or execute a set of related instructions -A 編譯,把匯編命令變?yōu)闄C(jī)械代碼Assemble symbolic instructions into machine code -N 命名一個(gè)程序
41、Name a program -W 把一個(gè)已經(jīng)命名的程序?qū)戇M(jìn)磁盤(pán)Write the named program onto disk -L 把程序裝載進(jìn)內(nèi)存Load the named program back into memory 返回目錄 1)讓我們開(kāi)始工作吧,例如:顯示BIOS的日期 (以下PROMPT>表示目錄提示符:一般為:C:WINDOWSCOMMAND) PROMPT> DEBUG<按回車(chē)> -D FFFF:0006 L 8<按回車(chē)> (顯示 FFFFh, 偏移地址 6h, 長(zhǎng)度 8 bytes) 在作者的電腦上這里顯示為 "1/10
42、/96." 譯者的電腦顯示" FFFF:0000 37 2F-30 36 2F 30 30 00 7/06/00."相信作者的電腦里也是用這種格式顯示的。這里顯示出來(lái)的是使用者BIOS的日期,有興趣的話可以重新開(kāi)機(jī)看看,注意開(kāi)機(jī)時(shí)的顯示。 -Q<按回車(chē)> (退出DEBUG) 思考:當(dāng)只按DEBUG的時(shí)候,編輯的是什么?為什么可以找到BIOS的日期?(譯者這里也不是很清楚所以請(qǐng)大家知道的也留言給斑竹,改正。譯者認(rèn)為可能是內(nèi)存的真實(shí)物理地址。) 返回目錄 2)在你的電腦的COMMANG.COM文件里搜尋"IBM"這幾個(gè)字符 下面的&qu
43、ot;C:Win95"是根據(jù)每不電腦不同的。像譯者的電腦里就是"C:WINDOWS" PROMPT> DEBUG C:Win95C<按回車(chē)> -S 0 L FFFF "IBM"<按回車(chē)>(從0開(kāi)始搜尋"IBM",搜尋FFFFh多個(gè)單元格) -Q<按回車(chē)> (退出DEBUG) 以下是譯者做的: C:WINDOWS>DEBUG C:WINDOWSCOMMAND.COM -S 0 L FFFF "IBM" -S 0 L FFFF "COMMAND&quo
44、t; 12A7:008D 12A7:04F7 12A7:3870 12A7:38BE 12A7:38DD -S 0 L FFFF "PATH" 12A7:38AD 12A7:CCB7 12A7:CF55 -S 0 L FFFF "COMSPEC" 12A7:38D4 12A7:3A4D 12A7:CCC4 -Q C:WINDOWS> (注意:搜尋是要區(qū)分大小寫(xiě)的) (你可以看到上面是沒(méi)有找到"IBM"的, 可以試一試"PATH" , "COMSPEC" , "COMMAND&qu
45、ot;) (注意: 這種方法用在查找加密資料和已被刪除的資料等方面時(shí)是十分有用的) 返回目錄 3) 一位十六進(jìn)制數(shù)的運(yùn)算: PROMPT> DEBUG<按回車(chē)> -H 9 1<按回車(chē)> (加減兩個(gè)十六進(jìn)制的數(shù), 9h+1h=Ah & 9h-1h=8h) 結(jié)果是顯示: 000A 0008 -Q<按回車(chē)> (退出DEBUG) C:WINDOWS>debug -h 9 1 000A 0008 -q C:WINDOWS> 返回目錄 4) 檢查x86寄存器內(nèi)容 PROMPT> DEBUG<按回車(chē)> -R<按回車(chē)>
46、 (顯示x86寄存器內(nèi)容) -Q<按回車(chē)> (退出DEBUG) C:WINDOWS>debug -R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=127C ES=127C SS=127C CS=127C IP=0100 NV UP EI PL NZ NA PO NC 127C:0100 043C ADD AL,3C -Q 下面是對(duì)寄存器的簡(jiǎn)單介紹: 數(shù)據(jù)存儲(chǔ)器 在本類(lèi)中,一般講的AH就是AX的前八位,AL就是AX的后八位,后面的以此類(lèi)推。 AX Accumulator;作為累加器,所以它
47、是算術(shù)運(yùn)算的主要寄存器。另外所有的I/O指令都使用這一寄存器與外部設(shè)備傳送信息。 BX Base register;可以作為通用寄存器使用,此外在計(jì)算存儲(chǔ)器地址時(shí),它經(jīng)常用作基地址寄存器。 CX Counting register;可以作為通用寄存器使用,此外在循環(huán)(LOOP)和串處理指令中作隱含的計(jì)數(shù)器。 DX Data register;可以作為通用寄存器使用,一般在作雙字長(zhǎng)運(yùn)算時(shí),把DX和AX組合在一起存放一個(gè)雙字長(zhǎng)數(shù),DX用來(lái)存放高位字。此外,對(duì)某些I/O操作,DX可用來(lái)存放I/O的端口地址。 指針及變址寄存器 BP Base pointers register ;機(jī)制指針寄存器 SI
48、 Source index register ;堆棧指針寄存器 DI Destiny index register ;目的變址寄存器 SP Battery pointer register ;堆棧指針寄存器 段寄存器 CS Code segment register ;代碼段寄存器,存放正在運(yùn)行的程序指令 DS Data segment register ;數(shù)據(jù)段寄存器,存放當(dāng)前運(yùn)行程序所用的數(shù)據(jù) SS Battery segment register ;堆棧段寄存器,定義了堆棧所在區(qū)域 ES Extra segment register ;附加段寄存器,存放附加的數(shù)據(jù),是一個(gè)輔助性的數(shù)據(jù)區(qū),
49、 控制寄存器 IP Next instruction pointer register;指令指針寄存器,它用來(lái)存放代碼段中的偏移地址,在程序運(yùn)行的過(guò)程中,它始終指向下一條指令的首地址,它與CS寄存器聯(lián)用確定下一條指令的物理地址 F Flag register;標(biāo)志寄存器 "NV UP EI PL NZ NA PO NC"就是了,也有人稱(chēng)之為PSW Program Status Wold程序狀態(tài)寄存器 (這里有一點(diǎn)必須講明白的現(xiàn)在在,其實(shí)從奔騰開(kāi)始這些寄存器(除了所有段寄存器,標(biāo)志寄存器 )都是32位的。并且加多了兩個(gè)16位段寄存器FS,GS。dos下面看到這些寄存器是16位
50、的。要看32位寄存器可以使用soft-ice。對(duì)于FS,GS的作用我也不是很清楚,希望有高手指點(diǎn),謝謝。) 返回目錄 5)我們來(lái)編寫(xiě)我們的第一個(gè)用機(jī)械語(yǔ)言編寫(xiě)的程序-打印一個(gè)字符 (這里用機(jī)械語(yǔ)言的主要原因是考慮到有一些用戶不懂匯編命令,現(xiàn)在就要讓他有一個(gè)認(rèn)識(shí)計(jì)算機(jī)程序?qū)嵸|(zhì)是一些數(shù)字) PROMPT> DEBUG<按回車(chē)> -E 100<按回車(chē)> (在偏移地址為100的地方輸入機(jī)械指令程序) B4<按空格>02<按空格> (在AX寄存器的前八位存入02) B2<按空格>41<按空格> (在DX寄存器的后八位存入41h
51、,41h就是大寫(xiě)A的ASCII碼,身邊有ASCII表的朋友可以對(duì)著表改改數(shù)字試一試) CD<按空格>21<按空格> (當(dāng)AH=02時(shí)這是DOS顯示輸出的中斷號(hào)) CD<按空格>20<按回車(chē)> (退出DOS) -G<按回車(chē)> (程序運(yùn)行,并在屏幕上顯示出"A") 程序運(yùn)行完以后你將看到"Program terminated normally"(程序正常結(jié)束了). -U 100<按回車(chē)> (我們把它反匯編,就是把機(jī)械命令變?yōu)閰R編語(yǔ)言指令) 107F:0100 B402 MOV AH,02 :0102 B2 MOV DL,41
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療行業(yè)中的信任與合作文化建設(shè)
- 迎接職場(chǎng)挑戰(zhàn)的準(zhǔn)備策略計(jì)劃
- 行政管理經(jīng)濟(jì)法試題及答案解析指南
- 醫(yī)療衛(wèi)生行業(yè)合同管理法律要點(diǎn)解析
- 2025年自考行政管理備選考題試題及答案
- 深入理解幼兒園教研學(xué)期工作計(jì)劃的重要性
- 完善非營(yíng)利組織安全工作計(jì)劃
- 護(hù)理學(xué)基礎(chǔ)知識(shí)回顧與試題及答案
- 門(mén)診部患者流量管理策略計(jì)劃
- 醫(yī)療資金監(jiān)管中的區(qū)塊鏈反洗錢(qián)策略探討
- 教學(xué)課件《斷裂力學(xué)》
- 語(yǔ)文五年級(jí) 【知識(shí)精講】7.閱讀(2)文言文閱讀
- 慢阻肺的管理課件
- 電工基本知識(shí)培訓(xùn)資料課件
- 北師大版《相遇問(wèn)題》公開(kāi)課課件
- QC-R 596-2017高速鐵路板式無(wú)砟軌道自密實(shí)混凝土高清-無(wú)水印
- 鄰補(bǔ)角、對(duì)頂角、同位角、內(nèi)錯(cuò)角、同旁內(nèi)角經(jīng)典習(xí)題-一對(duì)一專(zhuān)用
- HP系列培訓(xùn)手冊(cè)
- 畢業(yè)論文-原油電脫水方法與機(jī)理的研究
- 陜西省2022年普通高中學(xué)業(yè)水平考試(真題)
- 事故池管理的有關(guān)規(guī)定
評(píng)論
0/150
提交評(píng)論