Masm编译与调试过程_第1页
Masm编译与调试过程_第2页
Masm编译与调试过程_第3页
Masm编译与调试过程_第4页
Masm编译与调试过程_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编语言与命令行动态调试程序DEBUG 使用汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。汇编程序可使用小汇编程序(ASM )也可以使用宏汇编程序(MASM ),由于宏汇编程序不但代替ASM ,而且可以汇编具有宏定义的汇编程序,因此在汇编程序时一般都使用宏汇编程序(MASM )。一、汇编程序MASM 与链接程序LINK1. 运行汇编程序必备的条件运行汇编程序必备的软件环境:DOS 操作系统;汇编系统。汇编系统盘应包含如下文件:MASM 宏汇编程序文件LISK 连接程序文件CRFF 索引程序文件(也可不用)EDIT 文本编辑程序(或PE 等文本编辑程序)用户通过屏幕编辑程序键

2、入源程序,检查无误,可将源程序存到汇编系统盘上,该程序的扩展名为ASM 。2. 编写汇编源程序用汇编语言编写的源程序必须是一个完整的源程序,才能经过宏汇编程序MASM 的汇编,生成一个目标程序。为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。1)源程序的书写格式当CPU 访问内存时,是把存储器分成若干个段,通过4个段寄存器中存放的地址对内存储器访问,因此在编源程序时必须按段的结构来编制程序。由于每个段的物理空间为64KB ,所以程序中各段可以分别为一个或几个。源程序的书写一般有如下形式:逻辑堆栈段 堆栈段名 S

3、EGMENT STACK用变量定义预置的堆栈空间堆栈段名 ENDS逻辑数据段 数据段名 SEGMENT用变量定义预置的数据空间数据段名 ENDS逻辑代码段 代码段名 SEGMENTASSUME 定义各段寻址关系过程名 PROC 程序过程名 ENDP代码段名 ENDSEND 过程名或起始标号在源程序中最少要有一个代码段,数据段根据需要可有可无,也可以增设附加段。对于堆栈段也可以根据需要可有可无,但在连接(LINK )时计算机将显示警告性的错误:Warning :N STACK segmentThere was 1 error detected.在程序中如果没有用到堆栈时,该错误提示不影响程序的运

4、行,如果程序中用到堆栈时必须设置堆栈段。其中:SEGMENT 、ASSUME 、PROC ENDP 为伪指令,伪指令是发给汇编程序ASM 的,而不和微处理器打交道,在汇编时不产生目标代码,只是把源程序中各段的设置情况告诉汇编程序。2)段寄存器的段地址的装入Assume 伪指令语句只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入相应的段寄存器中,段寄存器的段地址的装入是在程序中完成的。(1)DS 、ES 、SS 的装入由于段寄存器不能用立即数寻址方式直接传送,所以段地址装入可通过通用寄存器传送给段寄存器。MOV AX,逻辑段名MOV 段寄存器,AX其中逻辑段名为程序中定义各逻辑段的名字

5、,(不包括代码段),段寄存器是指与各逻辑段相对应的各段寄存器(DS 、ES 、SS )。(2)CS 的装入代码段寄存器是装当前执行目标代码的段地址,IP 是提供下一条要执行的目标代码的偏移量,为了保证程序的正确执行,CS 和IP 装入新值时是一起完成的。对CS 和IP 的装入有如下几种情况:根据用户程序中的伪指令END 后的标号为CS 和IP 提供代码段的段地址和目标代码的偏移地址。在程序运行过程中,当执行某些指令和操作时,CPU 自动修改CS 和IP 的值,使它们指向新的代码段。3)程序中的数据与变量在汇编源程序中的数据除了立即数,由指令产生的数和通过键盘输入的数以外,还胡大量的数据是通过伪

6、指令语句进行预置和分配的,也就是在某逻辑段中(除代码段),将所需的数据以某种形式存放起来,在程序中可任意调用。在数据定义的同时还可以定义变量,将变量与数据结合在一起。可以为某个变量分配存储空间以便在程序执行过程中存放中间结果和最终结果,使用起来极为方便。()变量与数据的定义变量与数据的定义可以通过符号定义伪指令EQU 、和数据定义伪指令DB 或DW 或DD 来实现。EQU 和可以出现在程序的逻辑段内也可出现在逻辑段外。()汇编程序中数据的提供方法用数据定义伪指令提供数据如果程序要求原始数据为一批数据时,用数据定义伪指令DB 、DW 和DD 来提供较为方便。用立即数的形式提供数据当原始数据只有几

