版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计实验指导书计算机应用教研室编西南科技大学计算机科学与技术学院2006年3月实验指导书说明汇编语言程序设计是一门实践性很强的课程, 只有通过上机实践才有可能掌握设计 技术并使其达到较高的水平,因此编写了实验指导书,为汇编语言程序设计课程的实验 教学服务。实验指导书共分三部分,第一部分是实验的预备知识,介绍了汇编语言程序运行时 所需要的一些应用程序;第二部分是对实验报告的要求。第三部分是实验题目,分为验证型实验和设计型实验。在具体的实验过程中可以根据学生情况进行选择。目录: TOC o 1-5 h z 第一部分 汇编语言程序设计实验基础知识概述 4 HYPERLINK l book
2、mark2 o Current Document 1.1、汇编程序 MASM.EXE 4 HYPERLINK l bookmark4 o Current Document 宏汇编程序的功能 4 HYPERLINK l bookmark6 o Current Document 1.1.2汇编程序的用法 4 HYPERLINK l bookmark8 o Current Document MASM 出错信息 5 HYPERLINK l bookmark10 o Current Document 连接程序 LINK.EXE 6 HYPERLINK l bookmark12 o Current Doc
3、ument 1.2 DEBUG 命令详解 7 HYPERLINK l bookmark14 o Current Document DEBUG 的功能7 HYPERLINK l bookmark16 o Current Document DEBUG 的使用方法 7 HYPERLINK l bookmark18 o Current Document DEBUG命令功能说明 8 HYPERLINK l bookmark20 o Current Document 第二部分 实验要求 36 HYPERLINK l bookmark22 o Current Document 2.1实验要求36 HYPER
4、LINK l bookmark24 o Current Document 2.2实验报告要求 36 HYPERLINK l bookmark26 o Current Document 2.3加强实践能力的培养 36 HYPERLINK l bookmark28 o Current Document 第三部分 实验内容37 HYPERLINK l bookmark30 o Current Document 实验1 MASM、LINK 指令的使用实验 37 HYPERLINK l bookmark34 o Current Document 实验2 汇编命令(伪指令)实验 39 HYPERLINK
5、l bookmark36 o Current Document 实验 3 顺序结构程序实验 40 HYPERLINK l bookmark38 o Current Document 实验4 简单分支结构程序实验 42 HYPERLINK l bookmark40 o Current Document 实验5循环结构程序实验44 HYPERLINK l bookmark42 o Current Document 实验6子程序实验45 HYPERLINK l bookmark32 o Current Document 实验7 DOS功能调用 48 HYPERLINK l bookmark44 o
6、Current Document 实验8 排序和检索程序实验 50实验9 字符串操作实验53第四部分 参考资料591.1、汇编程序 MASM.EXE经过编辑的程序所建立的汇编语言源程序, 是不能直接在计算机上运行的。 必须经过汇 编、连接后才能运行。目前使用的汇编程序有宏汇编程序 MASM和小汇编程序 ASM。小汇 编程序与宏汇编程序的区别在于:宏汇编程序有宏处理能力,而小汇编程形没有这种功能。另外,小汇编(ASM)处理的汇编语言程序可以在 64KB的内存条件下运行,且只能有限制地 使用伪指令。而宏汇编(MASM)则必须在96KB以上的内存条件下才能运行,且可以使用各 种伪指令。ASM和MAS
7、M的程序运行过程,除汇编时使用ASM或MASM进行汇编外,其它步骤完全萨同。1.1.1宏汇编程序的功能宏汇编程序 MASM.EXE是将用汇编语言编制的源程序转换为机器代码的目标程序 的软件。MASM工作后生成3种文件:目标文件(.OBJ)、列表文件(丄ST)和交叉索 引文件(.CRF )。1.1.2汇编程序的用法宏汇编程序的使用方法有两种:交互式用法和命令行用法。1、交互式用法在DOS提示符下,键入 MASM,并按回车键,宏汇编程序连续显示 4个提示,用户根 据提示,逐个回答后,宏汇编程序开始工作。假设汇编语言源程序名为EXAM.ASM,并存放在当前盘当前目录下,生成的文件也放在当前盘当前目录
8、下。其操作过程如下:C MASMSource File name.ASM: EXAMObject File namEXAM.OBJ:Source List ing NUL.LST: EXAMASM EXAM, EXAM, EXAM, EXAM三个文件全生成CMASM EXAM, , EXAM ;生成 EXAM.OBJ 和 EXAM丄ST 文件CMASM EXAM ;仅生成 EXAM.OBJ 文件命令行中的“;”作为命令行的终止符,未输入部分将使用MASM的隐含设定值。/开关参数也是可选项,用以指定汇编程序的可选操作,开关参数可以是下述 5种情况:/D :在汇编程序的两遍扫描中都产生列表文件,为
9、用户查找两遍扫描步骤错误提供 方便。/O :在列表文件中用八进制表示生成的目标代码和偏移量;/X :列表伪操作在条件为假时,不作列表;/R :对源程序中的8087指令进行汇编,并产生8087目标代码;/E :对源程序中的8087指令进行汇编,产生 8087仿真目标代码。开关参数的使用方法是写在汇编命令行的字符串之后,每个开关参数前用一个斜杠 “/ ”,然后是开关字母。使用参数的多少和顺序由用户根据需要确定。例如:A MASM MYPRG/D/E1.1.3 MASM出错信息汇编程序在对源程序进行汇编的过程中,对汇编语言程序进行词法句法的检查。一旦检查出语法错误,则显示出错信息,MASM 5.0版
10、的错误信息格式:(语句号)错误性质语句号是出错语句在源程序行中的语句行号。例如:(20) Symbol 丨 multi define(20)是语句行号,错误性质是:符号多重定义下面给出常见的主要错误。Block nest ing error 块嵌套错误嵌套的过程、段、结构、宏定义、重复块定义等不恰当地结束。Extra characters on line 语句行上有额外字符当在语句行上接收到定义指令、命令语句的足够信息时,还有其它多余字符。U nknow symbol type.不认识的符号类型符号语句,在类型字段内有不能识别的符号。Symbol is multi defined . 重复定义
11、符号符号在标号域中出现两次以上。bymbol not defined .符号未定义操作数域或操作码域引用了未在标号域中出现过的标号。Phase error between passes两次扫描中间的步骤错程序中有二义性的指令语句。Symbol type usage illegal .符号类型用法错使用PUBLIC语句中的符号用法错。Symbol is reserved word .符号是保留字非法地使用了汇编程序的保留字。Division by 0 or overflow . 除法被 0 除或溢出在除法指令语句中,除数为0或商超出允许范围。Operand type must match .操作
12、数类型必须匹配在要求操作数必须匹配的情况下.汇编程序得到了参量不同的类型和大小。Value is out of ran ge.值超出范围所使用的数值超出了使用范围。Relative jump out ran ge.相对转移超出范围相对转移超出了当前指令的范围(一 128 一 127个字节)。No or un reachable CS.没有或不能达到 CS企图转移至不可达到的标号。Opera nd expected .希望有操作数语句中没有操作数。1.1.4连接程序 LINK.EXE1、连接程序的功能连接程序LINK.EXE是将汇编程序或高级语言编译程序产生的目标程序(.OBJ)连接和装配成可执
13、行程序的软件。它具有下述功能:将汇编程序或高级语言编译程序生成的一个或多个.0BJ文件连接成一个可执行文件和一个内存映象文件.可以在汇编系统和各种高级语言编译系统提供的库文件(.LIB)中检索目标块引用的标准库函数,井与目标模块组合在一起。检查连接过程中的错误,提供错误信息。2、连接程序的用法在DOS提示符下,键入 LINK并按回车键,LINK连续提出4个问题,用户逐个回答 后,LINK开始进行连接工作。假设要进行连接的ABC.OBJ文件在当前盘当前目录下,其操作过程如下:C LINK ABCObject Mudules.OBJ:ABCRun fileABC.EXE:List file NUL
14、,MAP: ABCLibraries.LIB:第一个提示要求输入欲连接的目标模块名。若只有一共欲连接的模块,则键入该文件 名即可;若有多个模块要连接成一个可执行文件,则键入连接的所有目标模块名,模块名之间用“十”号连接。本例中仅有一个目标文件ABC.OBJ。第二个提示要求输入连接后生成的可执行程序的文件名。如果用户只按回车键不回答 文件名,则以第一个目标文件名为可执行程序的文件名;若键入文件名,则以键入的文件名为可执行程序文件的基本名,扩展名为.EXE。本例回答文件名。第三个提示要求输入欲生成的映象文件名。如果用户只按回车控不回答文件名,则不产生映家文件。若键入文件名,则以键入的名字为映象文件
15、的基本名,扩展名为.MAP。本例回答为ABC,将产生ABC.MAP文件。第四个提示输入连接时使用的库文件名。用户应根据生成的目标文件所用的程序设计 语言编译系统确定受用的库文件并输入库文件名。若用一个以上的库文件,则用“十”号将所用库文件名连接起来一并输入。库文件的扩展名为丄IB。本例中末使用库文件,所以只按回车键。上述问题回答后,LINK开始进行连接工作,若连接有错,打印出错信息。DEBUG命令详解DEBU(是 DOS中的一个外部命令,从 DOS1.0起就带有此命令,因此可见此命令的重要 性了。虽然此命令的功能非常强大, 可以解决许多问题, 可是对许多人来说,尤其是初学者 来说,却非常不易掌
16、握。因此,现将 DEBUG勺命令详细介绍一番,以让大家知道它的使用。DEBUG 的功能动态调试程序 DEBUGS称纠错程序,它主要具有下述功能:1)提供对可执行程序(.EXE)或二进制文件的控制和检测手段,使用户能利用 DEBUG 提供的命令监视和控制被调试程序的执行过程。装入、显示或修改任一文件。对磁盘直接进行物理读写或逻辑读写。DEBUG的使用方法1、启动DEBU啲方法启动DEBU圍使用下述两种方法之一:1)在DOS提示符下直接键入:C DEBUGDEBUG即被调入内存并启动运行,显示DEBU啲提示符:“” 在Dos提示符下键入:C DEBUG文件名DEBUG即被调入内存并启动运行,然后将
17、指定的文件调入内存,并显示DEBUG提示符a ?。由于DEBU圍以将任一文件调入内存,所以“文件名”必须写全称,若有扩展名一定要键 入扩展名。2 . DBDU(启动后各寄存器的状态(1)以第一种方法启动后各寄存器的状态段寄存器(DS、ES S5和CS)置为DEBUGS序末尾的第一个段的段边界值;指令指示器1P的值置为0100H;堆栈指示器 SP的值置为OFFEEHAX BX CX DX SI、DI和BP寄存器均置为 0;标志寄存器的状态为 NV(0F= 0) , UP(DF= 0) , EIIF = 1) , PL(SF = 0) , NZ(XF= 0), NA(AF= 0) , PO(PF=
18、 O), NC(CF= 0)。(2)以第二种方法启动后各寄存器的状态若DEBUG装入的程序是非执行程序(非.EXE文件),除BX、CX外,各寄存器的值与第 一种方法启动时相同。BX CX为文件长度。若DEBUG装入的程序是可执行程序(.EXE文件),DEBUGS其重新定位,则各寄存器的 值如下:段寄存器CS SS IP和3P置成程序中规定的值,DS和ES置为程序段前缀的段地址值;BX CX为可执行程序的文件长度,AX DX SI、DI、BP置为0;标志寄存器的值与第一种方法启动时相同。DEBUG命令功能说明Debug:A (汇编)直接将8086/8087/8088 记忆码合并到内存。该命令从汇
19、编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。a address参数address指定键入汇编语言指令的位置。 对address使用十六进制值,并键入不以“ h”字符结尾的 每个值。如果不指定地址,a将在它上次停止处开始汇编。有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的Debug E (键入)。有关反汇编字节的信息,请单击“相关主题”列表中的Debug U (反汇编)。说明使用记忆码段的替代记忆码为 cs:、ds:、es:和ss:。远程返回的记忆码是 retf 。字符串处理的记忆 码必须明确声
20、明字符串大小。例如,使用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。区分字和字节内存位置当某个操作数可以引用某个字内存位置或者字节内存
21、位置时,必须用前缀word ptr或者前缀byte ptr指定数据类型。可接受的缩写分别是wo和by。以下范例显示两种格式: dec wo si neg byte ptr 128指定操作数Debug使用包括在中括号()的操作数引用内存地址的习惯用法。这是因为另一方面Debug不能区分立即操作数和内存地址的操作数。以下范例显示两种格式: mov ax,21 ; load AX with 21h mov ax,21 ; load AX with the ;contents of;memory locatio n 21h使用伪指令使用a命令提供两个常用的伪指令:db操作码,将字节值直接汇编到内存,d
22、w操作码,将字值直接汇编到内存。以下是两个伪指令的范例:db 1,2,3,4,THIS IS AN EXAMPLEdb THIS IS A QUOTATION MARK:db THIS IS A QUOTATION MARK:dw 1000,2000,3000,BACH范例a命令支持所有形式的间接注册命令,如下例所示: add bx,34bp+2.si-1pop bp+dipush si)还支持所有操作码同义词,如下例所示:loopz 100loope 100ja 200jnbe 200对于8087操作码,必须指定 wait或fwait 前缀,如下例所示:fwait fadd st,st(3)
23、 ; this line assembles;an fwait prefixDebug:C (比较)比较内存的两个部分。c range address参数range指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。有关有效的ran ge值的信息,请单击“相关主题”列表中的“ Debug说明”。address指定要比较的第二个内存区域的起始地址。有关有效address值的信息,请单击“相关主题”列表中的“ Debug说明”。说明如果range 和address 内存区域相同,Debug将不显示任何内容而直接返回到Debug提示符。如果有差异,Debug将按如下格式显示:address
24、l bytel byte2 addess2范例以下命令具有相同效果:c100,10f 300C100I10 300每个命令都对100h到10Fh的内存数据块与300h到30Fh的内存数据块进行比较。Debug响应前面的命令并显示如下信息(假定 DS = 197F)197F:0100 4D E4 197F:0300197F:0101 67 99 197F:0301197F:0102 A3 27 197F:0302197F:0103 35 F3 197F:0303197F:0104 97 BD 197F:0304197F:0105 04 35 197F:0305197F:0107 76 71 19
25、7F:0307197F:0108 E6 11 197F:0308197F:0109 19 2C 197F:0309197F:010A 80 0A 197F:030A197F:010B 36 7F 197F:030B197F:010C BE 22 197F:030C197F:010D 83 93 197F:030D197F:010E 49 77 197F:030E197F:010F 4F 8A 197F:030F注意列表中缺少地址 197F:0106和197F:0306。这表明那些地址中的值是相同的。Debug:D (转储)显示一定范围内存地址的内容。d range参数range指定要显示其内容
26、的内存区域的起始和结束地址,或起始地址和长度。有关有效的ran ge值的信息,请单击相关主题”列表中的Debug说明”。 如果不指定range ,Debug程序将 从以前d命令中所指定的地址范围的末尾开始显示 128个字节的内容。有关显示寄存器内容的信息,请单击“相关主题”列表中的Debug R (寄存器)。说明当使用d命令时,Debug以两个部分显示内存内容:十六进制部分(每个字节的值都用十 六进制格式表示)和 ASCII码部分(每个字节的值都用ASCII码字符表示)。每个非打印字符在显示的ASCII部分由句号(.)表示。每个显示行显示 16字节的内容,第 8字节和第9字节之间有一个连字符。
27、每个显示行从16字节的边界上开始。范例假定键入以下命令:dcs:100 10fDebug按以下格式显示范围中的内容:04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER如果在没有参数的情况下键入d命令,Debug按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大16个字节(如果是显示 40列的屏幕,则为 8个字节)的地址开头。对于后面键入的每个不带参数的d命令,Debug将紧接在最后显示的命令后立即显示字节内容。如果键入以下命令,Debug将从CS:100开始显示20h个字节的内容:dcs:1
28、00 l 20如果键入以下命令,Debug将显示范围从 CS段的100h到115h中所有字节的内容:dcs:100 115Debug:E (键入)将数据输入到内存中指定的地址。可以按十六进制或 ASCII格式键入数据。以前存储在指定位置的任何数据全部丢失。e address list参数address指定输入数据的第一个内存位置。list指定要输入到内存的连续字节中的数据。Debug A (汇编)。有关集成记忆码的信息,请单击“相关主题”列表中的有关显示内存部分内容的信息,请单击相关主题”列表中的Debug D (转储)。说明使用address 参数 如果在没有指定可选的list 参数的值情况
29、下指定 address的值,Debug将显示地址和内 容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一:替换字节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则Debug不会回显无效或额外的字符。进入下一个字节。为此,请按SPACEBAR空格键)。要更改该字节中的值,请在当前值后键入新值。如果按 SPACEBAR空格键)时,移动超过了 8位界限,Debug程序将显示新的 一行并在行首显示新地址。返回到前一个字节。为此,请按HYPHEN键(-)。可以反复按 HYPHEN键(-) 向后移动超过多个字节。在按 HYPHEN时,Debu
30、g开始新行并显示当前地址和字节值。停止执行e命令。为此,请按 ENTER键。在任何字节位置都可以按ENTER使用list 参数 如果指定list 参数的值,随后的 e命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。List值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串 包括在单或双引号中。范例 假定键入以下命令:ecs:100Debug按下面的格式显示第一个字节的内容:04BA:0100 EB.要将该值更改为41,请在插入点键入 41,如下所示: 04BA:0100 EB.41_可以用一个e命令键入连续的字节值。在键入新值后按SPACEBAR
31、空格键),而不是按ENTER键。Debug显示下一个值。在此范例中,如果按三次 SPACEBAR空格键),Debug将 显示下面的值:04BA:0100 EB.41 10. 00. BC.要将十六进制值 BC更改为42,请在插入点键入 42,如下所示: 04BA:0100 EB.41 10. 00. BC.42_假定决定值10应该是6F。要纠正该值,请按HYPHEN键两次以返回到地址 0101 (值10 )。Debug显示以下内容:04BA:0100 EB.41 10. 00. BC.42-04BA:0102 00.-04BA:0101 10._在插入点键入6f更改值,如下所示:04BA:01
32、01 10.6f_按ENTER停止e命令并返回到Debug提示符下。以下是字符串项的范例:eds:100 This is the text example该字符串将从DS:100开始填充24个字节Debug:F (填充)使用指定的值填充指定内存区域中的地址。可以指定十六进制或 ASCII格式表示的数据。任何以前存储在指定位置的数据将会丢失。f range list参数range指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效的ran ge值的信息,请单击“相关主题”列表中的“ Debug说明”。list指定要输入的数据。List可以由十六进制数或引号包括起来的字符串组成。说明 使
33、用range 参数如果ran ge包含的字节数比list中的数值大,Debug将在list 中反复指派值,直到range中的所有字节全部填充。如果在range中的任何内存损坏或不存在,Debug将显示错误消息并停止f命令。使用list 参数如果list包含的数值多于range中的字节数,Debug将忽略list 中额外的值。范例假定键入以下命令:fO4ba:1OOI1OO 42 45 52 54 41作为响应,Debug使用指定的值填充从 04BA:100到04BA:1FF的内存位置。Debug重复这五个值直到100h个字节全部填满为止。Debug:G (转向)运行当前在内存中的程序。g =a
34、ddress breakpo in ts参数=address指定当前在内存中要开始执行的程序地址。如果不指定address ,Windows 2000将从CS:IP寄存器中的当前地址开始执行程序。breakpo ints指定可以设置为g命令的部分的1到10个临时断点。有关执行循环、重复的字符串指令、 软件中断或子程序的信息,请单击“相关主题”列表中的Debug P (执行)。有关执行指令的信息,请单击“相关主题”列表中的Debug T (跟踪)。Debug:H (十六进制)对指定的两个参数执行十六进制运算。h valuel value2参数valuel代表从0到FFFFh范围内的任何十六进制数
35、字。value2代表从0到FFFFh范围内第二个十六进制数字。说明Debug首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。范例假定键入以下命令:h19f 10aDebug执行运算并显示以下结果。02A9 0095Debug:I (输入)从指定的端口读取并显示一个字节值。port参数port按地址指定输入端口。地址可以是16位的值。有关将字节值发送到输出端口的信息,请单击“相关主题”列表中的Debug O (输出)。范例假定键入以下命令:i2f8同时假定端口的字节值是42h。 Debug读取该字节,并将其值显示如下:42Debug:
36、L (加载)将某个文件或特定磁盘扇区的内容加载到内存。要从磁盘文件加载 BX:CX寄存器中指定的字节数内容,请使用以下语法:address要略过 Windows 2000文件系统并直接加载特定的扇区,请使用以下语法:address drive start nu mber参数address指定要在其中加载文件或扇区内容的内存位置。如果不指定address ,Debug将使用CS寄存器中的当前地址。drive0 = A, 1 = B, 2 = C 等。指定包含读取指定扇区的磁盘的驱动器。该值是数值型:start指定要加载其内容的第一个扇区的十六进制数。nu mber指定要加载其内容的连续扇区的十六
37、进制数。只有要加载特定扇区的内容而不是加载 debug命令行或最近的 Debug n (名称)命令中指定的文件时, 才能使用drive、start 和number 参数。有关指定用于I命令的文件的信息,请单击“相关主题”列表中的Debug n (名称)。有关写入调试到磁盘的文件的信息,请单击相关主题”列表中的Debug w (写入)。注意 使用不带参数的I命令当使用不带参数的I命令时,在debug命令行上指定的文件将加载到内存中,从地址CS:100开始。Debug同时将BX和CX寄存器设置为加载的字节数。如果不在debug命令行指定文件,所装入的文件将是最近使用n命令经常指定的文件。使用具有a
38、ddress 参数的1命令如果使用带address 参数的I命令,Debug将从内存位置address 开始加载文件或指定 扇区的内容。使用带全部参数的I命令如果使用带所有参数的I命令,Debug将加载指定磁盘扇区的内容而不是加载文件。加载特定扇区的内容指定范围内的每个扇区均从drive 读取。Debug从start 开始加载,直到在number中指定的扇区数中的内容全部被加载。加载.exe 文件Debug忽略.exe 文件的地址 address 参数。如果指定 .exe 文件,Debug将文件重新定 位到.exe文件的标题中指定的加载地址。在.exe文件被加载到内存前,标题自身从.exe文件
39、脱离,因此磁盘上的.exe 文件大小与内存中的不同。如果要检查整个.exe 文件,请使用不同的扩展名重命名文件。打开十六进制文件Debug将具有.hex 扩展名的文件认为十六进制格式文件。键入不带参数的I命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。如果键入的I命令包含address参数,Debug将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。范例假定启动Debug并键入以下命令:n 现在可以键入I命令以加载F 。 Debug将加载文件并显示 Debug提示符。假定需要从驱动器 C将起始逻辑扇区为15 (OFh)的109 (6Dh)个扇区的内容加载到起始 地址
40、为04BA:0100的内存中。为此,请键入以下命令:IO4ba:1OO 2 0f 6dDebug:M (移动)将一个内存块中的内容复制到另一个内存块中。m range address参数range指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。address指定要将range内容复制到该位置的起始地址。说明 复制操作对现有数据的影响如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。 但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。(覆盖复制操作是指那 些目标数据块部分内容覆盖原数据块部分内容的操作。)执行覆盖复制操作m命令执行目标地址的覆
41、盖复制操作,而不丢失数据。将改写的地址内容首先复制。因此, 如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。范例假定键入以下命令:mcs:100 110 cs:500Debug首先将CS:110地址中的内容复制到地址 CS:510中,然后将CS:10F地址中的内容 复制到CS:50F中,如此操作直至将 CS:100地址中的内容复制到地址 CS:500中。要查看 结果,请使用Debug d (转储)命令,并使用 m命令指定目标地址Debug:N (名称)指定Debug
42、 I (加载)或w (写入)命令的可执行文件的名称,或者指定正在调试的可执行 文件的参数。n drive:path file name要指定测试的可执行文件的参数,请使用以下语法:n file-parameters参数如果在没有参数的情况下使用,则n命令清除当前规范。drive:path file name指定要测试的可执行文件的位置和名称。file-parameters为正在测试的可执行文件指定参数和开关。有关将文件或指定磁盘扇区的内容加载到内存中的信息,请单击“相关主题”列表中的Debug L (加载)。有关写入调试到磁盘的文件的信息,请单击相关主题”列表中的Debug W (写入)。说明
43、n命令的两个用途可以按两种方式使用 n命令。首先,您可以使用它以指定后面的I (加载)或w (写入)命令所使用的文件。如果在没有命名所调试文件的情况下启动Debug,必须在使用I命令加载文件之前使用命令 nfilename 。在CS:5C为文件控制块(FCB)正确编排文件名的格 式。其次,可以使用 n命令指定被调试文件的命令行参数和开关。内存区域以下四个内存区域都会受到n命令的影响:内存位置内容CS:5C文件1的文件控制数据块(FCB)CS:6C文件2的文件控制数据块(FCB)CS:80n命令行的长度(以字符表示)CS:81n命令行字符的开头为n命令指定的第一个文件名被放在CS:5C的FCB中
44、。如果指定第二个文件名,此名称将放置到CS:6C的FCB中。n命令行上键入的字符数(除第一个字符之外,n)存储在位置CS:80。n命令行上的实际字符 (再次,除了字母n之外)存储在以CS:81开头的位置。 注意这些字符可以是在 Win dows 2000命令提示符下键入的命令中有效的任何开关和分隔 符。范例假定已经启动 Debug,并加载了正在调试的程序P。接着您决定为 P 指定两个参数并运行此程序。以下是此范例的命令序列:debug n param1 param2g在这种情况下,Debug g (转向)命令会运行该程序,就好像您已在Windows 2000命令提示符后键入了如下命令:prog
45、 param1 param2所以,测试和调试反映P 通常的运行时间环境。在下面的命令序列中,第一个n命令将File1.exe指定为后接的I (加载)命令的文件,该命令将File1.exe 加载到内存。第二个n命令指定File1.exe将使用的参数。最后,g命令将运行 File1.exe 文件,就好像您在 Windows 2000命令行中键入了 File1 File2.dat File2.dat 一样。n file1.exelnfile2.dat file3.datg不要在n命令的第二种形式后使用I命令。还要注意,如果现在使用w (写入)命令,Windows 2000将使用名称File2.dat
46、保存正在调试的文件 File1.exe。为避免出现此结果,应该总是在I或w命令之前立即使用 n命令的第一种形式。Debug:。(输出)将字节值发送到输出端口。o port byte-value参数port通过地址指定输出端口。端口地址可以是16位值。byte-value指定要指向port 的字节值。有关从输入端口读取字节值的信息,请单击“相关主题”列表中的Debug I (输入)。范例要将字节值4Fh发送到地址为2F8h的输出端口,请键入以下命令:o2f8 4fDebug:P (执行)执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。p = address nu mber参
47、数=address指定第一个要执行指令的位置。如果不指定地址,则默认地址是在CS:IP寄存器中指定的当前地址。nu mber指定在将控制返回给 Debug之前要执行的指令数。默认值为1。有关运行当前在内存中程序的信息,请单击相关主题”列表中的Debug G (转向)。有关执行指令的信息,请单击“相关主题”列表中的Debug T (跟踪)。说明控制传送到要测试的程序当p命令将控制从Debug传送到要测试的程序时,该程序不间断运行,直到循环、重复字 符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到 Debug。地址参数的限制如果address参数没
48、有指定段,Debug将使用被测试程序的CS寄存器。如果省略address,程序将从CS:IP寄存器所指定的地址开始执行。必须在 address 参数之前使用 等号(=)以便将它与number参数区分。如果在指定地址处的指令不是循环、重复的字符 串指令、软件中断或子例程,则p命令与Debug t (跟踪)命令的作用相同。使用p命令显示的邮件当p执行完一段说明后,Debug显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。警告不能使用p命令跟踪只读内存(ROM)。范例假定正在测试的程序在地址CS:143F处包含一个call 指令。要运行call 目标位置的子程序然后将控制返回
49、到Debug,请键入以下命令:p=143fDebug按以下格式显示结果:AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC2246:1442 7505 JNZ 144ADebug:Q (退出)停止Debug会话,不保存当前测试的文件。当您键入q以后,控制返回到 Windows 2000的命令提示符。参数Debug W (写入)。该命令不带参数。有关保存文件的信息,请单击“相关主题”列表中的Deb
50、ug:R (寄存器)显示或改变一个或多个 CPU寄存器的内容。r register- name参数无如果在没有参数的情况下使用,则r命令显示所有寄存器的内容以及寄存器存储区域中的标志。register- name指定要显示其内容的寄存器名。有关显示内存部分内容的信息,请单击“相关主题”列表中的Debug D (转储)。有关反汇编字节的信息,请单击“相关主题”列表中的Debug U (反汇编)。说明使用r命令如果指定了寄存器名称,Windows 2000将显示以十六进制标记表示的寄存器的16位值,并将冒号显示为提示符。如果要更改包含在寄存器中的值,除非键入新值并按ENTER键;否则,请按ENTE
51、R键返回Debug提示符。有效寄存器名以下是 register-name的有效值: ax、bx、ex、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc及f。ip和pe都引用指令指针。如果指定寄存器名称,而不是从前面的列表中指定,Windows 2000将显示以下消息:br error使用f字符而不是寄存器名如果键入f字符代替寄存器名,Debug将每个标记的当前设置显示为两字母代码,然后显 示Debug提示符。要更改标志的设置,请从下表中键入适当的两字母代码:标志名设置清除溢出ovnv方向dn (减)up (增)中断ei (启用) di (禁用)正负ng (负)pl (正)零zr
52、 nz辅助进位acna奇偶校验pe (偶校验)po (奇校验)进位cync可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。要停止r命令,请按ENTER键。任何没有指定新值的标志保持不变。用r命令显示的邮件如果为标记指定了多个值,Debug将显示以下消息:df error如果指定没有在前面的表中列出的标志代码,Debug将显示以下消息:bf error在这两种情况下,Debug将忽略所有在无效项目之后指定的设置。Debug的默认设置在启动Debug时,会将段寄存器设置到空闲内存的低端,指令指针设置为0100h,清除所有标志,并且将其余寄存器设置为零,除了被设置为FFEEh的sp之外。D
53、ebug:R范例要查看所有寄存器的内容、所有标记的状态和当前位置的指令解码表,请键入以下命令:r如果当前位置是CS:11A,显示外观将类似于以下内容:AX=OEOO BX=OOFF CX=0007 DX=01FF SP=039D BP=OOOO SI=005C DI=OOOODS=04BA ES=04BA SS=04BA CS=04BA IP=011A NV UP DI NG NZ AC PE NC04BA:011A CD21 INT 21要只查看标志的状态,请键入以下命令:rfDebug按以下格式显示信息:NV UP DI NG NZ AC PE NC - _现在,您可以按任意顺序键入一个或
54、多个有效的标志值,其中可以有或没有空格,如下所示:nv up di ng nz ac pe nc - pleicyDebug结束r命令并显示Debug提示符。要查看更改,请键入r或rf 命令。Debug将显示以下内容:NV UP EI PL NZ AC PE CY - _按ENTER返回到 Debug提示符。Debug:S (搜索)在某个地址范围搜索一个或多个字节值的模式。s range list参数range指定要搜索范围的开始和结束地址。有关ran ge参数有效值的信息,请单击“相关主题”列表中的 Debug。list指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号分隔每个字节值
55、和下一个字节值。将字符串值包括在引号中。说明如果list参数包含多个字节值,Debug将只显示出现字节值的第一个地址。如果list 只包含一个字节值,Debug将显示指定范围内出现该值的所有地址。范例假定需要查找包含值 41并且范围从CS:100到CS:110的所有地址。为此,请键入以下命 令:scs:100 110 41Debug按以下格式显示结果:04BA:010404BA:010D以下命令在 CS:100到CS:1A0的范围内搜索字符串“ Ph”。scs:100 1a0 PhDebug:U (反汇编)反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码看起来象已汇编文件 的列表
56、。u range参数无u命令分解20h字节(默认值),从前面 u命令所显如果在没有参数的情况下使用,则 示地址后的第一个地址开始。rangeran ge 参数有效值的指定要反汇编代码的起始地址和结束地址,或起始地址和长度。有关有关集成记忆码的信息,请单击相关主题”列表中的Debug A (汇编)。有关显示内存部分内容的信息,请单击相关主题”列表中的Debug D (转储)。范例要反汇编16 (10h) 字节,从地址04BA:0100开始,请键入以下命令:uO4ba:1OOI1ODebug按以下格式显示结果:04BA:0100 206472 AND SI+72,AH04BA:0103 69 DB
57、 6904BA:0104 7665 JBE 016B04BA:0106 207370 AND BP+DI+70,DH04BA:0109 65 DB 6504BA:010A 63 DB 6304BA:010B 69 DB 6904BA:010C 66 DB 6604BA:010D 69 DB 6904BA:010E 63 DB 6304BA:010F 61 DB 61如果只显示从04BA:0100到04BA:0108特定地址的信息,请键入以下命令:u04ba:0100 0108Debug显示以下内容: 04BA:0100 206472 AND SI+72,AH04BA:0103 69 DB 69
58、04BA:0104 7665 JBE 016B04BA:0106 207370 AND BP+DI+70,DHDebug:W (写入)将文件或特定分区写入磁盘。要将在BX:CX寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:w address要略过 Windows 2000文件系统并直接写入特定的扇区,请使用以下语法:w address drive start nu mber参数address指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定address ,Debug程序将从CS:100开始。关于address参数有效值的信息,请在相关主题”列表中单击Debug。drive指
59、定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C, 等等。start指定要写入第一个扇区的十六进制数。nu mber指定要写入的扇区数。有关指定用于w命令的文件的信息,请单击相关主题”列表中的Debug N (名称)。有关将文件或文件扇区内容加载到内存中的信息,请单击“相关主题”列表中的Debug L(加载)。说明必须在启动Debug时或者在最近的 Debug n (名称)命令中指定磁盘文件的名字。这两种方法都可以将地址 CS:5C处文件控制块的文件名正确地编排格式。在使用不带参数的 w命令之前重新设置 BX:CX如果使用了 Debug g (转向)、t (跟踪)、p
60、 (执行)或r (寄存器)命令,必须在使用无 参数的w命令之前,将 BX:CX寄存器复位。将修改后的文件写入磁盘如果修改文件但不更改文件名、长度或起始地址,Debug仍然可以正确地将文件写入源磁盘位置。w命令的限制不能用该命令写入.exe或.hex文件。警告因为略过 Windows 2000文件句柄,所以写入特定的分区非常危险。如果键入错误的值,则磁盘文件结构很容易被损坏。范例假定要将起始地址为 CS:100的内存内容写入到驱动器B的磁盘中。需要将数据从磁盘的逻辑扇区号37h开始并持续2Bh个扇区。为此,键入以下命令:wcs:100 1 37 2b当写操作完成时,Debug再次显示Debug提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腹膜炎的护理沟通技巧
- 年轻人愿为精力管理付费困了解忧累了回血焦虑了安神方法指南
- 定期护理培训的核心要点
- 数据管理过程中的系统化处理指南
- 骨科护理中的护理沟通新技巧
- 2024-2025学年度三支一扶考前冲刺试卷及参考答案详解【培优A卷】
- 2024-2025学年度收银审核员考试历年机考真题集带答案详解(典型题)
- 2024-2025学年度电梯考试全真模拟模拟题含答案详解【新】
- 业务领域诚信承诺书(5篇)
- 2024-2025学年度医院三基考试试卷带答案详解(研优卷)
- 技术规范书柴油发电机组
- 2023学年完整公开课版激光焊接
- 2015-2022年江苏农林职业技术学院高职单招语文/数学/英语笔试参考题库含答案解析
- GB/T 25389.2-2010风力发电机组低速永磁同步发电机第2部分:试验方法
- GB/T 19092-2003煤粉浮沉试验方法
- 古诗词诵读《江城子 乙卯正月二十日夜记梦》课件(19张PPT)
- 家庭教育重要性课件设计
- 公共关系的产生及其发展课件
- 《建筑环境与能源应用工程专业概论》配套教学课件
- SQL英文版教学课件:1-Introduction
- DB13∕T 5188-2020 地下管道非开挖铺设工程水平定向钻施工技术规程
评论
0/150
提交评论