Debug使用说明
- 格式:doc
- 大小:61.00 KB
- 文档页数:7
实验一 DEBUG 的使用实验目的:1.学习使用.学习使用DEBUG DEBUG DEBUG程序的各种命令。
程序的各种命令。
程序的各种命令。
2.掌握.掌握8088/868088/868088/86指令系统指令系统指令系统---------算数指令。
算数指令。
算数指令。
3.掌握用.掌握用DEBUG DEBUG DEBUG调试自编程序的方法。
调试自编程序的方法。
调试自编程序的方法。
4.掌握.掌握8088/8086 CPU 8088/8086 CPU 寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作.掌握汇编语言伪操作:BYTE PTR,WORD PTR :BYTE PTR,WORD PTR。
内容及步骤:一、一、DEBUG DEBUG 命令使用命令使用: :1、 敲 DEBUG 进入进入进入 DEBUG DEBUG 环境,显示提示符环境,显示提示符环境,显示提示符 '_ ' '_ '。
2、 用命令用命令 D100 10F D100 10F 观察内存中的观察内存中的161616进制码及屏幕右边的进制码及屏幕右边的进制码及屏幕右边的ASCII ASCII ASCII字符。
字符。
字符。
3、 用命令用命令 E100 30 31 32 E100 30 31 32 ………… 3F 3F 将30H 30H~~3FH 3FH写入地址为写入地址为写入地址为100H 100H 100H开始的内存单元中,开始的内存单元中,再用再用D D 命令观察结果,看键入的命令观察结果,看键入的161616进制数是什么字符的进制数是什么字符的进制数是什么字符的ASCII ASCII ASCII码码?4、 用命令用命令 F100 10F 'A' F100 10F 'A' 将'A''A'的的ASCII ASCII码填入内存,用码填入内存,用码填入内存,用D D 命令查看结果。
DEBUG程序的使用一、在DOS的提示符下,可如下键入Debug启动调试程序:DEBUG [路径\文件名] [参数1] [参数2]Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。
命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。
在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。
运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。
运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX 包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。
运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。
此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。
DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。
二、DEBUG命令的格式Debug的命令都是一个字母,后跟一个或多个参数:字母[参数]命令的使用中注意:①字母不分大小写;②只使用16进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
1.打开Windows命令窗口在Windows 95/98的环境中,打开命令窗口的步骤为:点击“开始”→“运行”,输入“command”命令;在WindowsXP及WIN7的环境中,打开命令窗口的步骤为:点击“开始”→“运行”,输入“cmd”命令;2.启动DEBUG在命令窗口中启动DEBUG,启动命令一般为:DEBUG [文件名] [参数表]。
其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。
被调试的文件可以是系统中的任何文件,但通常它们的后缀为.EXE或.COM。
当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。
DEBUG中所有命令及其含义如DEBUG各命令功能说明表所示。
关于使用命令的几点说明:在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行命令是单个字母,命令和参数的大小写可混合输入可用F1、F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令当命令出现语法错误时,将在出错位置显示“^ Error”可用Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用Ctrl+S或Ctrl+Num Lock来暂停屏幕显示(当连续不断地显示信息时)以下通过实现十九个示例来熟悉DEBUG的命令集和基本的汇编指令。
R命令的使用R命令作用:观看和修改寄存器的值。
在提示符“-”下输入以下命令:R。
DEBUG将会显示出当前所有寄存器和标志位的状态。
接下来再输入命令RCX。
在提示符“:”后输入100。
该命令的作用是将寄存器CX的值设置为100(注意:DEBUG使用的是十六进制,这里的100相当于十进制的256。
)最后再执行R命令,观看修改后的寄存器值。
H命令的使用H命令作用:计算两个十六进制数的和与差。
在提示符“-”下输入以下命令:H 10 1。
观看命令执行结果。
运行结果的前一个数是计算出来的和,后一个数是计算出来的差。
2.3 DEBUG使用方法简介:DEBUG是DOS命令,必须在DOS环境下运行。
由于目前都使用WINDOWS操作系统,应设法进入实地址模式的DOS环境,才能可靠地运行DEBUG。
一般可用DOS启动盘启动系统,或在WINDOWS-98系统退出时选择“切换到MSDOS”操作,进入到实地址模式的DOS环境。
由于DEBUG是DOS外部命令,因此,须把DEBUG.EXE文件拷贝到当前目录下来运行DEBUG,DOS启动盘中应事先拷贝有DEBUG.EXE文件,在WINDOWS98系统中,“C:\WINDOWS\COMMAND\”目录下有DEBUG.EXE文件。
后面的操作,假设DEBUG.EXE文件都已事先拷贝到当前目录下。
在WINDOWS操作系统中(包括WINDOWS98、2K、XP等),系统提供了V86模式的“命令提示符”窗口,在此窗口中也能运行DEBUG,但DEBUG的某些功能会受到WINDOWS系统的限制。
1.启动与退出DEBUG:启动DEBUG,在DOS提示符下输入:DEBUG[回车]屏幕显示“-”,表示已启动了DEBUG。
“-”是DEBUG子命令等待状态,后面所有的DEBUG操作(包括运行调试自编的汇编语言程序)都是在此“-”提示符下所进行的DEBUG 子命令执行。
退出DEBUG,在“-”提示符下输入:Q[回车]屏幕显示DOS命令提示符:C:\> 或A:\> 。
2.进入与退出输入汇编指令:在“-”提示符下输入:A [偏移地址] [回车]屏幕显示“<段地址>:<偏移地址> |”,此处将等待你输入汇编语言程序或实验指令。
当一条指令输入完毕[回车]后,又将自动出现下一对“<段地址>:<偏移地址> |”等待你输入下条指令,如此重复,将帮助你把整段汇编语言程序输入完毕。
注意:如果输入汇编指令时手误,屏幕上将当场提示错误“ERROE”,自动地址不进步,还在原地址上等待你重新输入正确的汇编指令。
DEBUG使用方法DEBUG使用方法格式:DEBUG[[drive:][path]filename[testfile-para meters]]参数:[drive:][path]filename指定待调试可执行文件的所在位置及文件名。
testfile-parameters指定待设计可执行文件需要的命令参数。
相关命令-A (汇编,Assemble)-C (比较,Compare)-D (卸出,Dump)-E (输入数据,Enter))-F (填充,Fill)-G (执行,Go)-H (十六进行运算,Hex)-I (读输入口,Input)的所在位置及名子,DEBUG执行时将显示符(-)。
这时,用户可输入任何一个DEBUG调试命令。
DEBUG命令以下为DEBUG使用的调试命令及其简介:?显示所有的调试命令A汇编8086/8087/8088汇编语言源程序。
C比较两块内存的内容。
D显示部分内存的内容。
E人指定的地址开始把数据送入内存。
F将指一值填进某一范围的内存。
G运行内存中的程序。
H执行十六进制算术运算。
I从指定输入口输入一道字节值。
L把文件或磁盘扇区内容装入内存。
M拷贝某块内存的内容。
N指定文件名,以便L或W命令读写该文件;指定正调试文件所需的参数。
O发送一字节值至指定输出口。
P执行循环程序,重复字符串指令,软中断,或子程序。
Q结束DEBUG命令执行。
R显示或修改一个或数个寄存器内容。
S在内存指定范围内找寻指定的值。
T执行一条指令,然后显示所有寄存器的内容,所有标志状态,以及下一条要执行的指令(汇编语言格式)。
U反汇编某一范围内的字节,显示其相应汇编语言源语名。
W把正调试文件写入磁盘。
XA分配扩充内存XD释放分配的扩充内存。
XM作扩充内存页的影像。
XS显示扩充内存的状态。
命令参数间的隔离除命令Q外,所有的调试命令都可使用参数。
参数间可用逗号或空格隔开,但只是在十六进制数之间才要求必须隔开。
因此,下列命令是等价的:dcs: 100 110D CS: 100 110D,CS:100,110指定有效地址调试命令中的addres(地址)参数指定内存中的地址。
Debug是一种程序调试工具,主要用于帮助程序员检查和修复程序中的错误。
以下是如何使用Debug的基本步骤:
设置断点:断点是一种标记,告诉Debug从标记的地方开始查看。
在要设置断点的代码行上单击鼠标左键即可。
运行程序:在代码区域右击,选择Debug执行。
单步执行:点击Step Into(F7)这个箭头,或者直接按F7,以一行一行地操纵代码,从而判断程序的执行流程是否与预期一致。
查看变量值:在执行过程中,可以查看变量的当前值,以了解程序状态。
删除或禁用断点:选择要删除的断点,单击鼠标左键即可。
如果是多个断点,可以每一个再点击一次。
也可以一次性全部删除。
以上是使用Debug的基本步骤,但请注意,具体使用方式可能会根据Debug的具体版本和配置有所不同。
1.项目报错,即eclipse里面项目工程有红叉eclipse中打开Problems视图,window->show view->other->General->Problems通过Problems视图中的错误信息,找到错误源(有可能是java文件,或者(xml,有可能是 1.xml有错;2.含有错误字符(比如从word复制过来);3.假报)buildpath -> eclipse中工程,右键->Build Path-> Configure Build path -> Libraries选项卡察看JRE System Library(引入jdk自带包0),Server Runtime(引入jsp/servlet实现包,比如Apache Tomcat V6.0(这个是window->preferences->server下定义的Runtime Environment对应))Web App Libraries(包含了eclipse中项目工程自带的WEB-INF/lib 下引入的jar包)junit(调试用,不一定需要)User Library(一般eclipse使用者把自己引入的jar包放在一起,定义一个library,在eclipse中引用)2.项目启动,控制台报错察看控制台错误信息可能错误信息包括:1.session factory(可能是hibernate的实体类定义错误), 控制台一般看到dao,sessionFactory,hibernate的关键字eg.Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for name1 in class demo.ssh2.model.Roleatorg.hibernate.property.BasicPropertyAccessor.createGetter(BasicProperty Accessor.java:306)atorg.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAc cessor.java:299)atorg.hibernate.mapping.Property.getGetter(Property.java:294)atorg.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEnt ityTuplizer.java:300)atorg.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTu plizer.java:141)atorg.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.ja va:78)... 55 more2.bean定义错误,dao,service,action,1.<property name="" ref=""/>中的ref找不到对应的bean的id从sessionfactory->dao->service->action,前面的错误总能导致出后面的错误eg.比如定义了如下spring配置信息<bean id="sessionFactory" ..../><bean id="baseDao" abstract="true" class="demo.ssh2.dao.BaseHibernateDao"><property name="sessionFactory" ref="sessionFactory1" /></bean>控制台报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file...(备注:此处省略多少字)Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory1' is definedatorg.springframework.beans.factory.support.DefaultListableBeanFactory.g etBeanDefinition(DefaultListableBeanFactory.java:527)atorg.springframework.beans.factory.support.AbstractBeanFactory.getMerg edLocalBeanDefinition(AbstractBeanFactory.java:1083)atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetB ean(AbstractBeanFactory.java:274)atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190)atorg.springframework.beans.factory.support.BeanDefinitionValueResolver .resolveReference(BeanDefinitionValueResolver.java:322)... 30 more2.setter方法名和spring配置文件中的<property name="" ref=""/>中的name 不匹配eg.比如定义如下:<bean id="roleService" class="demo.ssh2.service.RoleService"><property name="roleDao" ref="roleDao"/></bean>RoleService中roleDao的setter方法如下public void setRoleDao1(RoleDao roleDao) {this.roleDao = roleDao;}方法setRoleDao1和<property name="roleDao" 不匹配控制台报错:Caused by: org.springframework.beans.NotWritablePropertyException:Invalid property 'roleDao' of bean class[demo.ssh2.service.RoleService]:Bean property 'roleDao' is not writable or has an invalid setter method.Did you mean 'roleDao1'?atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:1024)atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:900)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:76)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:58)atorg.springframework.beans.factory.support.AbstractAutowireCapableBea nFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.jav a:1358)... 28 more3.缺少setter方法比如配置<bean id="roleService" class="demo.ssh2.service.RoleService"><property name="roleDao" ref="roleDao"/></bean>在类RoleService中没有定义roleDao的setter方法控制台报错:Caused by: org.springframework.beans.NotWritablePropertyException:Invalid property 'roleDao' of bean class [demo.ssh2.service.RoleService]:Bean property 'roleDao' is not writable or has an invalid setter method.Does the parameter type of the setter match the return type of the getter?atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:1024)atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:900)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:76)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:58)atorg.springframework.beans.factory.support.AbstractAutowireCapableBea nFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.jav a:1358)... 28 more3.eclipse缓存问题,更改了文件,部署到web server中的文件仍然旧的servers视图中,先停止server,然后删除servereclipse中点击项目工程,Project->clean->最上面选中Clean Projects selected below->点击ok3.项目运行,控制台报错察看控制台错误信息可能错误信息包括:1.jdbc配置错误(数据库url,用户名,密码)比如jdbc配置文件错误,将ername=root修改为ername=root1页面报错如下:org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection 控制台报错如下:2013-11-20 09:39:25,441 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] Cannot create PoolableConnectionFactory (Access denied for user 'root1'@'localhost' (using password: YES))2.页面访问不到404或页面有异常信息根据访问的url里面的action,找到Action类对应的方法,打个断点(打在方法体内的代码块的第一行)如果不能进入debug视图,表示struts.xml配置文件有问题,页面输入url中的action找不到对应的Action类eg.比如将strus.xml配置名为<action name="role/list",页面访问role/list1.acito页面报错:ng.NoSuchMethodException:demo.ssh2.action.RoleAction.list1()ng.Class.getMethod(Class.java:1605)如果能进入debug视图,表示struts.xml配置文件没有问题,1.一般控制台会有异常栈错误信息eg.比如RoleAction有如下方法public String list(){List<?> list = roleService.getList();ActionContext.getContext().put("roles", list);return "list";}RoleService中getList方法如下public List<?> getList(){throw new RuntimeException();}页面报错:ng.RuntimeExceptiondemo.ssh2.service.RoleService.getList(RoleService.java:13)2.struts2标签或jstl标签使用错误3.页面不能显示出数据,1.action中私有实体类属性没有gettter/setter方法,或者没有使用request.setAttribute,或者使用ActionContext.getContext().put,传值2.struts2标签或jstl标签使用不对,但页面不报错。
DEBUG的使用方法1.设置断点:断点是在代码中设置的一个位置,程序在运行到这个位置时会暂停执行。
可以在关键的代码行上设置断点,以便在程序运行到这些位置时进行观察和调试。
在DEBUG工具中,我们可以在代码行上单击左侧的空白区域来设置断点。
2.执行步进:步进是一种按步执行程序的方法,可以逐行或逐过程执行代码。
通过逐行执行代码,可以观察每一行代码的执行情况,以便找出程序中的错误。
可以使用DEBUG工具提供的步进功能,一次执行一行代码或一个过程。
3.观察变量:在程序运行过程中,可以观察和监视变量的值,以便了解程序的状态。
可以使用DEBUG工具来查看变量的值,并在程序执行过程中跟踪变量的变化。
这对于发现变量值的改变和问题的根源非常有帮助。
4.输出调试信息:在调试过程中,可以通过在代码中插入输出语句来输出调试信息。
可以使用DEBUG工具提供的输出窗口或控制台来查看这些调试信息。
输出调试信息有助于了解程序的执行流程,找到错误发生的原因。
5.检查堆栈:堆栈是保存程序执行状态的一种数据结构,可以在DEBUG工具中查看和跟踪堆栈的状态。
堆栈信息可以告诉我们程序的执行路径,以及代码是如何调用和返回的。
通过检查堆栈,我们可以找到错误发生的上下文和调用链。
6.使用断言:断言是一种在代码中插入的条件,用于检查程序执行过程中的假设和要求。
可以使用DEBUG工具中的断言功能,在关键的代码位置插入断言条件。
当断言条件不满足时,程序会执行中断操作,从而帮助我们快速定位错误。
7.进行追踪:追踪是一种记录程序执行过程的方法,可以在DEBUG工具中查看程序的执行轨迹。
追踪记录了程序的每一步操作,包括函数调用、条件语句的执行和变量的修改等。
通过追踪,我们可以逐步了解程序的执行情况,并找到错误所在。
8.使用条件断点:条件断点是一种在特定条件下触发断点的方法。
可以在DEBUG工具中设置条件断点,当满足特定条件时,程序会在断点处暂停执行。
条件断点可以帮助我们找出特定情况下的错误,提高调试的效率。
一、熟悉和掌握如下Debug常用命令的使用方法:R,D,E,A,U,T,P,G,QR 显示和修改寄存器的内容D 显示寄存器单元的内容E 显示和修改存储单元的内容A 汇编命令U 反汇编命令T 执行一条或多条指令P 逐条执行指令G 设置断点并启动运行被调试程序Q 结束并推出DEBUG程序二、熟悉和掌握在Debug中运用MOV、AND、OR、XOR、NOT指令进行二进制数实验题目一: 已知 a = 00111000B, b= 11000111B, 试求(1) a AND b(2) a OR b(3) a XOR b(4) NOT a实验内容: a AND b-A18AE:0100 MOV AL,3818AE:0102 MOV BL,C718AE:0104 AND AL,BL18AE:0106实验步骤:-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0100 NV UP EI PL NZ NA PO NC 18AE:0100 B038 MOV AL,38-PAX=0038 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0102 NV UP EI PL NZ NA PO NC 18AE:0102 B3C7 MOV BL,C7-PAX=0038 BX=00C7 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0104 NV UP EI PL NZ NA PO NC 18AE:0104 20D8 AND AL,BL-PAX=0000 BX=00C7 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0106 NV UP EI PL ZR NA PE NC 18AE:0106 0000 ADD [BX+SI],AL DS:00C7=0D实验小结:最终结果AL=0000即a AND b=0000三、熟悉和掌握在Debug中运用MOV、ADD、SUB、DAA、DAA指令进行二进制数(补码)、BCD数的加减运算,并注意观察记录标志位的变化情况。
DEBUG命令详解DEBUG是DOS中的一个外部命令,从DOS 1.0起就带有此命令,因此可见此命令的重要性了。
虽然此命令的功能非常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。
因此,现将DEBUG的命令详细介绍一番,以让大家知道它的使用。
Debug:A(汇编)直接将8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。
所有数值都是十六进制格式,必须按一到四个字符输入这些数值。
在引用的操作代码(操作码)前指定前缀记忆码。
a [address]参数address指定键入汇编语言指令的位置。
对address 使用十六进制值,并键入不以“h”字符结尾的每个值。
如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的Debug E(键入)。
有关反汇编字节的信息,请单击“相关主题”列表中的Debug U(反汇编)。
说明使用记忆码段的替代记忆码为cs:、ds:、es: 和ss:。
远程返回的记忆码是retf。
字符串处理的记忆码必须明确声明字符串大小。
例如,使用movsw 可以移动16 位的字串,使用movsb 可以移动8 位字节串。
汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。
通过使用near 或far 前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500 jmp 502 ; a 2-byte short jump0100:0502 jmp near 505 ; a 3-byte near jump0100:0505 jmp far 50a ; a 5-byte far jump可以将near 前缀缩写为ne。
区分字和字节内存位置当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀word ptr 或者前缀byte ptr 指定数据类型。
DEBUG调试程序的使用一、DEBUG的启动在DOS系统提示符下,运行DEBUG命令即可启动。
命令格式:DEBUG [文件名全称]功能:启动DEBUG调试程序,并把指定名字的文件装载入内存,以供调试。
说明:启动DEBUG,实际就是让计算机执行DEBUG.EXE这个调试程序。
若该程序不在当前目录下,需要在命令中指定该程序所在的位置路径(包括其所在磁盘和文件夹)。
文件名全称指定要调试的文件名及其所在的位置路径。
若指定该选项,则在启动DEBUG时把该文件装载入内存,以供调试,该文件一般是EXE文件或COM文件。
若不指定该选项,则只启动DEBUG,不装载文件。
二、DEBUG常用命令1、D——显示内存单元内容的命令格式:D[开始地址[结束地址]]说明:①若“开始地址”和“结束地址”都指定,则显示指定地址范围内的内存单元的内容;若只指定“开始地址”,省略“结束地址”,则显示从“开始地址”开始的80H个字节的内容;若“开始地址”和“结束地址”都省略,则显示从上次显示的末字节单元的下一个字节开始的80H个字节的内容。
②“开始地址”可包含段地址,若省略段地址,则默认使用DS的值作段地址。
2、E——输入内容(修改内存单元内容)命令格式:E开始地址[数据表列]说明:①若指定数据表列,则用数据表列中的数据存入从指定地址开始的内存单元中;若省略数据表列,则先显示指定开始地址的内存单元的内容,等待你修改。
若需要修改,输入其内容,按空格键显示、修改下一个内存单元内容;若不需要修改,直接按空格键显示、修改下一个内存单元内容,修改完成后按回车键。
②“开始地址”可包含段地址,若省略段地址,则默认使用DS的值作段地址。
3、F——填充内容(修改内存单元内容)命令格式:F开始地址结束地址数据表列说明:①用数据表列中的数据存入由开始地址和结束地址指定范围内的内存单元。
若数据表列中的数据少于指定地址范围的内存单元数,则循环使用表列中的数据存入内存单元,若数据表列中的数据多于指定地址范围的内存单元数,则多余的数据被忽略。
debug的基本使用
Debug是一种在软件开发过程中用于调试程序的工具。
它可以帮助开发人员找到程序中的错误并进行修复,从而提高程序的质量和稳定性。
下面将介绍Debug的基本使用方法。
1. 设置断点
断点是Debug中最常用的功能之一。
它可以让开发人员在程序执行到指定位置时暂停程序,以便进行调试。
设置断点非常简单,只需要在
代码行号左侧单击鼠标即可。
2. 运行程序
设置好断点后,就可以运行程序了。
在运行过程中,程序会执行到第
一个断点处停止。
此时可以查看变量值、函数调用栈等信息来分析问题。
3. 单步执行
单步执行是指逐条执行代码,并查看每个语句的效果。
这个功能非常
有用,因为它能够帮助开发人员深入了解代码的执行过程,并找出可
能存在的错误。
4. 监视变量
监视变量可以让开发人员实时查看变量值的变化情况。
当某个变量值发生改变时,Debug会自动提示开发人员,并显示新值和旧值之间的差异。
5. 调试崩溃
当程序崩溃或出现异常时,Debug可以帮助开发人员快速定位问题。
在这种情况下,开发人员可以使用Debug来查看程序的状态、变量值等信息,并找出导致程序崩溃的原因。
总之,Debug是一种非常有用的工具,它可以帮助开发人员快速定位问题并进行修复。
掌握Debug的基本使用方法对于提高软件质量和稳定性非常重要。
实验二Debug的使用(一)一、实验要求和目的1.熟悉Debug环境。
2.掌握常用Debug命令的基本操作。
二、软硬件环境1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。
三、实验涉及的主要知识单元在以后所有的实验中,都将用到Debug程序,首先学习一下它的主要用法。
(1) 什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。
使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
(2) 我们用到的Debug功能●用Debug的R命令查看、改变CPU寄存器的内容;●用Debug的D命令查看内存中的内容;●用Debug的E命令改写内存中的内容;●用Debug的U命令将内存中的机器指令翻译成汇编指令;●用Debug的T命令执行一条机器指令;●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
Debug的命令比较多,共有20多个,但上述6个命令是和汇编语言学习密切相关的。
在以后的实验中,我们还会用到一个P命令。
(3) 进入DebugDebug是在DOS方式下使用的程序。
我们在进入Debug前,应先进入到DOS方式。
用以下方式可以进入DOS:①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。
②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。
下面说明在Windows XP中进入Debug的一种方法,在Windows 98中进入的方法与此类似。
单击【开始】菜单中的【运行】命令,打开【运行】对话框,在文本框中输入“command”后,单击【确定】按钮。
图2-1 选择【运行】命令图2-2 在文本框中输入“command”进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变为全屏方式。
debug指令详解一、DEBUG概述DEBUG是在DOS状态下面供程序员使用的程序调试工具。
它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。
DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。
此外,DEBUG还可以用于读写端口中的数值。
在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。
DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。
在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。
如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。
前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。
在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。
DEBUG输入数据时有两种方法: 提示方法和非提示方法。
在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。
执行后可以看到该地址中已有的内容及一个冒号提示符。
此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。
在非提示方法下,输入保持数据的内存地址以及要输入的数据。
DEBUG的启动:进入DOS 状态下,键入DEBUG ,按ENTER键,如: C:\>DEBUG ,则屏幕显示:-符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
DEBUG的退出:在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。
DEBUG的使用:在DEBUG的提示符后输入DEBUG命令,按ENTER键。
二、DEBUG 命令详解★A命令格式:A[地址]功能:将指令直接汇编成机器码输入到内存中。
汇编_DEBUG的使用汇编语言是一种低级语言,它与机器语言非常接近,每一个汇编语言的指令几乎都对应着一条机器指令。
因此,了解并掌握汇编语言对于理解计算机内部工作原理以及进行底层编程是非常有帮助的。
下面,我将详细介绍DEBUG的使用方法和功能。
1.DEBUG的启动和退出:在DOS命令行下输入DEBUG命令,即可启动DEBUG。
DEBUG启动后,会显示一个短横线"-”,表示等待执行命令。
在DEBUG中输入"q"命令,即可退出DEBUG。
2.DEBUG的命令格式和常用命令:-a:将键盘输入的ASCII码写入指定地址-d:显示内存中的指定地址的内容-e:修改内存中的指定地址的内容-g:从指定地址开始执行程序-r:查看和修改寄存器的值-t:查看和修改标志寄存器的值-u:以汇编代码的格式显示内存中的指令-w:将内存中的内容写入指定文件-n:加载并执行指定文件-i:打印当前的执行指令-f:在段间切换3.DEBUG的常用调试操作:- 通过“d”命令查看内存中的指令和数据内容,可以使用不同的参数来控制显示格式,如"d 100"表示从100H地址处开始显示,"d cs:100"表示从CS:100H地址处开始显示。
-通过“e”命令修改内存中的指令和数据内容。
- 通过“r”命令查看和修改寄存器的值,如"r ax"表示查看和修改AX寄存器的值。
-通过“u”命令以汇编代码的格式显示内存中的指令。
-通过“g”命令从指定地址开始执行程序。
-通过“n”命令加载并执行指定的二进制文件。
4.示例:下面给出一个使用DEBUG调试的示例过程:-启动DEBUG,进入DEBUG命令行界面。
-使用“n”命令加载一个二进制文件。
-使用“d”命令查看内存中的指令和数据,以及寄存器的值。
-使用“e”命令修改内存中的指令和数据。
-使用“g”命令执行程序。
-使用“r”命令查看和修改寄存器的值。
实验一DEBUG命令的功能及使用DEBUG的主要命令功能与格式1. 汇编命令A格式:A [[<段寄存器名>/<段地址>:] <段内偏移>]上式等价于:(1)A <段寄存器名>:<段内偏移>(2)A <段地址>:<段内偏移>(3)A <段内偏移>(4)A功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用户直接键入回车键返回到提示符“-”。
注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以CS:100作地址。
以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A后的地址形式。
2. 显示内存命令D格式:D [<地址>/<范围>]上式等价于:(1)D <地址>(2)D <范围>(3)D功能:以两种形式显示指定范围的内存内容。
一种形式为十六进制内容,一种形式为以相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。
注:其中(1)以CS为段寄存器。
(3)显示CS:100起始的一片内容。
3. 修改内存命令E格式:E <地址> [<单元内容表>]上式等价于:(1)E <地址>(2)E <地址> <单元内容表>其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者的组合。
功能:(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter为止。
(2)将<单元内容表>逐一写入由<地址>开始的一片单元。
4. 填充内存命令F格式:F <范围> <单元内容表>功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
Debug的使用方法在软件开发过程中,经常会遇到各种bug和错误。
为了解决这些问题,开发人员需要使用debug工具进行调试。
本文将介绍debug 的使用方法,帮助读者快速定位和修复程序中的错误。
一、什么是debugDebug是一种用于查找和修复程序错误的技术。
通过使用debug 工具,开发人员可以跟踪程序的执行过程,查看变量的值和代码的执行路径,以及定位代码中的错误。
二、常用的debug工具1. IDE集成的debug工具:大多数集成开发环境(IDE)都提供了内置的debug工具,如Visual Studio、Eclipse等。
通过在IDE 中设置断点,开发人员可以逐步执行程序,并在每个断点处查看变量的值和代码的执行路径。
2. 命令行debug工具:除了IDE集成的debug工具,还有一些独立的命令行debug工具,如gdb、lldb等。
这些工具可以通过命令行参数设置断点、查看变量的值等。
三、使用debug工具的基本步骤1. 设置断点:在需要调试的代码行上设置断点。
断点可以是一个代码行,也可以是一个条件语句。
当程序执行到断点时,会暂停执行,并进入debug模式。
2. 执行程序:运行程序,并触发断点。
程序在执行到断点时会暂停,等待开发人员进行调试操作。
3. 查看变量的值:在debug模式中,开发人员可以查看变量的值。
可以逐步执行程序,每次执行一行代码,并在每个断点处查看变量的值。
如果发现变量的值与预期不符,就可以定位问题所在。
4. 跟踪代码的执行路径:在debug模式中,开发人员可以逐步执行程序,查看代码的执行路径。
通过观察代码的执行路径,可以发现代码中的逻辑错误。
5. 修复错误:当定位到错误时,开发人员需要修复错误。
可以通过修改代码、添加条件语句等方式来解决问题。
修复错误后,重新执行程序,验证修复效果。
四、debug技巧和注意事项1. 使用日志输出:在调试过程中,可以通过输出日志信息来跟踪程序的执行。
Debug的基本使用1.使用r命令查看或修改CPU寄存器的内容。
(1)使用r的命令查看:(2)使用r来改变寄存器中的内容:例如修改AX的值,就需输入“r ax”后按Enter键,在出现的“:”后面输入要写入的数据,并按Enter,再用r查看,修改成功,如图1所示。
图1用r来修改Ip的值,如图2所示。
2.用d来查看内存的内容。
(1)直接输入d,debug将输出3部分内容,如图3所示。
图3(2)可以使用“d 段地址:偏移地址”的格式,例如想查看内存10000H处的内容。
(3)在使用“d 段地址:偏移地址”之后,接着使用d命令,可列出后续的内容,如图5所示。
图5(4)使用d命令查看范围,格式为“d 段地址:起始偏移地址结尾偏移地址”。
例如要查看1000:0到1000:9中的内容,如图6所示。
图63.用e来改写内存中的内容。
(1)将内存1000:0-1000:9中的内容分别改为0、1、2、3、4、5、6、7、8、9,其格式为“e 起始地址数据数据数据。
”,如图7所示。
图7(2)用提问的方法改写内存的内容。
以1000:10为起始地址进行改写,其步骤为:输入“e 1000:10”,并按Enter,在显示光标后面输入想要修改的内容,如果想停止输入,就按Enter,继续就按空格键。
(在显示光标后面直接按空格键,则表示不对当前内存单元进行改写)(3)用e向内存中写入字符。
(4)用e命令向内存中写入字符串。
(5)用e命令向内存中写入机器码,用u命令查看内存中机器码的含义,用t命令执行内存中的机器码。
例如要从内存1000:0单元开始写入机器码:b80100b9020001c8,其方法如图8所示。
图8用u将从1000:0开始的内存单元中的内容翻译为汇编指令并显示出来。
(见图9)使用t命令可以执行CS:IP指向的指令。
(图10)图10执行T命令后,cpu执行CS:IP指向的指令,则1000:0处的指令b8 01 00(mov ax,0001)得到执行。
Debug-PC之开山老祖Debug 原意是杀虫子。
这里是机器调试工具。
其实,Debug的由来,还有一则趣闻,在早期美国的一计算机房中,科学家正在紧张的工作。
同时,许多台大型的计算机也在不停的运行着。
大概是由于,机器过热,引来许的小虫子,以至于,计算机无法正常运行。
科学们,只好停下来,捉虫子...虫子捉完了,计算机运行也正常了,后来,这个名词就沿用至今了....虽然,现在好的软件越来越多了,但是有些,我们只需动手,用Debug就可解决,且快而好!接下来,我们就一起学习Debug在各方面的运用吧!(在杀毒、加解密、系统...)下面我和大家一起学习一些,Debug 的用法,虽然,现在好的软件越来越多了,但是有些,我们只需动手,用Debug就可解决,且快而好!Debug常用命令集名称解释格式a (Assemble) 逐行汇编a [address]c (Compare) 比较两内存块c range addressd (Dump) 内存16进制显示d [address]或d [range]e (Enter) 修改内存字节e address [list]f (fin) 预置一段内存f range listg (Go) 执行程序g [=address][address...]h (Hexavithmetic) 制算术运算h value valuei (Input) 从指定端口地址输入i pataddressl (Load) 读盘l [address [driver seetor]]m (Move) 内存块传送m range addressn (Name) 置文件名n filespec [filespec...]o (Output) 从指定端口地址输出o portadress byteq (Quit) 结束qr (Register) 显示和修改寄存器r [register name]s (Search) 查找字节串s range listt (Trace) 跟踪执行t [=address] [value]u (Unassemble) 反汇编u [address ]或rangew (Write) 存盘w [address[driver sector secnum]]? 联机帮助?debug小汇编a命令debug小汇编a命令是一个很有用的功能,许多的小程序都要他来做。
附录DEBUG调试程序的应用1.直接启动DEBUG程序如在C盘的根目录下,启动的方法是:C:\>DEBUG_这时屏幕上会出现“_”提示符,等待键入DEBUG命令。
2.启动DEBUG程序的同时装入被调试文件命令格式如下:C:\>DEBUG [d:][PA TH]filename[.EXT][d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。
例如:BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。
C:\>DEBUG A:\BCDSUN.EXE↙DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。
3.退出DEBUG在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。
4.在DEBUG环境下建立和汇编程序在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。
比如,在DEBUG下运行如下程序:MOV DL,33H ;字符3的ASCII码送DLMOV AH,2 ;使用DOS的2号功能调用INT 21H ;进入功能调用,输出‘3’INT 20H ;BIOS中断服务,程序正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。
如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。
其中涉及DOS和BIOS功能调用。
因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。
DOS功能调用就是为诸如此类的目的设置的。
DOS功能调用要求在进入INT 21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。
也就是说INT 21H 的2号功能调用是输出DL寄存器中的字符。
INT 20H是BIOS中断服务,这一软中断用来正常结束程序。
运行步骤:(1)进入DEBUG设C盘上有程序,进入DOS环境后键人DEBUG<ENTER>,即C:\>DEBUG随后屏幕显示:_“_”号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
现在用A 命令输入程序如下:(2)输入程序并汇编_A 100169C:0100 MOV DL,33169C:0102 MOV AH,2169C:0104 INT 2l169C:0106 INT 20169C:0108至此程序已输入完毕,并汇编成机器指令。
现在用G命令运行程序如下:(3)运行程序_G3Program terminated normally如果现在想分析一下该程序的指令,可以用反汇编命令U作如下操作:(4)反汇编_U 100,108169C:0100 B233 MOV DL,33169C:0102 B402 MOV AH,02169C:0104 CD21 INT 21169C:0106 CD20 INT 20169C:0108(5)将机器指令程序送到起始地址为200H的若干单元_E 200 B2,33,B4,02,CD,21,CD,20(6)执行机器指令程序_G=2003Program terminated normally二、常用DEBUG命令DEBUG命令是在命令提示符“_”下由键盘键入的。
每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键(ENTER)。
命令及参数的输入可以是大小写的结合。
Crtl+Break键可中止命令的执行。
Crtl+NumLock键可暂停屏幕卷动,按任一键继续。
所用的操作数均为十六进制数,不必写H。
1.汇编命令A格式:(1)A <段寄存器名>:<偏移地址>(2)A <段地址>:<偏移地址>(3)A <偏移地址>(4)A功能:汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。
键人该命令后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。
每当输入一行语句后按“ENTER”键,输入的语句有效。
若输入的语句中有错,DEBUG会显示“^ Error”,要求用户重新输入,直到显示下一地址时用户直接键入回车键返回到提示符“_”。
其中(1)用指定段寄存器内容作段地址;(3)用CS内容作段地址;(4)以CS:100作地址。
以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A命令后的地址形式。
2.比较命令C格式:C <源地址范围>,<目标地址>其中<范围>是由<起始地址><终止地址>指出的一片连续单元,或由<起始地址> L <长度>指定的。
功能:从<源地址范围>的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的内容,直至源终止地址为止。
遇有不一致时,以<源地址><源内容><目标内容><目标地址>的形式显示失配单元及内容。
3.显示内存单元命令D格式:(1)D <地址>(2)D <地址范围>(3)D其中(1)以CS为段寄存器;(3)显示CS:100为起始地址的一片内存单元内容。
功能:该命令将显示一片内存单元的内容,左边显示行首字节的段地址:偏移地址,中间是以十六进制形式显示的指定范围的内存单元内容,右边是与十六进制数相对应字节的ASCII码字符,对不可见字符以‘·’代替。
4.修改内存单元命令E格式:(1)E <地址><单元内容>(2)E <地址><单元内容表>其中<单元内容>是一个十六进制数,或是用引号’(或”)括起来的字符串;<单元内容表>是以逗号分隔的十六进制数,或是用’或”括起来的字符串,或者是二者的组合。
功能:(1)将指定内容写入指定单元后显示下一地址,以代替原来内容。
可连续键入修改内容,直至新地址出现后键入回车<ENTER>为止;(2)将<单元内容表>逐一写入由<地址>开始的一片单元中,该功能可以将由指定地址开始的连续内存单元中的内容,修改为单元内容表中的内容。
例如:_E DS:30 F8,AB,”AB”该命令执行后,从DS:30到DS:33的连续4个存储单元底内容将被修改为F8H,ABH,41H,42H。
5.填充内存命令F格式:F <范围><单元内容表>功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
例如:F 05BC:200 L 10 B2,‘XYZ’,3C该命令将由地址05BC:200开始的10H(16)个存储单元顺序填充“B2,58,59,5A,3C,B2,58,59,5A,3C,B2,58,59,5A,3C,B2”6.连续执行命令G格式:(1)G(2)G=<地址>(3)G=<地址>,<断点>其中(2)、(3)中的“=”是不可缺省的。
功能:●默认程序从CS:IP开始执行。
●程序从当前的指定偏移地址开始执行。
●从指定地址开始执行,到断点自动停止并显示当前所有寄存器、状态标志位的内容和下一条要执行的指令。
DEBUG调试程序最多允许设置10个断点。
7.跟踪命令T格式:T [=<地址>][<条数>]功能:如果键入T命令后直接按“ENTER”键,则默认从CS:IP开始执行程序,且每执行一条指令后要停下来,显示所有寄存器、状态标志位的内容和下一条要执行的指令。
用户也可以指定程序开始执行的起始地址。
<条数>的缺省值是一条,也可以由<条数>指定执行若干条命令后停下来。
例如:T该命令执行当前指令并显示所有寄存器、状态标志位的内容和下一条要执行的指令。
又例如:T 10该命令从当前指令开始执行10H条指令后停下来,所有寄存器、状态标志位的内容和下一条要执行的指令。
8.反汇编命令U格式:(1)U <地址>(2)U <地址范围>功能:反汇编命令是将机器指令翻译成符号形式的汇编语言指令。
该命令将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。
注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。
地址及范围的缺省值是上次U指令后下一地址的值。
这样可以连续反汇编。
9.执行过程命令P格式:P功能:执行一条指令或一个过程(子程序),然后显示各寄存器的状态。
说明:该命令主要用于调试程序。
它与跟踪命令T的作用类似,T命令是跟踪一条或多条指令,而P命令是执行一条指令(包括带重复前缀的数据串操作指令)或一个完整的过程(子程序)。
例如:设有如下指令序列:MOV AH,02HINT 21H:当要执行INT 21H这条指令时,若用T命令进行跟踪,则进入INT 21H程序(DOS 功能调用)后,需要数十次T命令才能返回当前程序;若采用P命令进行调试,则只执行INT 20H一条指令,执行完立即返回,给调试者的感觉好象是执行了一条普通指令一样。
因此,当读者以后遇到CALL、INT n指令或带重复前缀的数据串操作指令时,若不想观察相应过程的详细执行过程,就可以用P命令。
10.定义待装入文件命令N格式:N [d:][PA TH]filename[.EXT]功能:N命令一般和L命令联合使用,为L命令定义指定路径的待装入文件。
11.装入文件命令L格式:L <地址><盘号><起始逻辑扇区><所读扇区个数n>其中<地址>的缺省值为CS:100。
逻辑扇区可由物理扇区号换算得到,以双面双密度盘为例:物理扇区是按0面0道1区,0面0道2区,…….0面0道9区,0面1道1区,……0面39道9区,1面0道1区,……l面39道9区排列。
而逻辑扇区与物理扇区号的对应关系为物理扇区0面0道1扇区至9扇区,逻辑扇区号为0~8;物理扇区1面0道1扇区至9扇区,逻辑扇区号为9~11H;物理扇区0面1道l扇区至9扇区,逻辑扇区号为12~1AH……这样每道先0面后1面一直排下去。
其中<盘号>为0、1或2,0表示A盘,1表示B盘,2表示硬盘。
功能:将<盘号>指定的盘上,从<起始逻辑扇区>起,共n个逻辑扇区上的所有字节顺序读入指定内存地址的一片连续单元。