7、个时,一般用立即数的方法来提供。当然,用立即数的方法只是将一个数据传送到通用寄存器中,它只是通过通用寄存器传送数据。用编程的方法提供数据假如原始数据是一组有规律的数据项,则用编程序的方法形成这一组数据,不用专门为这组数据分配存储单元,节省了存储空间。用键盘提供数据当原始数据为任意数据时,一般用键盘输入方法,调用DOS 21H中断。()数据的输出方式在显示器上显示一个字符调用02H 号功能调用号,发21H 号中断,将要显示的字符的ASCII 码送入DL ,就可在显示器上显示该字符。在打印机上输出一个字符调用05H 号功能调用号,发21H 号中断,将要打印字符的ASCII 码送入DL ,就可在打印

8、机上打印出DL 中的字符。) 返回DOS 状态的方法当执行.EXE 文件时,是在DOS 状态下进行的,如果希望在执行完.EXE 文件后正常返回DOS 状态,一般用如下两种方法:采用DOS 4CH 功能调用和采用返回(RET )断点的方法。3. 执行宏汇编程序将汇编语言源程序用宏汇编程序翻译(汇编)后,可以形成三个文件:一个是扩展名为.OBJ 的目标文件,在该文件中,将源程序的操作码部分变为机器码,但地址操作数是可浮动的相对地址,而不是实际地址,因此需经LINK 连接文件进行连接才能形成可执行文件。第二个文件是列表文件,扩展名为.LST ,它把源程序和目标程序列表,以供检查程序用。第三个文件是交

9、叉索引文件,扩展名为.CRF ,它是一个对源程序所用的各种符号进行前后对照的文件。其中目标文件是必须产生的,而其它两个文件在需要时给予命令就可产生,对连接和执行汇编程序无直接的关系。1)汇编过程在DOS 状态下,键入MASM 则调入宏汇编程序,屏幕显示与操作如下:Microsoft (R ) Macro Assemble Version 5.00Copyright (C ) Microsoft Corp 1981-1985,1987,All right reserved.50678410090 Bytes symbol space free0 Warning Errors0 Severe Er

10、rors其中划线部分为用户键入部分,MYFILE 为源程序名(MYFILE.ASM ),方括号中是机器规定的默认文件名,如果用户认为方括号内的文件名就是要键入的文件名,则可只在划线部分键入回车符。如果不想要列表文件和交叉索引文件,则可在NUL.LST 和NUL.CRF后不键入文件名只键入回车符。当回答完上述四个询问后,汇编程序就对源程序进行汇编。在汇编过程中,如果发现源程序中有语法错误,则提示出错信息,指出是什么性质的错误,错误类型,最后列出错误的总数。之后可重新进入屏幕编辑状态,调入源程序(MYFILE.ASM )进行修改,修改完毕,再进行汇编,直到汇编通过为止。如果在汇编时不需要产生列表文

11、件(.LST )和交叉索引文件(.CRF ),调用汇编程序时可用分号结束。如果需要产生.OBJ 和.LST 文件,不需要.CRF 文件,则在分号前面加两个逗号即可。 如果4个文件都需要,用简便的操作方法是在分号前用了3个逗号。2)列表文件(.LST )列表文件(.LST )是通过汇编程序(MASM )产生的,可以在DOS 状态下用TYPE 命令显示或打印该文件,以便分析调试源程序。如显示D 盘上已存在的列表文件MYFILE.LST 操作方法如下:列表程序由三部分组成:(1)源程序和目标程序清单列表程序同时列出源程序和对应的机器语言清单。列表程序的第一列给出每条指令所在行号;第二列给出从段的首地

12、址开始的每条指令存放的偏移地址;接着是数字列,给出对应每条语句的机器码和对应于存放在栈段和数据段的值,在机器码加上“R ”的指令表示:这条指令在连接时可能产生与列出来的偏移地址不同的地址,因为这些偏移地址可能与其它模块有关;最右边就是用汇编语言编写的源程序。(2)段信息汇总表在段信息汇总表中列出该程序用了哪几个段,如:代码段CODE 、数据段DATA 和堆栈段STACK ;每个段所占存储空间的长度(字节数);每个段的定位类型,包括PAGE (页)、PARA (节)、WORD (字)和BYTE (字节),它们表示此段的起始边界要求,即起始边界地址应分别可以被256、16、2和1 除尽。该列表清单

13、 中是以PARA 为CODE 段、DATA 段和STACK 段的起始边界地址。最后一列为段的组合类型;段的组合类型是告诉连接程序,本段与其它段的关系,组合类型有NONE 、PUBLIC 、COMMOM 、AT 表达式、STACK 和MEMORY 。NONE :表示本段与其它段不发生逻辑关系,即每段都有自己的基本地址。是隐含组合类型。STACK :表明连接程序首先要把本段与同名同类别的其它段相邻地连接在一起,然后为所有定义为栈段的连接在一起的段,定义一个共同的段基地址,即连接成一个物理段。在列表程序的源程序中只有一个栈段,在栈段定义中给出了组合类型为STACK ,因此在段信息汇总表中列出了该项,

