DOS 的概况:DOS(Disk Operating System)是一个使用得十分广泛的磁盘操作系统,就连眼下流行的Windows9x/ME系统都是以它为基础。
常见的DOS有两种:IBM公司的PC-DOS和微软公司的MS-DOS,它们的功能、命令用途格式都相同,我们常用的是MS-DOS。
自从DOS在1981年问世以来,版本就不断更新,从最初的DOS1.0升级到了最新的DOS8.0(Windows ME系统),纯DOS 的最高版本为DOS6.22,这以后的新版本DOS都是由Windows系统所提供的,并不单独存在。下面的讲解所使用的DOS为Windows98 4.10.2222A的DOS7.0系统。
DOS的基础知识
1)DOS的组成
DOS分为核心启动程序和命令程序两个部分。
DOS的核心启动程序有Boot系统引导程序、IO.SYS、MSDOS.SYS和COMMAND.COM。它们是构成DOS系统最基础的几个部分,有了它们系统就可以启动。
但光有启动程序还不行,DOS作为一个字符型的操作系统,一般的操作都是通过命令来完成。DOS命令分为内部命令和外部命令。内部命令是一些常用而所占空间不大的命令程序,如dir、cd等,它们存在于COMMAND.COM文件中,会在系统启动时加载到内存中,以方便调用。而其它的一些外部命令则以单独的可执行文件存在,在使用时才被调入内存。
(小知识:可执行的程序文件有*.COM和*.EXE两种,一般来讲,*.EXE文件为软件执行程序,而*.COM文件则为命令程序)
2)DOS的系统提示符
DOS启动后,会显示“C:〉“以及一个闪动的光标,这及是DOS的系统提示符,它表示了当前所在的盘符和目录,我们可以输入“[盘符] :“来进行转换,如“A:“、“E:“。这里要注意输入的盘符一定要是存在的。
(小知识:盘符从A到Z,通常A、B盘为软驱,硬盘的盘符从C开始,而光驱的盘符为最后一个)
3)文件及目录
电脑中的数据主要都是以文件形式存储的,也可以说DOS以文件的形式来管理数据。
文件是相关数据的集合,若干数据聚集在一起组成一个文件。每个文件都有文件名,文件名由主文件名和后缀名两部分组成,中间有小圆点隔开。DOS6.22及其以前版本最多仅支持8个字符的主文件名和3个字符的后缀名,而从Windows 95的DOS7.0开始就可支持128个字符的主文件名和后缀名。字母、汉字、数字和一些特殊符号如“!、@、#“都可以作为文件名,但不能有“/、\、|、:、?“等符号。
通常我们可以通过文件的后缀名看出该文件的类型,比如:
EXE 可执行程序文件
COM 可执行命令文件
BAT 可执行批处理文件
TXT 文本文件
DAT 数据文件
BAK 备份文件
为了方便用户进行操作,DOS还允许使用通配符。所谓通配符,就是“?“与“*“这两个符号,它们可以用来代替文件名中的某些字符。“?“代表一个合法的字符或空字符,比如“AB?D.EXE“文件就可以表示“ABCD.EXE“、“ABDD.EXE“、“ABZD.EXE“等。
而“*“则代表若干个字符,如“*.BAT“就代表当前目录下所有后缀名为“BAT“的文件。
DOS以目录树的形式管理磁盘,这里的目录就相当于Windows中的文件夹。和文件夹一样,目录也是一层一层的,构成一个树的形式。在一个盘符中最底层的目录为根目录,根目录下的目录都称为它的子目录,根目录用“\“表示,一个目录的上一层目录用“..“表示。我们可以通过路径来查找某一个文件或目录,路径就如同地址一样,可以使用户方便、准确地进行查找。比如“C:\Windows\Command\deltree.exe“就是一个文件的路径。
在同一个目录下,不允许存在相同名称的文件或目录。DOS的内部命令是进行操作的基础,完成了对它们的学习你就跨进了DOS系统的大门。
1)DIR--显示指定路径上所有文件或目录的信息
它的格式为“DIR [盘符:][路径][文件名] [参数]“,比如“DIR E:\FF.M3U“。输入后回车则会显示出相关信息。另外它还有几个参数:
/W:宽屏显示,一排显示5个文件名,而不会显示修改时间,文件大小等信息;
/P:分页显示,当屏幕无法将信息完成显示时,可使用其进行分页显示;
/A:显示具有特殊属性的文件,这里的属性有“H“隐藏、“R“只读等,我们可以输入“DIR *.* /AH“来显示当前目录下所有具有隐藏属性的文件;
/S:显示当前目录及其子目录下所有的文件,通过这个参数,我们可以进行某个文件或目录的查找,比如我们可以在“C:〉“后输入“DIR *.DAT /S“来查找C盘中所有后缀名为DAT的文件。
几种参数可以同时使用,例如“DIR *.COM /W /P /S“。
2)MD--建立目录
它的格式为“MD [盘符][路径]“,例如“MD TEMP“。
注意:该命令一次只能建立一个目录。
3)RD--删除目录
格式为“RD [盘符][路径]“。
注意:该命令只能删除空目录,并且不能删除当前目录。
4)CD--进入指定目录
格式为“ CD [路径]“,例如“CD HAPPY“。
注意:只能进入当前盘符中的目录。其中“CD\“为回到根目录,“CD..“为回到上一层目录。
5)COPY--拷贝文件
格式为“COPY [源目录或文件] [目的目录或文件]“,比如“COPY C:\*.COM D:\“,我们也可以输入“COPY C:\Command.COM D:\Command.BAK“来进行文件拷贝并改名。
注意:使用该命令进行文件拷贝时,目的目录一定要存在。
6)DEL--删除文件
格式为“DEL [盘符][路径][文件名] [参数]“,比如“DEL C:\DATA\*.BAK“。它有一个参数:“/P“,可以使用户在删除多个文件时对每个文件都显示删除询问。
7)REN--改名
格式为“REN [原名] [现名]“,7.0以后版本的DOS都支持对文件名和目录名的修改,而以前的DOS只能修改文件名。
8)TYPE--显示文本文件
格式为“TYPE [文件名]“,能对文本文件进行查看。
以上就是一些常用的内部命令,除此之外,还有一些内部命令,如“CLS“清屏命令、“TIME“显示或改变当前时间、“DATE“显示或改变当前日期、“VER“显示系统版本号等。使用这些内部命令能够对DOS进行基础的操作,掌握它们是进行复杂操作的前提。
DOS的外部命令就是一些应用程序,能够使用户的操作更加方便和深入。这些外部命令都是以文件的形式存在,Windows系统的DOS外部命令保存在Windwos主目录下的“Command“目录中。下面就让我们来看看常用的一些DOS外部命令。
1)FORMAT(Format.COM)--格式化命令
众所周知,新买的磁盘都必须经过格式化后方能使用,FORMAT命令可以完成对软盘和硬盘的格式化操作,格式为“FORMAT [盘符] [参数]“,例如:“FORMAT A: /S“。它有两个常见的参数:
/Q:进行快速格式化;
/S:完成格式化,并将系统引导文件拷贝到该磁盘。
注意:该命令会清除目的磁盘上的所有数据,一定要小心使用。如果进行了普通的格式化,那磁盘上的数据还有可能恢复,但如果加上了“/Q“,那要恢复就比蹬天还难了。
2)EDIT(Edit.COM)--编辑命令
其实它就是一个文本编辑软件,使用它可以在DOS下方便地对文本文件进行编辑,格式为“EDIT [文件名] [参数]“,它的参数不是特别实用,我在此就不多讲。
3)SYS(Sys.COM)--系统引导文件传输命令
它能够将IO.SYS等几个文件传输到目的磁盘,使其可以引导、启动。格式为“SYS [盘符]“
4)ATTRIB(Attrib.EXE)--文件属性设置命令
通过该命令,我们可以对文件进行属性的查看和更改。格式为“ATTRIB [路径][文件名] [参数]“,如果不加参数则为显示文件属性。它的参数有“+?“和“-?“两种,“?“代表属性代号,这些代号有:“H“隐藏;“S“系统;“R“只读,“+“表示赋予,“-“表示去除。
5)XCOPY(Xcopy.EXE)--拷贝命令
该命令在“COPY“的基础上进行了加强,能够对多个子目录进行拷贝。它的参数比较多,但是最常用的是“/S“,它可以对一个目录下属的多个子目录进行拷贝,另外“/E“可以拷贝空目录。格式为“XCOPY [源路径][源目录/文件名] [目的目录/文件名] [参数]“。
6)SCANDISK(Scandisk.EXE)--磁盘扫描程序
这个命令在实际的操作中有很大的用处,它能对磁盘进行扫描并修复,能够解决大部分的磁盘文件损坏问题。格式为“SCANDISK [盘符:] [参数]“下面是它的几个参数:
/fragment [驱动器名:\路径\文件名]:使用这个参数可以显示文件是否包含有间断的块,我们可以通过运行磁盘整理程序来解决这个问题;
/all:检查并修复所有的本地驱动器;
/autofix:自动修复错误,即在修复时不会出现提示;
/checkonly:仅仅检查磁盘,并不修复错误;
/custom:根据Scandisk.ini文件的内容来运行Scandisk,Scandisk.ini是一个文本文件,它包含了对Scandisk程序的设置,其中的[custom]块是在加上“/custom“参数后才执行的,用户可以根据自己的不同情况来进行不同的设置;
/nosave:在检查出有丢失簇后直接删除,并不转化为文件;
/nosummary:不显示检查概要,完成检查后将直接退出程序;
/surface:在完成初步检查后进行磁盘表面扫描;
/mono:以单色形式运行Scandisk。
我们可以根据不同的情况来加上不同的参数。我们可以执行“scandisk /all /checkonly /nosave /nosummary“来完成对磁盘的检查并且自动退出,另外还可以编辑scandisk.ini文件中设置,再运行“scandisk /custom“。如果被损坏的文件比较多,我们可以使用“/autofix“来进行自动修复,不然会忙死你的。
7)CHKDSK(Chkdsk.EXE)--磁盘检查命令
它会检查磁盘,并会显示一个磁盘状态报告。格式为“CHKDSK [盘符:] [参数]“,最常用的参数是“/F“,可以对文件错误进行修复。
8)MOVE(Move.EXE)--文件移动命令
使用它可以对文件进行移动。格式为“MOVE [源文件] [目的路径]“。同时也可以使用通配符。
9)DELTREE(Deltree.EXE)--删除命令
这可是DEL命令的超级加强版,它不仅可以删除文件,并且会将指定目录和其下的所有文件和子目录一并删掉。使用它,我们可以很方便的对目录进行彻底的删除。格式“DELTREE [文件/路径] [参数]“,参数有一个“/Y“,使用时系统会对每个文件进行询问,回答“Y“后才删除。
10)FDISK(Fdisk.EXE)--分区命令
我们可以使用它对硬盘进行分区操作,我在下一部分会进行具体讲解。
以上就是常用的一些DOS外部命令,使用它们可以使你的操作更方便,同时也是进行系统修复所必不可少的。请大家好好地掌握每一个命令及其用处。
看了前面的文章,相信大家对DOS的基础操作以有了一个较深的印象了吧。但光掌握以上的这些内容是远远不够的,解决电脑问题,最主要的还是能够将学到的死知识转化为自己可以熟练使用的兵器。当然,这也不是一朝一夕就可以达到的,同时也要靠经验的积累。下面就请大家随我一道来看几个实例,从中找出解决问题的关键和主要的思路。
故障事例:
某电脑在使用时突然停电,来电后开启电脑,但Windows系统无法正常启动,死机频繁。
故障分析:
从这个原因,我们可以大致推断:停电造成电脑非法关机而损伤磁盘文件,从而导致Windows系统受到损坏,无法正常运行。
大致操作:
从解决文件损坏这个角度出发,需要修复损坏的文件,如果损坏严重,也可以考虑重装Windows。
具体操作:
1、进入DOS。由于Windows受损,只有在DOS下进行操作。在系统引导、出现“Starting Windows.....“的时候按下“F8“键,然后再选择“Command Prompt Only“即可进入DOS方式。为了使修复速度更快,我们可以运行Windows目录下的“SMARTDRV.EXE“程序,这是一个加速磁盘读取速度的缓存程序。
2、运行SCANDISK程序,必要时可以加上“/autofix“参数,这样在第一次选择后就可让程序自动修复。
3、运行CHKDSK程序,查看是否还存在着问题,并可以使用“/F“进行修复。
4、运行Windows,看系统是否恢复正常。如果在启动时提示注册表出错,可以重新进入DOS,在Windows目录下运行“SCANREG /RESTORE“,然后在列表中选择一个好的注册表文件就行了。
5、如果文件系统受损严重,就需要重新安装Windows。
如果无法正常进入Windows,那需要重新安装Windows的任务又只得在DOS下进行了。对于广大初学者,在DOS下安装Windows还有一定的困难,下面我就具体讲解一下在DOS下的安装。这里的安装使用光盘启动,若使用软盘启动其操作大致相同。
1、在开机进行自检时按下“DEL“键从而进入BIOS设置,在“BIOS FEATURES SETUP“的“Boot Sequence“将“CDROM“一项设置在最前面;按“ESC“键退到主画面,按“F10“键,并输入“Y“,即可存盘退出。
2、在开机前将系统启动盘放入光驱。
3、在启动后的启动菜单中选择“启动并使用光驱(With CDROM)“,大家也可以选择启动后自动运行Windows98的安装程序,但那样并不和我意,安装过程将十分漫长,所以在安装前我们需要运行“SMARTDRV.EXE“。
4、进入DOS后就转到光驱盘符,使用“DIR“命令查看目录,然后进入Windows的安装目录(目录名大都可以见名知意,一般为“Win98“、“Win“、“Windows“等)。
5、运行“SMARTDRV.EXE“。
6、运行“SETUP.EXE“,回车后会进入磁盘扫描,完成后即可进入安装,其操作就和在Windows中安装一样了。
看完了这两个最常见的问题,你是否有所收获?主要大家将基础的东西掌握后,面对问题不慌不乱,仔细思考分析,能从其它的故障中不断总结经验,你也很快会成为一个电脑高手。另外,多帮助他人解决问题也能使你获得更多的锻炼机会,增加自己的知识面,从而可以积累更多、更好的资本。
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:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump
可以将 near 前缀缩写为 ne。
区分字和字节内存位置
当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 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 location 21h
使用伪指令
使用 a 命令提供两个常用的伪指令:db 操作码,将字节值直接汇编到内存,dw 操作码,将字值直接汇编到内存。以下是两个伪指令的范例:
db 1,2,3,4,“THIS IS AN EXAMPLE“
db ’’’’THIS IS A QUOTATION MARK:“’’’’
db “THIS IS A QUOTATION MARK:’’’’“
dw 1000,2000,3000,“BACH“
范例
a 命令支持所有形式的间接注册命令,如下例所示:
add bx,34[bp+2].[si-1]
pop [bp+di]
push [si] )
还支持所有操作码同义词,如下例所示:
loopz 100
loope 100
ja 200
jnbe 200
对于 8087 操作码,必须指定 wait 或 fwait 前缀,如下例所示:
fwait fadd st,st(3) ; this line assembles
; an fwait prefix
Debug:C(比较) FF
比较内存的两个部分。
c range address
参数
range
指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。
address
指定要比较的第二个内存区域的起始地址。有关有效 address 值的信息,请参看“Debug 说明”。
说明
如果 range 和 address 内存区域相同,Debug 将不显示任何内容而直接返回到 Debug 提示符。如果有差异,Debug 将按如下格式显示:
address1 byte1 byte2 addess2
范例
以下命令具有相同效果:
c100,10f 300
c100l10 300
每个命令都对 100h 到 10Fh 的内存数据块与 300h 到 30Fh 的内存数据块进行比较。
Debug 响应前面的命令并显示如下信息(假定 DS = 197F):
197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F
注意列表中缺少地址 197F:0106 和 197F:0306。这表明那些地址中的值是相同的。
Debug:D(转储)
显示一定范围内存地址的内容。
d [range]
参数
range
指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。
有关显示寄存器内容的信息,请参看Debug R(寄存器)。
说明
当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示 16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。
范例
假定键入以下命令:
dcs:100 10f
Debug 按以下格式显示范围中的内容:
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:100 l 20
如果键入以下命令,Debug 将显示范围从 CS 段的 100h 到 115h 中所有字节的内容:
dcs:100 115
Debug:E(键入)
将数据输入到内存中指定的地址。
可以按十六进制或 ASCII 格式键入数据。以前存储在指定位置的任何数据全部丢失。
e address [list]
参数
address
指定输入数据的第一个内存位置。
list
指定要输入到内存的连续字节中的数据。
有关集成记忆码的信息,请参看Debug A(汇编)。
有关显示内存部分内容的信息,请参看Debug D (转储)。
说明
使用 address 参数
如果在没有指定可选的 list 参数的值情况下指定 address 的值,Debug 将显示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一:
替换字节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则 Debug 不会回显无效或额外的字符。
进入下一个字节。为此,请按 SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键入新值。如果按 SPACEBAR(空格键)时,移动超过了 8 位界限,Debug 程序将显示新的一行并在行首显示新地址。
返回到前一个字节。为此,请按 HYPHEN 键 (-)。可以反复按 HYPHEN 键 (-) 向后移动超过多个字节。在按 HYPHEN 时,Debug 开始新行并显示当前地址和字节值。
停止执行 e 命令。为此,请按 ENTER 键。在任何字节位置都可以按 ENTER。
使用 list 参数
如果指定 list 参数的值,随后的 e 命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。
List 值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。
范例
假定键入以下命令:
ecs:100
Debug 按下面的格式显示第一个字节的内容:
04BA:0100 EB.
要将该值更改为 41,请在插入点键入 41,如下所示:
04BA:0100 EB.41_
可以用一个 e 命令键入连续的字节值。在键入新值后按 SPACEBAR(空格键),而不是按 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:0101 10.6f_
按 ENTER 停止 e 命令并返回到 Debug 提示符下。
以下是字符串项的范例:
eds:100 “This is the text example“
该字符串将从 DS:100 开始填充 24 个字节
Debug:F(填充)
使用指定的值填充指定内存区域中的地址。
可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。
f range list
参数
range
指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效的 range 值的信息,请参看“Debug 说明”。
list
指定要输入的数据。List 可以由十六进制数或引号包括起来的字符串组成。
说明
使用 range 参数
如果 range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指派值,直到 range 中的所有字节全部填充。
如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止 f 命令。
使用 list 参数
如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。
范例
假定键入以下命令:
f04ba:100l100 42 45 52 54 41
作为响应,Debug 使用指定的值填充从 04BA:100 到 04BA:1FF 的内存位置。Debug 重复这五个值直到 100h 个字节全部填满为止。
Debug:G(转向)
运行当前在内存中的程序。
g [=address] [breakpoints]
参数
=address
指定当前在内存中要开始执行的程序地址。如果不指定 address,Windows 2000 将从 CS:IP 寄存器中的当前地址开始执行程序。
breakpoints
指定可以设置为 g 命令的部分的 1 到 10 个临时断点。
有关执行循环、重复的字符串指令、软件中断或子程序的信息,请参看Debug P(执行)。
有关执行指令的信息,请参看Debug T(跟踪)
Debug:H(十六进制)
对指定的两个参数执行十六进制运算。
h value1 value2
参数
value1
代表从 0 到 FFFFh 范围内的任何十六进制数字。
value2
代表从 0 到 FFFFh 范围内第二个十六进制数字。
说明
Debug 首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。
范例
假定键入以下命令:
h19f 10a
Debug 执行运算并显示以下结果。
02A9 0095
Debug:I(输入)
从指定的端口读取并显示一个字节值。
i port
参数
port
按地址指定输入端口。地址可以是 16 位的值。
有关将字节值发送到输出端口的信息,请参看Debug O(输出)。
范例
假定键入以下命令:
i2f8
同时假定端口的字节值是 42h。Debug 读取该字节,并将其值显示如下:
42
Debug:L(加载)
将某个文件或特定磁盘扇区的内容加载到内存。
要从磁盘文件加载 BX:CX 寄存器中指定的字节数内容,请使用以下语法:
l [address]
要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法:
l address drive start number
参数
address
指定要在其中加载文件或扇区内容的内存位置。如果不指定 address,Debug 将使用 CS 寄存器中的当前地址。
drive
指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C 等。
start
指定要加载其内容的第一个扇区的十六进制数。
number
指定要加载其内容的连续扇区的十六进制数。只有要加载特定扇区的内容而不是加载 debug 命令行或最近的 Debug n(名称)命令中指定的文件时,才能使用 drive、start 和 number 参数。
有关指定用于 l 命令的文件的信息,请参看Debug n(名称)。
有关写入调试到磁盘的文件的信息,请参看Debug w(写入)。
注意
使用不带参数的 l 命令
当使用不带参数的 l 命令时,在 debug 命令行上指定的文件将加载到内存中,从地址 CS:100 开始。Debug 同时将 BX 和 CX 寄存器设置为加载的字节数。如果不在 debug 命令行指定文件,所装入的文件将是最近使用 n 命令经常指定的文件。
使用具有 address 参数的 1 命令
如果使用带 address 参数的 l 命令,Debug 将从内存位置 address 开始加载文件或指定扇区的内容。
使用带全部参数的 l 命令
如果使用带所有参数的 l 命令,Debug 将加载指定磁盘扇区的内容而不是加载文件。
加载特定扇区的内容
指定范围内的每个扇区均从 drive 读取。Debug 从 start 开始加载,直到在 number 中指定的扇区数中的内容全部被加载。
加载 .exe 文件
Debug 忽略 .exe 文件的地址 address 参数。如果指定 .exe 文件,Debug 将文件重新定位到 .exe 文件的标题中指定的加载地址。在 .exe 文件被加载到内存前,标题自身从 .exe 文件脱离,因此磁盘上的 .exe 文件大小与内存中的不同。如果要检查整个 .exe 文件,请使用不同的扩展名重命名文件。
打开十六进制文件
Debug 将具有 .hex 扩展名的文件认为十六进制格式文件。键入不带参数的 l 命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。如果键入的 l 命令包含 address 参数,Debug 将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。
范例
假定启动 Debug 并键入以下命令:
nfile.com
现在可以键入 l 命令以加载 File.com。Debug 将加载文件并显示 Debug 提示符。
假定需要从驱动器 C 将起始逻辑扇区为 15 (0Fh) 的 109 (6Dh) 个扇区的内容加载到起始地址为 04BA:0100 的内存中。为此,请键入以下命令:
l04ba:100 2 0f 6d
Debug:M(移动)
将一个内存块中的内容复制到另一个内存块中。
m range address
参数
range
指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。
address
指定要将 range 内容复制到该位置的起始地址。
说明
复制操作对现有数据的影响
如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操作。)
执行覆盖复制操作
m 命令执行目标地址的覆盖复制操作,而不丢失数据。将改写的地址内容首先复制。因此,如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。
范例
假定键入以下命令:
mcs:100 110 cs:500
Debug 首先将 CS:110 地址中的内容复制到地址 CS:510 中,然后将 CS:10F 地址中的内容复制到 CS:50F 中,如此操作直至将 CS:100 地址中的内容复制到地址 CS:500 中。