您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 78Debug命令使用说明
1/43微机原理及应用-Debug命令帮助2/43nDOS程序结构(补充,不作要求)3/431.EXE程序n可执行程序(executalbleprogram)以.exe为后缀,由多个段组成;长度可大于64KB;(磁盘上的)EXE文件和内存中的.exe文件不大一样,它包括:n文件头:控制信息、重定位信息;n装入模块:程序本身。n程序由系统(命令解释器command.com或者debug.exe)装载进内存后,其段分布如图所示,初始化段寄存器内容如下:1)DS、ES指向PSP(ProgramSegmentPrefix-程序段前缀,包含一些系统信息和命令行参数)段地址。程序中须重新设置,使其指向数据段(和附加段)。2)CS:IP和SS:SP由连接程序确定;如果不指定堆栈段,则SS=PSP的段地址,SP=100H,堆栈段占用PSP的部分区域,有时也能正常工作。为安全,应设置堆栈段。系统使用PSP代码段数据段堆栈段剩余内存SSSPCSIP00000HDS=ES4/432.COM程序n代码段、数据段以及堆栈段(附加段)合并成一个段,长度不超过64KB。n磁盘上的COM文件是内存的完全映象,不含附加信息。ncom程序装载进内存后,1)所有段地址都指向PSP的段地址;2)执行起点:CS:0100处。3)SP自动设为0FFFEH(64K的最后一个字单元。且将0FFFEH和0FFFFH单元设为0。CS=DS=ES=SSSP=FFFEHIP=0100H系统使用PSP代码数据0000剩余内存00000H64KB5/43nDOS系统功能调用6/43DOS和BIOS调用nDOS(DiskOperationSystem)和BIOS(BasicInputandOutputSystem)是为用户提供的两组系统服务程序。nBIOS是IBMPC/XT的基本I/O系统,负责管理系统的测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序。由于这些程序固化在ROM中,用户可以直接调用。nDOS是IBMPC/XT的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供调用的服务子程序,完成设备的管理和磁盘文件的管理。n用户控制PC机硬件的方法:高级语言à调用DOS程序à使用BIOS程序à直接访问硬件7/43DOS系统功能调用nDOS和ROM-BIOS都以中断服务程序的形式向用户提供大量子程序,供用户编程时调用。“系统功能调用”一般是指调用DOS的INT21H提供的子程序,调用BIOS提供的中断子程序一般称为“BIOS调用”。n系统功能调用格式:n在AH中设置调用的功能号;n在指定的寄存器中设置入口参数;n执行INT21H指令,调用功能子程序;n如果需要,分析出口参数。8/431、单个字符输出nAH=02;入口参数:DL=字符的ASCII码MOVAH,2MOVDL,’A’INT21H;可输出控制字符2.字符串输出nAH=09;入口参数:DS:DX=字符串首地址字符串必须以$(24H)结尾stringdb‘Hello!’,0dh,0ah,‘$’movah,9movdx,offsetstringint21h9/433.单个字符输入nAH=1;入口参数:无;出口参数:AL=字符ASCII码(系统一直等待,直到有键按下)4.字符串的输入nAH=0AH;入口参数:DS:DX=缓冲区首地址“回车”表示输入结束;缓冲区第一个字节添入可能输入的最多字符数(含回车),第二个字节将存放实际输入的字符数(不含回车),从第三个字节开始存放输入的字符。bufdb100movds,dxdb0movdx,offsetbufdb101dup(0)movah,0ah…int21hmovdx,segbuf…10/435.返回DOSnAH=4CH,入口参数:无;出口参数:无MOVAH,4CHINT21H6.利用INT20H功能返回DOSn需要将主程序定义为DOS系统的子程序(在完整段定义部分已经说明)MYPRPROCFARPUSHDS;程序初始化时DS执行程序段前缀PSPSUBAX,AX;其中的第一条指令就是INT20hPUSHAX;这三条指令把PSP的地址压入堆栈…….RET;返回到PSP第一条指令MYPRENDP11/43nDEBUG命令解释12/43进入Debug的方法:n桌面快捷栏à开始à运行(R)à输入cmd.exeà出现一黑屏窗口à在命令提示符后输入debug。在提示符–处可输入后面介绍的命令13/43Debug:A(汇编)n该命令从汇编语言语句创建可执行的机器码。na[address]n参数address指定键入汇编语言指令的位置。如果不指定地址,a将在它上次停止处开始汇编n输入指令,最后以Ctrl+C结束输入n支持db、dw伪指令db1,2,3,4,THISISANEXAMPLEdw1000,2000,3000,BACH14/43Debug:C(比较)n比较内存的两个部分。crangeaddressn参数range指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。1.[segr:]offset1offset2例如cs:10010F2.[segr:]offset1llengthcs:100l10nAddress指定要比较的第二个内存区域的起始地址15/43n如果range和address内存区域相同,Debug将不显示任何内容而直接返回到Debug提示符。如果有差异,Debug将按如下格式显示:address1byte1byte2addess2n举例c100,10f300对100h到10Fh的内存数据块与300h到30Fh的内存数据块进行比较197F:01004DE4197F:0300197F:01016799197F:0301197F:0102A327197F:0302197F:010335F3197F:0303。。。。16/43DEBUG:D(显示内存内容)显示内存单元的内容d[range]n参数range指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如果不指定range,Debug程序将从以前d命令中所指定的地址范围的末尾开始显示128个字节的内容,范围仅限于同一段。17/43十六进制部分,16字节/行ASCII码部分连字符每个非打印字符18/43ndcs:10010F显示范围从CS段的100h到10Fh中所有字节的内容08D0:01007061676573206861-7665206265656E20pageshavebeennd[ds:]10010F显示范围从DS段的100h到10Fh中所有字节的内容08B7:01004865726520617265-207477656E74792DHerearetwenty-nd100l20从DS:100开始显示20h个字节的内容08B7:01004865726520617265-207477656E74792DHerearetwenty-08B7:011073697820656E676C-696768206C657474sixenglighlett19/43DEBUG–E(键入)n将数据输入到内存中指定的地址。可以按十六进制或ASCII格式键入数据。以前存储在指定位置的任何数据全部丢失。eaddress[list]参数address指定输入数据的第一个内存位置。list指定要输入到内存的连续字节中的数据。20/43List为空则进入一个字节一个字节输入过程08B7:002CDD.DD.ffEE.原内容.新输入输入可以是:SPACEBAR(空格键)--进入下一个字节键入新值--更改该字节中的值(0~F否则不回显)HYPHEN键(-)--返回到前一个字节ENTER键--停止执行e命令21/43n使用list参数如果指定list参数的值,随后的e命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。List值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。22/43Debug:F(填充)n使用指定的值填充指定内存区域中的地址。可以指定十六进制或ASCII格式表示的数据。任何以前存储在指定位置的数据将会丢失。-frangelistn如果range包含的字节数比list中的数值大,Debug将在list中反复指派值,直到range中的所有字节全部填充。如果list包含的数值多于range中的字节数,Debug将忽略list中额外的值。23/43n-f2cl4048657265n-d2cn从ds:2c之后40H的单元重复填充48657265这四个字节24/43Debug:G(转向)n运行当前在内存中的程序。g[=address][breakpoints]参数=address指定当前在内存中要开始执行的程序地址。如果不指定address,将从CS:IP寄存器中的当前地址开始执行程序。Breakpoints指定可以设置为g命令的部分的1到10个临时断点。断点为指令地址25/43Debug:H(十六进制)n对指定的两个参数执行十六进制运算。hvalue1value2参数value1/2代表从0到FFFFh范围内的任何十六进制数字。nDebug首先将指定的两个参数相加,然后第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。26/43Debug:I(端口输入)n从指定的端口读取并显示一个字节值。iport参数port按地址指定输入端口。地址可以是16位的值。27/43Debug:L(从磁盘加载)n将某个文件或特定磁盘扇区的内容加载到内存。nl[address],文件名由n命令预先指定要从磁盘文件加载BX:CX寄存器中指定的字节数内容到address。如果是.exe文件,Debug将文件重新定位到.exe文件的标题中指定的加载地址,因此忽略address参数;如果不带参数,则缺省使用地址CS:100。Debug同时将BX和CX寄存器设置为加载的字节数nladdressdrivestartnumber略过文件系统并直接加载特定的扇区ndrive指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0=A,1=B,2=C等。nStart指定要加载其内容的第一个扇区的十六进制数。nNumber指定要加载其内容的连续扇区的十六进制数28/43Debug:M(移动)n将一个内存块中的内容复制到另一个内存块中。mrangeaddressn参数range指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。Address指定要将range内容复制到该位置的起始地址。29/43Debug:N(名称)nn[drive:][path]filename指定Debugl(加载)或w(写入)命令的可执行文件的名称nnfile-parameters程序装载后,要指定程序参数,如同命令行输入参数debugprog.com-nparam1param2-gprogparam1param2Debug-nprog.com-l-nparam1param2-g30/43Debug:O(端口输出)n将字节值发送到输出端口。oportbyte-value参数port通过地址指定输出端口。端口地址可以是16位值。byte-value指定要指向port的字节值。31/43Debug:P(执行)np[=address][number]n和g非常类似,只是运行中止由number(执行指令数)控制,除此之外,如果address处是“循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止”也可将控制权交还debug。n举例:假定正在测试的程序在地址CS:143F处包含一个call指令。要运行call目标位置的子程序然后将控制返回到Debug,请键入以下命令:p=143f32/43Debug:Q(退出debug)n停止Debug会话,不保存当前测试的文件。键入q以后,控制返回到DOS的命令提示符。q该命令不带参数。33/43Debug:R(寄存器)n显示或
本文标题:78Debug命令使用说明
链接地址:https://www.777doc.com/doc-5352766 .html