14、在本程序中它没有任何意义,因为没有其它栈段与它连接,只是为了说明这个问题而设置的。(3)符号汇总表在列表程序中最后部分列出了符号汇总,是指在源程序中用户定义的符号名、类型、值和所在段。如果在源程序中存在某些语法错误时,列表文件可提示某条语句有哪些错误,出错提示显示在出错指令行的下面,因此用户可借助列表文件很快地找到错误行,以便调试。另外由于列表文件给出了各条指令的偏移地址,对和程序时设置断点很方便。3)交叉索引文件(. CRF )汇编后产生的交叉索引文件,扩展名为. CRF, 它列出了源程序中定义的符号(包括:标号、变量等)和程序中引用这些符号的情况。如果要查看这个符号表,必须使用CREF .

15、 EXE 的文件,它根据. CRF 文件建立一个扩展名为. REF 的文件,而后再用DOS 的TYPE 命令显示,就可以看到这个符号使用情况表。具体操作方法如下:cref filename .CRF: list filename MYFILE.REF4. 执行连接程序用汇编语言编写的源程序经过汇编程序(MASM )汇编后产生了目标程序(.OBJ ),该文件是将源程序操作码部分变成了机器码,但地址是可浮动的相对地址(逻辑地址),因此必须经过连接程序LINK 连接后才能运行。连接程序LINK 是把一个或多个独立的目标程序模块装配成一个可重定位的可执行文件,扩展名为.EXE 文件。此外还可以产生一个

16、内存映象文件,扩展名为.MAP 。1)连接程序执行过程在DOS 状态下,键入LINK (或LINK MYFILE)则系统调入LINK 程序,屏幕显示操作如下:IBM Personal Computer LinkerVersion 2.00(C )Copyright IBM Corp 1981,1982,1983Object Modules .OBJ:Run File MYFILE.EXE:List File NUL.MAP:Libraries .LIB:其中划线部分为用户键入部分,MYFILE 为源程序名,方括号内为机器默认文件名,当用户认为方括号中的文件名就是要键入的文件名时,可在冒号后面只

17、键入回车。其中MAP 文件是否需要建立,由用户决定,需要则键入文件名,不需要则直接送入一个回车键。最后一个询问是问是否在连接时用到库文件,对于连接汇编语言源程序的目标文件,通常是不需要的,因此直接键入回车键。与汇编程序一样,可以在连接时用分号结束后续询问。例如:IBM Personal Computer LinkerVersion 2.00(C )Copyright IBM Corp 1981,1982,1983连接后只产生MYFILE.EXE 文件。如果除MYFILE.EXE 文件外还要产生MYFILE.MAP 文件,则在分号前加两个逗号。IBM Personal Computer Link

18、erVersion 2.00(C )Copyright IBM Corp 1981,1982,19832)内存映象文件(.MAP )由连接程序LINK 产生的扩展名为.MAP 文件,它实际上是连接程序的列表文件,它给出了每个段的地址分配情况及长度。在DOS 状态下,用TYPE 命令显示打印出来。例如:Start Stop Length Name Class00000H 0000FH 0010H DATA00010H 0004FH 0040H STACK00050H 0005FH 0010H CODEOrigin GroupProgram entry point at 0005:0000从中可以

19、看到,源程序MYFILE 中定义了三个段:数据段(DATA )起始地址为00000H ,终止地址为0000FH ,长度为0010H 个字节;堆栈段(STACK )起始地址为00010H ,终止地址为0004FH ,长度为0040H 个字节;代码段(CODE )起始地址为00050H ,终止地址为0005FH ,长度为0010H 个字节。5. 执行程序当用连接程序LINK 将目标程序(.OBJ )连接定位后,可产生可执行文件(.EXE ),可以在DOS 状态下执行该程序。执行操作如下:或在源程序MYFILE 中如果有显示结果的指令,则在执行程序后可以看到执行结果;在源程序MYFILE 中如果没有

20、显示结果的指令,要想看到结果,只有通过DEBUG 和程序来达到目的。如果经结果没有达到预先设计目的,也是通过DEBUG 来进行调试、运行。因此DEBUG 是汇编语言编程的最有利的调试工具。有关DEBUG 的介绍参阅附录B 。二、动态调试程序DEBUG 使用在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调试,调试程序DEBUG 就是专为汇编语言设计的一种调试工具。它在调试汇编语言程序时有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元内容,并能监视目标程序的执行情况,使用户真正接触到CPU 内部,与计算机产生最紧密的工作联系。1动态和程序DEBUG

