如何在內(nèi)存中編輯和執(zhí)行匯編程序
單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,PART A-3,Examining Computer Memory,如何在內(nèi)存中編輯和執(zhí)行匯編程序,Executing Instructions,and,一、,Using The DEBUG Program,1Starting DEBUG,.Some examples,CDEBUG CCCC.EXE,-,CDEBUG B:CCCC,EXE,-,CDEBUG,-N CCCC,EXE,-L,-,The Initial Value After Starting DEBUG,DEBUG,程序起動后,把各寄存器和標(biāo)志位置成以下狀態(tài):,Segment Register(CS、DS、ES,和,SS)=,自由存貯空間的底部,,即,DEBUG,程序結(jié)束以后的第一個段。,IP=0100H。,SP=,段尾或裝載程序臨時區(qū)底部(兩者中取較低的一個),AX、BX、CX、DX、BP、SI、DI=0,若調(diào)入,DEBUG,時指定了文件名,則,BX(,高位)+,CX=,文件長度的字節(jié)數(shù)。,標(biāo)志位置都為清除狀態(tài)。,2.,An Assembly language Example,Displaying a Character 3 on Screen:,Keying in Program Instructions and Data:,C:DEBUG,(,進(jìn)入,DEBUG),-A 100,(,進(jìn)入?yún)R編狀態(tài)),XXXX:0100 MOV DL,33,(,數(shù)字3的,ASCII,碼),XXXX:0102 MOV AH,2,XXXX:0104 INT 21,(,調(diào)用2號功能在屏上顯示,DL,中字符),XXXX:0106 INT 20,(,正常結(jié)束中斷),XXXX:0108,(,回車,結(jié)束匯編狀態(tài)),-,G,(,運(yùn)行當(dāng)前匯編程序),3,(,Display),Program terminated normally,UnAssemble,-U 100,108,XXXX:0100 B233,MOV DL,33,XXXX:0102 B402,MOV AH,2,XXXX:0104 CD21,INT 21,XXXX:0106 CD20,INT 20,XXXX:0108,Saving a Program from within DEBUG,-RBX,BX 0000,:,-RCX,CX 0000,:8,(,程序大?。?-,N W3.COM,(,命名),-,W,(,存盤),Exit DEBUG,-Q,C,_,二、,DEBUG Commands,Rules of DEBUG Commands:,所有命令均為一單字母,其后跟一個或多個參數(shù)。,命令和參數(shù)可大寫、小寫或大、小寫混合方式輸入。,命令與參數(shù)間可用空格或逗號隔開。,修改軟件時注意,,DEBUG,不能改寫,EXE,類型的文件。所以,,如果需要改寫,就必須事先將,EXE,文件的后綴改名,待修,改后再恢復(fù)原來名字。,命令參數(shù)中都以16進(jìn)制數(shù)表示。,參數(shù)中,字符的引號可用雙引號,也可用單引號。,1,A,ssemble,Function:,Assemble symbolic instructions into machine code.,Format:,A Address,The parameter“Address”:,用字母表示的段寄存器標(biāo)志加上偏移值,例如“,A CS,:,100,”,一個段地址,加上一個偏移值,例如“,A 4AB,:,100,”。,僅有一個偏移值,例如“,A 100,”。,For Example:,在屏上顯示“梅花”,C,DEBUG,-A,08FE0100 MOV AH,02,08FE0102 MOV DL,05,08FE0104 INT 21,(,調(diào)用2號功能顯示,DL,中字符),08,FE0106 INT 20,08FE0108,-RCX,CX 0000,:8,-N A.COM,-W,-Q,Execution:,C A.COM,2,U,nassemble,Function:,Unassemble,machine code into symbolic code.,Format:,U,地址,Unassemble,begins at specific address.,U,范圍,Unassemble,within specific area.,For Example 1:,CDEBUG KEY,EXE,-U,(,隱含從當(dāng)前指針開始),0,C1C0000 50 PUSH AX,.,-U 0000 L13,(,從0000開始13個單元),-,U 0000 DF3,(,從0000,DF3),For Example 2:,CDEBUG WS.COM 11.TXT,(,反匯編存盤),-,U 100 FFFF,.,-Q,(,紅框內(nèi)的字符不可見),C_,3,D,ump,Function:,Display the contents of area of memory.,Format:,D ,地址,-,D ,范圍,For Example:,-D 0000 L1F(,顯示從0000開始的1,F,字節(jié)內(nèi)容),-,D 40:13 (,顯示基本內(nèi)存大?。?-,D FFFF:5,(Checking ROM BIOS Date),FFFF:0000 CD 19 E0 00 F0,30 36 2F-31 36 2F 39 38,00 FC BD .,.,06/16/98,.,4,E,nter,Function:,Enter data into memory,beginning at a specific location.,Format:,E,地址 內(nèi)容表,E,地址,For Example 1:,-E DS:100 F2,“,XYZ,”,8D,(,代替指定地址開始單元內(nèi)容,),For Example 2:,-E DS100,09BC0100 00.30 00.31 00.32 00.,(,回車結(jié)束),Note:,For Example 2,格式有三種操作方式:,按空格鍵 上一個替換完成,并顯示下一個單元的內(nèi)容。如要修改,則鍵入新的字節(jié),如不修改,則只按空格鍵。,輸入一個減號(“”)顯示前一單元的內(nèi)容,可進(jìn)行修改。連續(xù)使用“”號、可不斷地反方向修改。,按回車鍵 結(jié)束,E,命令。,5,R,egister,Function:,Display and modification the contents of one or,more registers.,Format:,R,命令有三種功能格式:,-,R,顯示所有寄存器及標(biāo)志位內(nèi)容。,-,R,寄存器名,顯示和修改一個指定的寄存器的內(nèi)容。,For Example:,-RAX,AX F1F4,:3B,此時,可選擇以下操作之一:,a,若不改變其內(nèi)容,則直接按回車鍵。,b,若要改變內(nèi)容,可用14個16進(jìn)制值代替原值,再回車。,-,RF,顯示和修改標(biāo)志位態(tài)。,For Example:,-,RF,NV UP EI PL NZ NA PO NC,-,此時,可采用以下兩種操作之一:,a,若不需要修改,直接按回車鍵。,b,若有一個或多個標(biāo)志要修改,則可輸入此標(biāo)志的相反值。,輸入標(biāo)志的次序是無關(guān)的,輸入各標(biāo)志之間可以沒有空格,,輸入完畢,按回車鍵。即,-,PO,NZ,DI,NV,PWS,中的標(biāo)志符號表示,置 1:,置 0:,狀態(tài),:,-,RF,NV UP EI PL ZR NA PE NC,-,OF,溢出,DF,方向,IF,中斷,SF,符號,ZF,零,AF,輔助,PF,奇偶,CF,進(jìn)位,OV,NV,有無,DP,UP,減增,EI,DI,開關(guān),NG,PL,負(fù)正,ZR,NZ,零非,AC,NA,有無,PE,PO,奇偶,CY,NC,有無,6,G,o,Function:,Run the executable program In memory.,Format:,G ,始地址斷點(diǎn),CDEBUG B:KGY.EXE,G=0 23,(,在地址,CS:0023,中斷),7,T,race,Function:,Trace the execution of one instruction.,Format:,T,地址,執(zhí)行,CS:IP,或指定地址處的指令。,T,地址,n,執(zhí)行指定地址后,n,條指令。,For Example:,-T,03,(,執(zhí)行,CS:IP,后3條指令),-,T=CS:0F3B,(,執(zhí)行地址,CS:0F3B,處指令),8,S,earch,Function,:,Search a address of specify content.,Format,:,S,地址范圍,內(nèi)容表,For Example 1,:,-S 100 120 6,(在,DS100,120,的范圍內(nèi)查找,06H,地址),08FF0101,(,查得,08FF0101,內(nèi)存單元的內(nèi)容為,06H,),For Example 2,:,-S CS000 100 41“XYZ”,28,-17,9,C,ompare,Function,:,Compare the content between two memory area.,Format,:,-C,源地址范圍,目的地址,Display Format,:,源地址,源內(nèi)容,目標(biāo)內(nèi)容,目標(biāo)地址,For Example 1,:,-C CS100 L20 200,08FF0105 00 06 08FF0205,Note:,以,CS100,為內(nèi)存首地址的,32,個(,20H,),字節(jié)與以,CS200,為首地址的,32,個字節(jié)進(jìn)行比較。其中的,CS105,內(nèi)容“,00”,與,CS205,內(nèi)容“,06”,不同。,28,-18,10,F,ill,Function,:,Fill the content to specify memory unit.,Format,:,F ,地址范圍,內(nèi)容表,For Example,:,-,F 04BA100 L5 F3,“,XYZ,”,8D,(,用指定的,5,個字節(jié)填入,04BA:100,開始的,5,個內(nèi)存單元),Note:,若內(nèi)容表中的字節(jié)數(shù)少于地址范圍,則內(nèi)容表被重復(fù)使用,直到指定范圍被填滿為止;若內(nèi)容表的字節(jié)數(shù)大于地,址范圍,則多余的內(nèi)容被忽略。,28,-19,11,M,ove,Function:,Move the content from specify memory area to another.,Format:,M,源地址范圍 目的地址,For Example 1:,-M CS100 110 500,(,將,CS100110,共17個字節(jié)內(nèi)容搬到,DS500,開始的內(nèi)存區(qū)),For Example 2:,-M CS100 110 CS105,-M CS100 110 CS0F5,目的地址與源地址可以重迭,,但重迭部分原來內(nèi)容被覆蓋。,例,在程序中插入一段指令:,12.,H,ex arithmetic,Function,:,計算兩個,16,進(jìn)制數(shù)的和與差。,Format,:,H,值,值,For Example,:,-H 0F 8,0017 0007,(,表示,0FH+8H=0017H,,,0FH-08H=0007H,),13,N,ame,Function,:,Name a program.,Format,:,N,文件標(biāo)識符,文件標(biāo)識符,For Example,:,A,DEBUG,-N,b,:,myprog,-L,28,-21,14,L,oad,Function,:,Load a program to memory.,Format,:,L,起址,驅(qū)動器號,扇區(qū)號,扇區(qū)數(shù),L,地址,(,裝入文件到指定地址,省地址則為,CS:0100),For Example 1,:,-L CS:1200 0 5 3,(“,0”,為,A,盤),For Example 2,:,-N B,:,XEARCH.EXE ,;,設(shè)置文件標(biāo)識符,-L ,;,讀