21、 的主要特点1)能够在最小环境下运行汇编程序在DOS 状态下运行汇编程序,必须将程序经过MASM 汇编程序,而后还要经过LINK 连接程序产生可执行程序,才能最终运行,比较麻烦。在DEBUG 状态下,为用户提供了调试、控制测试的环境,可以在此环境下进行编程、调试、监督、执行用户编写的汇编程序。因此调试周期短,为用户提供了极大的方便。2)提供极简单的修改手段DEBUG 提供了修改命令,可以修改内存单元内容,修改寄存器的内容,为调试程序、修改程序带来了方便。3)提供用户与计算机内部联系的窗口DEBUG 具有显示命令,它既可以使用户看到某内存单元或某一块单元内容,也可以看到CPU 内部各寄存器的内容

22、。用单步执行命令实现跟踪执行,每执行一步都使用户看到各寄存器的内容的变化,以便分析和调整程序。4)可装入、修改或显示任何文件当然在DEBUG 状态下运行汇编程序也具有一定局限性。在DEBUG 状态下运行的程序不能使用宏汇编程序中的宏指令,大部分伪指令也不能使用,因此只能把程序分段调试。此外,不能调试太长的程序,只能分块进行中程序设计。在DEBUG 状态下调试好的程序不能形成可执行文件(.EXE ),因此调试好的程序只能记下,到编辑环境下重新键入调试好的程序,通过汇编程序(如MASM ),再通过连接程序(LINK )形成可执行文件(.EXE )。2DEBUG 的进入在操作系统(DOS )状态下,

23、直接调入DEBUG 程序,键入命令的格式如下:DDEBUG d:Pathfilename.extParm1Parm2其中的内容为可选项,可以有也可以缺省。d:为驱动器号,指要调入DEBUG 状态的可执行文件在哪个驱动器中,如A:、B:、C:等。Path为路径,指要调入DEBUG 状态的可执行文件是在哪个目录下或子目录下。filename.ext,指要调入DEBUG 状态下的可执行文件的文件名,该文件可以是通过编辑、汇编、连接后产生的可执行文件,也可以是在DEBUG 状态下汇编的程序 段,通过写盘命令W 写入磁盘的文件。Parm1Parm2为任选参数,是给定文件的说明参数。在启动DEBUG 时,

24、如果输入filename (文件名),则DEBUG 程序把指定文件装入内存,用户可以通过DEBUG 的命令对指定文件进行修改、显示或执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令或装入命令把需要的文件装入内存,然后再通过DEBUG 命令进行修改、显示或执行。当启动DEBUG 程序后,屏幕上出现“”,说明系统已进入DEBUG 状态。3DEBUG 的主要命令1)DEBUG 命令的有关规定(1)DEBUG 命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“, ”或空格隔开。(2)DEBUG 命令必须接着按ENTER 键,命令才有效。(3)参数中不论是地址还是数据,

25、均用十六进制数表示,但十六进制数据后面不要用“H ”。(4)可以用Ctrl 和Break 键来停止一个命令的执行,返回到DEBUG 的提示符“”下。(5)用Ctrl Num Lock键中止正在上卷的输出行,再通过按任意键继续输出信息。2)DEBUG 命令(1)汇编命令A格式:a. A 段寄存器名:偏移地址b. A 段地址:偏移地址c. A 偏移地址d. A功能:用该命令可以将汇编语言程序直接汇编进入内存。当键入A 命令后,显示段地址和偏移地址等待用户键入汇编指令,每键入一条汇编指令回车后,自动显示下一条指令的段地址和偏移地址,再键入下一条汇编指令,直到汇编语言程序全部键入,又显示下一地址时可直

26、接键入回车返回到提示符“”为止。其中a 的段地址在段地址寄存器中,因此在使用该命令时必须将段地址寄存器送入段地址,c 的地址在CS 中,d 的段地址在CS 中,偏移地址为100H 。(2)显示内存命令D格式:a. D 地址b. D 地址范围c. D功能:显示指定内存范围的内容。显示的内容为两种形式:一种为十六进制内容,一种为与十六进制相对应的ASCII 码字符,对不可见字符以“”代替。对于a 、c 每次显示128个字节内容,b 显示的字节数由地址范围来决定。若命令中有地址,则显示的内容从指定地址开始,若中中无地址(如c )则从上一个D 命令所显示的最后一个单元的下一个单元开始。若以前没有使用过

27、D 命令,则以DEBUG 初始化的段寄存器的内容为起始段地址,起始偏移地址为100H ,即CS:100。对于a 中的地址为偏移地址,段地址为CS 的内容,对b 中的地址范围,可以指定段地址和起始偏移地址和终止偏移地址。(3)修改存储单元内容命令 E格式:a E 地址 内容表b E 地址功能:a 用命令所给定的内容表去代替指定地址范围的内存单元内容。b 一个单元一个单元地连续修改单元内容。其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。(4)填充内存命令 F格式:F 范围单元内容表功能:将单元内容表中的内容重复装入内存的指定范围内。(5)内存搬家命令 M格式:M 源地址范围目标起始

28、地址其中源地址范围和目的起始地址为偏移地址,段地址为DS 的内容。功能:把源地址范围的内容搬至以目标起始地址开始的存储单元中。(6)比较命令 C格式:C 源地址范围,目标地址其中源地址范围是由起始地址和终止地址指出的一片连续的存储单元,目标地址为与源地址所指单元对比的目标地址起始地址。功能:从源地址范围是由起始的地址单元开始逐个与目标起始地址往后的单元顺序比较每个单元内容,比较到源终止地址为止。比较结果如果一致则不显示任何信息,如果不一致,则以源地址源内容目的内容目的地址的形式显示失败单元地址及内容。(7)搜索指定内容命令 S格式:S 地址范围表功能:在指定地址范围内搜索表中内容,搜索到就显示

29、表中元素所在地址。(8)检查和修改寄存器内容命令 R格式:a Rb R 寄存器名功能:a 显示CPU 内部所有寄存器的内容和全部标志位的状态。b 显示和修改一个指定寄定器的内容和标志位的状态。其中对状态标志寄存器FLAG 以位的形式显示,显示时,8个状态标志的显示次序和符号如表B 1所示。 表B 1 状态标志显示形式标 志 位状 态 显示形式(置位/复位) 溢出标志OF有/无 OV/NV 方向标志DF增/减 DN/UP 中断标志IF开/关 EI/DI 符号标志SF负/正 NG/PL 零标志ZF零/非 ZR/NZ 辅助进位AF有/无 AC/NA 奇偶标志PF偶/奇 PE/PO 进位标志CF 有/

30、无 CY/NC(9)跟踪与显示命令 T格式:a T地址或 T 地址b T地址条数或 T 地址条数功能:a 执行一条指定地址处的指令,停下来,显示CPU 所有寄存器内容和全部标志位的状态,以及下一条指令的地址和内容。b 为多条跟踪命令,从指定地址开始;若命令中用地址给定了起始地址,则从起始地址开始,若未给定,则从当前地址(CS:IP)开始,执行命令中的条数决定一共跟踪几条指令后返回DEBUG 状态。(10)反汇编命令 U格式:a U 地址b U 地址范围功能:将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和机器。若在命令中没有指定地址则以上一个U 命令的最后一条指令地址的下

31、一个单元作为起始地址;若没有输入过U 命令,则以DEBUG 初始化段寄存器的值作为段地址,以0100H 作为偏移地址。(11命名命令 N格式: N 文件名功能:在调用DEBUG 时,没有文件名,则需要用N 命令将要调用的文件名格式化到CS:5CH的文件控制块中,才能用L 命令把它调入内存进行调试(其它形式参考DOS 手册)。(12)读盘命令L格式:a L 地址驱动器号起始扇区号所读扇区个数b L 地址c L功能:a 把指定驱动器和指定扇区范围的内容读到内存的指定区域中。其中地址是读入内存的起始地址,当输入时没有给定地址,则隐含地址为CS:100H。起始扇区号指逻辑扇区号的起始位置。所读扇区个数

32、是指从起始扇区号开始读到内存几个扇区的内容。驱动器号为0或1,0表示A 盘,1表示B 盘。b 读入已在CS:5CH中格式化的文件控制块所指定的文件。在使用该命令前用N 命令命名即可将要读入的文件名格式化到CS:5CH的文件控制块中,其中地址为内存地址。c 同b 地址隐含在CS :100H 中。当读入的文件有扩展名.COM 或.EXE ,则始终装入CS:100H中,命令中指定了地址也没用。其中BX 和CX 中存放所读文件的字节数。(13写盘命令 W格式:a W地址驱动器号起始扇区号所写扇区个数b W地址c W功能:a 把在DEBUGU 状态下调试的程序或数据写入指定的驱动器中, 起始扇区号, 所

33、写扇区个数为要占盘中几个扇区。写盘指定扇区的操作应十分小心,如有差错将会破坏盘上的原有内容。如果在命令行中的地址只包含偏移地址,W 命令认为段地址在CS 中。b 当键入不带参数的写盘命令时,(或只键入地址参数的写盘命令 ,写盘命令把文件11写到软盘上。该文件在用W 命令之前用命名命令N 将文件格式化在CS:5CH的文件控制块中。c 只有W 命令以前而没有任何参数时,与N 配合使用进行写盘操作。 在用W 命令以前在BX 和CX 中应写入文件的字节数。(15)输出命令 O格式:O端口地址 字节值功能:向指定端口地址输出一个字节。(16)运行命令 G格式:G 地址地址地址 功能:执行用户正在调试的程

34、序。 其中地址为执行的起始地址,以CS 中内容作为段地址,以等号后面的地址为偏移地址。再后面的地址为断点地址。在命令行中只有起始地址,没有断点地址,则程序在执行时不中断。DEBUG 规定最多设置10个断点地址。设置多个断点用于调试较大的程序,即程序中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点处停下来,以便调整程序。断点地址为程序中断处的偏移地址,段地址在CS 中。当执行在DEBUG 状态下汇编的小段程序时,只用G 命令即可。(17)十六进制运算命令 H 格式: H 数据1 数据2其中数据1和数据2为十六进制数据。功能:将两个十六进制数进行相加、减,结果显示在屏

35、幕上。(18)结束DEBUG 返回到DOS 命令Q 格式:Q功能:程序调试完退出DEBUG 状态,返回到DOS 状态下。Q 命令不能把内存的文件存盘,要想存盘必须在退出DEBUG 之前用W 命令写盘。12附录C : MS DOS 软中断与系统功能调用操作系统是系统软件的核心,它负责管理计算机的所有资源,协调计算机的各种操作。操作系统和编辑程序、汇编程序、连接程序、调试程序等一系列系统实用程序一起组成微型计算机的系统软件。MS DOS 是PC 机上用得最普遍的操作系统,其主要功能可以分为两方面。一个是设备管理功能,管理显示器、键盘、磁盘、打印机、异步通信口等各种设备资源;另一个是文件管理功能,包

36、括如何在磁盘上建立文件、删除文件、读 / 写文件和检索文件等。MS DOS 采用层次化模块结构,它有基本输入/ 输出模块BIOS 、磁盘管理模块、命令处理模块这3个主要模块。它从两个层次上向用户提供了接口,普通用户可以通过键盘命令在命令处理模块这个层次上和操作系统打交道。高级用户可以通过软件中断和系统功能调用在MS DOS 的较低层次上,即磁盘管理模块和基本输入/ 输出模块,和操作系统打交道。MS DOS 能处理的命令分内部命令和外部命令两类。内部命令往往是最常用的一些命令,如目录显示命令DIR 、复制文件命令COPY 、文件改名命令REN 等,它们所对应的命令执行模块就在COMMAND.CO

37、M 程序内部。大部分命令属于外部命令,一个外部命令的处理要通过此命令所对应的一个命令文件的执行来实现。例如,我们要设计、运行用汇编语言编写的程序,就要用到下列外部命令,用编辑命令EDLIN 来编辑文件,用汇编命令MASM 来得到目标文件,用连接命令LINK 来得到可执行文件,在程序被确认完全正确之前,还要用调试命令DEBUG 进行调试。MS DOS 的主要系统功能都是用中断处理程序的形式来提供的,用户可以按照一定的格式在指定寄存器中存放好某一适当的参数,再用一条INT 中断指令,便可调用某个中断子程序,这就是利用软件中断方法来调用操作系统的功能。因为类型为21H 的软件中断所对应的中断处理程序

38、中包含了实现外部设备管理功能、文件读 / 写功能和管理功能、目录管理功能等最常用的功能子程序, 它们几乎包括了整个系统的功能,所以系统功能调用这个术语通常指对类型为21H 的软件中断。C 1 常用的软件中断常用的几个软件中断类型如表C 1所示。表C 1 常用的软件中断 中断类型号功 能 入 口 参 数 出 口 参 数 10H设置屏幕参考表32设置时间和读取时间AH 1设时间 AH 0读时间CX 、DX 中为所设时间 CX 和DX 中为时间20H程序正常退出无无读磁盘扇区 AL 盘号 CX 所读扇区数DX 起始逻辑扇区号 DS :BX 缓冲区首址CF 1表示出错写磁盘扇区 AL 盘号 CX 所写

39、扇区数DX 起始逻辑扇区号 DS :BX 缓冲区首址CF 1表示出错27H程序驻留退出:DX 程序长度131) 读 / 写磁盘扇区的软件中断INT 25H和INT 26H软件中断指令分别用来实现对磁盘指定扇区的读 / 写。 这两条指令在执行时,会分别转去执行BIOS 中的读磁盘扇区子程序。调用前,必须按表31中要求的入口参数对指定寄存器内容进行设置。同时,应保存每个重要寄存器的内容。因为这个中断破坏除段寄存器(CS ,DS ,SS 和ES )之外的所有寄存器的内容。2)退出程序的软件中断用户程序中可以分别用INT 20H和INT 27H软件中断指令来退出程序。用INT 20H退出程序很简单,不

40、需要任何入口参数。实际上,INT 20H指令和JMP 0指令是一样的,因为在数据段的0单元开始是程序段前缀PSP ,而PSP 0、PSP 1两单元中存放的就是INT 20H指令。不过,JMP 0返回方式只能用在扩展名为COM 的文件中,不能用在扩展名为EXE 的文件中,因为COM 文件总是小于64K ,运行时,DS 、CS 、ES 、SS 的值相同,所以,JMP 0指令真正能转移到程序段前缀首部,而扩展名为EXE 的文件不具备这个特点。用户程序以INT 27H退出时,MS DOS 会把此用户程序看成是系统的一个组成部分,因此,在其它程序装配运行时,这部分用户程序不会受到覆盖。通常,用户对自己编

41、写的中断处理程序进行装配以后,常用这种方法返回控制台命令接收状态,因为这样做,MS DOS 会将用户编写的中断处理程序作为系统程序而驻留内存,所以,其它用户程序可以用软件中断的方式调用这部分程序。要注意的是用INT 27H指令前必须在DX 中设置要驻留的程序长度(按字节计算)。否则,尽管会实现返回,但没有得到驻留。3)设置时间和读取时间用指令INT 1AH可以实现对时间的设置和读取。使用这条指令前,在AH 寄存器中必须存放1或0,以指出当前是要设置时间还是读取时间。如果为设置时间,则还须在CX 和DX 中分别存放时间的高位字节和低位字节作为入口参数。如果是读取时间,CX 和DX 寄存器中作为出

42、口参数得到时间值。4)屏幕的设置用户可以用INT 10H对屏幕进行设置。使用10H 中断时,AH 中要存放功能号,并在指定的寄存器中存放入口参数。表C 2列出了10H 对应的功能。表 C 2 10H对应的功能功能块号入口参数功能AL CRT 工作方式 对CRT 初始化 1CX 光标属性 置光标类型 2DX 行、列号,BH 页号 置光标位置 3BH 页号 读光标位置 读光笔位置 5AL 页号 选择显示页6AL 上滚行数 屏幕显示往上滚动 7AL 下滚行数 屏幕显示向下滚动 8BH 页号 读光标处字符/属性149AL 字符 BL 属性 在光标处写字符/属性 10AL 字符 在光标处写字符 11DX

43、 彩色标识和彩色值 设置屏幕彩色背景 12DX 行号,CX 列号 在指定坐标处写点 13DX 行号,CX 列号 在指定坐标处读点 14AL 字符 写字符取当前屏幕状态C 2 系统功能调用系统功能调用是由MS DOS 的磁盘管理模块提供的,它包括了三方面的功能,即设备管理、目录管理和文件管理。所有系统功能的调用格式都是一致的,按4步进行,即 1在AH 寄存器中设置系统功能调用号; 2在指定寄存器中设置入口参数; 3用INT 21H指令执行功能调用;4根据出口参数分析功能调用执行情况。只是有些系统功能调用比较简单,不需要设置入口参数,或者没有出口参数。 表 C 3列出了各系统功能调用号对应的功能和

44、入口参数、出口参数。 1)设备管理设备管理包括键盘输入、显示输出、设置磁盘缓冲区、选择当前盘等12条功能调用。 这里需要指出09H 、0AH 和03H 、04H 这4个功能调用的使用注意点。09H 是用来输出字符串的功能调用,要求用DS 和DX 指出要显示的字符串的首地址,另外,要注意用作为显示字符串的结束符。0AH 是输入1行键盘字符的功能调用。使用0AH 功能时,入口参数中,要求用DS 和DX 寄存器给出输入缓冲区的首地址,并且在缓冲区第1个字节中预设置缓冲区长度。功能调用被执行后,缓冲区第2个字节中为实际输入字符信息的长度,从第3个字节开始才是输入的字符串。03H 和04H 分别执行异步

45、通信的输入/输出功能。执行输入功能时,输入字符作为出口参数放在AL 中;执行输出功能时,输出字符作为入口参数放在DL 中。要求异步通信口设置的初始状态为2400波特、无校验位、8个数据位和1个停止位。2)目录管理目录管理包括查找目录项、更改目录项、建立子目录、删除子目录等功能。这些功能调用的用法都比较简单,只须对56H 和43H 这2个功能调用作一说明。56H 功能调用是更改文件名字的,要求设置入口参数时,将DS 和DX 寄存器指向旧路径名,将ES 和DI 寄存器指向新路径名,另外,要求新旧路径名前的驱动器名相同。43H 是用来显示和修改文件属性的功能调用,用户程序常用此调用来使某个文件改变属

46、性,使它成为只读文件或隐含文件。属性代码为:00普通文件;01只读文件;02隐含文件;04系统文件。3)文件管理文件管理是MS DOS 提供给用户的最重要的系统功能调用。这里,一共有两组文件管理功能。一组是用24H 以下的功能调用号提供的,这组功能调用和8位微型机操作系统CP/M的功能调用兼容;另一组是用3CH 以上的功能调用号提供的,这些功能调用是MC DOS 所独有的。存取文件时,首先要用文件控制块FCB 使操作系统知道要存取的哪个用户程序文件。15在FCB 中,用户程序指出存取文件所在的磁盘名以及文件名、扩展名,还指出记录长度、相对记录号和当前块号(或者随机记录号)。读文件时,要有一个内

47、存区域用来存放文件内容,称之为磁盘缓冲区,将读出的数据保存在磁盘缓冲区;写文件时,由用户程序先把数据传送到磁盘缓冲区。对于顺序存取方式和普通随机存取方式来说,每次只传输1个记录,因此,磁盘缓冲区只要1个记录大小就行了,而对于随机分块存取方式和文件代号法存取方式来说,磁盘缓冲区往往要开辟得很大。读/写文件前,必须打开文件。在存取文件后,尤其是写文件后,一定要有关闭文件操作。通过关闭文件,使操作系统确认此文件放在磁盘哪一部分。如果写文件时忘了关闭文件,那就会导致写入的文件不完整。不过读文件时,关闭文件这一步是可有可无的。表 C 3 MS DOS 的功能调用 调用号 功 能 入 口 参 数出 口 参

48、 数 01 键盘输入字符AL 输入字符 02 显示器输出字符输出字符03 串行设备字符输入AL 输入字符 04 串行设备字符输出输出字符05 往打印机输出字符输出字符06 直接控制台输入/输出FFH (输入)DL 字符(输出) AL 输入字符 07 直接控制台输入(无回送) AL 输入字符 08 键盘输入(无回送)AL 输入字符 09 显示字符串缓冲区首址0AH 输入字符串缓冲区首址0BH 检查键盘输入状态 AL 00H ,无键入 AL FFH ,有键入 0CH 清除键盘输入缓冲区 0DH 磁盘设置和初始化 选A 为默认驱动器0EH 选择当前盘盘号系统中驱动器数 0FH 打开文件FCB 首址0

49、0H ,成功AL FFH ,未打开指定文件10H 关闭文件FCB 首址00H ,找到AL FFH ,未找到 11H 查找第一个目录项FCB 首址00H ,找到AL FFH ,未找到 12H 查找下一个目录项FCB 首址00H ,找到AL FFH ,未找到 13H 删除文件FCB 首址00H ,找到AL FFH ,未找到 14H顺序读一个记录FCB 首址00H ,成功AL 01H ,文件结束 AL 02H ,缓冲区太小微机系统与接口实验参考资料之一 调用号 15H 16H 17H 功 顺序写一个记录 建立文件 文件改名 能 入 口 参 数 出 口 参 数 AL03H,读得残缺记录 DS:DXFC

50、B 首址 DS:DXFCB 首址 DS:DXFCB 首址 (DS:DX17文件 新名字首址 AL00H,成功 ALFFH,磁盘满 AL00H,成功 ALFFH,目录区满 AL00H,成功 ALFFH,不成功 18H 19H 1AH 1BH 由 DOS 内部调用 取当前盘盘号 设置磁盘缓冲区 取当前盘文件分配表 FAT 的有关信息 DS:DX缓冲区首址 DS:BXFAT 首址 DXFAT 表项数 AL每簇扇区数 CX每扇区字节数 DL盘号 DS:BXFAT 首址 DXFAT 表项数 AL每簇扇区数 CX每扇区字节数 AL00H,成功 AL01H,文件结束 AL03H,残缺记录 AL00H,成功

51、ALFFH,盘满 (FCB33)记录数 且 AL00H,成功 否则 ALFFH,未找到 AL当前盘的盘号 1CH 取指定盘文件分配表的 有关信息 1D20H 21H 由 DOS 内部调用 随机读一个记录 DS:DXFCB 首址 22H 23H 随机写一个记录 取文件长度 DS:DXFCB 首址 DS:DXFCB 首址 24H 25H 26H 27H 设置随机记录号 设置中断向量 由 DOS 内部调用 随机分块读 DS:DXFCB 首址 DS:DX 指定 4 字节地址 AL中断类型号 DS:DXFCB 首址 CX所读记录数 DS:DXFCB 首址 CX所写记录数 DS:SI命令行首址 ES:DI缓冲区首址 AL00H,成功 AL01H,文件结束 AL03H,残缺记录 AL00H,成功 ALFFH,盘满 ES:DIFCB 首址 且 AL0,则为单义名 ALFFH,无效 AL01H,广义文件名 CX 和 DX 中为日期 16 28H 29H 随机分块写 分析文件名 2AH 取日期 微机系统与接口实验参考资料之一 调用号 2BH 2CH 2DH 2EH 2FH 30H 31H 功 设置日期 取时间 设置时间 能 入 口 参 数 出 口 参 数 CX 和 DX 中为日期 AL00H,成功 ALFFH,失败 CX 和 DX 中为时间 AL00H,成功 ALFFH,失败 CX 和 D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论