首页 Masm编译与调试过程

Masm编译与调试过程

举报
开通vip

Masm编译与调试过程 《微机系统与接口》实验参考资料之一 1 汇编语言与命令行动态调试 程序 DEBUG 使用 汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。 汇编程序可使用小汇编程序(ASM)也可以使用宏汇编程序(MASM),由于宏汇编 程序不但代替 ASM,而且可以汇编具有宏定义的汇编程序,因此在汇编程序时一般都使用 宏汇编程序(MASM)。 一、汇编程序 MASM 与链接程序 LINK 1. 运行汇编程序必备的条件 运行汇编程序必备的软件环境:DOS操作系统;汇编系统。 汇编系统...

Masm编译与调试过程
《微机系统与接口》实验参考资料之一 1 汇编语言与命令行动态调试 程序 DEBUG 使用 汇编就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。 汇编程序可使用小汇编程序(ASM)也可以使用宏汇编程序(MASM),由于宏汇编 程序不但代替 ASM,而且可以汇编具有宏定义的汇编程序,因此在汇编程序时一般都使用 宏汇编程序(MASM)。 一、汇编程序 MASM 与链接程序 LINK 1. 运行汇编程序必备的条件 运行汇编程序必备的软件环境:DOS操作系统;汇编系统。 汇编系统盘应包含如下文件: MASM 宏汇编程序文件 LISK 连接程序文件 CRFF 索引程序文件(也可不用) EDIT 文本编辑程序(或 PE等文本编辑程序) 用户通过屏幕编辑程序键入源程序,检查无误,可将源程序存到汇编系统盘上,该程 序的扩展名为·ASM。 2. 编写汇编源程序 用汇编语言编写的源程序必须是一个完整的源程序,才能经过宏汇编程序MASM的汇 编,生成一个目标程序。为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍 扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等。 1)源程序的书写格式 当 CPU访问内存时,是把存储器分成若干个段,通过 4个段寄存器中存放的地址对内 存储器访问,因此在编源程序时必须按段的结构来编制程序。由于每个段的物理空间为≤ 64KB,所以程序中各段可以分别为一个或几个。源程序的书写一般有如下形式: 逻辑堆栈段 堆栈段名 SEGMENT STACK 用变量定义预置的堆栈空间 · · · 堆栈段名 ENDS 逻辑数据段 数据段名 SEGMENT 用变量定义预置的数据空间 · · · 数据段名 ENDS 逻辑代码段 代码段名 SEGMENT ASSUME 定义各段寻址关系 过程名 PROC… 《微机系统与接口》实验参考资料之一 2 程序 · · · 过程名 ENDP 代码段名 ENDS END 过程名或起始标号 在源程序中最少要有一个代码段,数据段根据需要可有可无,也可以增设附加段。对 于堆栈段也可以根据需要可有可无,但在连接(LINK)时计算机将显示警告性的错误: Warning:N STACK segment There was 1 error detected. 在程序中如果没有用到堆栈时,该错误提示不影响程序的运行,如果程序中用到堆栈 时必须设置堆栈段。 其中:SEGMENT、ASSUME、PROC…ENDP为伪指令,伪指令是发给汇编程序 ASM 的,而不和微处理器打交道,在汇编时不产生目标代码,只是把源程序中各段的设置情况 告诉汇编程序。 2)段寄存器的段地址的装入 Assume伪指令语句只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入 相应的段寄存器中,段寄存器的段地址的装入是在程序中完成的。 (1)DS、ES、SS的装入 由于段寄存器不能用立即数寻址方式直接传送,所以段地址装入可通过通用寄存器传 送给段寄存器。 MOV AX,逻辑段名 MOV 段寄存器,AX 其中逻辑段名为程序中定义各逻辑段的名字,(不包括代码段),段寄存器是指与各 逻辑段相对应的各段寄存器(DS、ES、SS)。 (2)CS的装入 代码段寄存器是装当前执行目标代码的段地址,IP是提供下一条要执行的目标代码的 偏移量,为了保证程序的正确执行,CS和 IP装入新值时是一起完成的。 对 CS和 IP的装入有如下几种情况: ①根据用户程序中的伪指令 END 后的标号为 CS 和 IP 提供代码段的段地址和目标代 码的偏移地址。 ②在程序运行过程中,当执行某些指令和操作时,CPU自动修改 CS和 IP的值,使它 们指向新的代码段。 3)程序中的数据与变量 在汇编源程序中的数据除了立即数,由指令产生的数和通过键盘输入的数以外,还胡 大量的数据是通过伪指令语句进行预置和分配的,也就是在某逻辑段中(除代码段),将 所需的数据以某种形式存放起来,在程序中可任意调用。在数据定义的同时还可以定义变 量,将变量与数据结合在一起。可以为某个变量分配存储空间以便在程序执行过程中存放 中间结果和最终结果,使用起来极为方便。 (1)变量与数据的定义 《微机系统与接口》实验参考资料之一 3 变量与数据的定义可以通过符号定义伪指令 EQU、=和数据定义伪指令 DB或 DW或 DD来实现。 EQU和=可以出现在程序的逻辑段内也可出现在逻辑段外。 (2)汇编程序中数据的提供方法 ①用数据定义伪指令提供数据 如果程序要求原始数据为一批数据时,用数据定义伪指令 DB、DW和 DD来提供较为 方便。 ②用立即数的形式提供数据 当原始数据只有几个时,一般用立即数的方法来提供。当然,用立即数的方法只是将 一个数据传送到通用寄存器中,它只是通过通用寄存器传送数据。 ③用编程的方法提供数据 假如原始数据是一组有规律的数据项,则用编程序的方法形成这一组数据,不用专门 为这组数据分配存储单元,节省了存储空间。 ④用键盘提供数据 当原始数据为任意数据时,一般用键盘输入方法,调用 DOS 21H中断。 (3)数据的输出方式 ①在显示器上显示一个字符 调用 02H号功能调用号,发 21H号中断,将要显示的字符的 ASCII码送入 DL,就可 在显示器上显示该字符。 ②在打印机上输出一个字符 调用 05H号功能调用号,发 21H号中断,将要打印字符的 ASCII码送入 DL,就可在 打印机上打印出 DL中的字符。 4) 返回 DOS状态的方法 当执行.EXE文件时,是在 DOS状态下进行的,如果希望在执行完.EXE文件后正常返 回 DOS状态,一般用如下两种方法:采用 DOS 4CH 功能调用和采用返回(RET)断点 的方法。 3.执行宏汇编程序 将汇编语言源程序用宏汇编程序翻译(汇编)后,可以形成三个文件:一个是扩展名 为.OBJ 的目标文件,在该文件中,将源程序的操作码部分变为机器码,但地址操作数是可 浮动的相对地址,而不是实际地址,因此需经 LINK 连接文件进行连接才能形成可执行文 件。第二个文件是列表文件,扩展名为.LST,它把源程序和目标程序列表,以供检查程序 用。第三个文件是交叉索引文件,扩展名为.CRF,它是一个对源程序所用的各种符号进行 前后对照的文件。其中目标文件是必须产生的,而其它两个文件在需要时给予命令就可产 生,对连接和执行汇编程序无直接的关系。 1)汇编过程 在 DOS状态下,键入MASM↓则调入宏汇编程序,屏幕显示与操作如下: masm↓ Microsoft (R) Macro Assemble Version 5.00 Copyright (C) Microsoft Corp 1981-1985,1987,All right reserved. 《微机系统与接口》实验参考资料之一 4 Source filename [.ASM ]:MYFILE↓ Object filename [MYFILE.OBJ ]:MYFILE↓ Source listing [NUL.LST ]:MYFILE↓ Cross-reference [NUL.CRF]:MYFILE↓ 50678+410090 Bytes symbol space free 0 Warning Errors 0 Severe Errors 其中划线部分为用户键入部分,MYFILE为源程序名(MYFILE.ASM),方括号中是 机器规定的默认文件名,如果用户认为方括号内的文件名就是要键入的文件名,则可只在 划线部分键入回车符。如果不想要列表文件和交叉索引文件,则可在 [NUL.LST ]和 [NUL.CRF]后不键入文件名只键入回车符。 当回答完上述四个询问后,汇编程序就对源程序进行汇编。在汇编过程中,如果发现 源程序中有语法错误,则提示出错信息,指出是什么性质的错误,错误类型,最后列出错 误的总数。之后可重新进入屏幕编辑状态,调入源程序(MYFILE.ASM)进行修改,修改 完毕,再进行汇编,直到汇编通过为止。 如果在汇编时不需要产生列表文件(.LST)和交叉索引文件(.CRF),调用汇编程序 时可用分号结束。 如果需要产生.OBJ和.LST文件,不需要.CRF文件,则在分号前面加两个逗号即可。 如果 4个文件都需要,用简便的操作方法是在分号前用了 3个逗号。 2)列表文件(.LST) 列表文件(.LST)是通过汇编程序(MASM)产生的,可以在 DOS 状态下用 TYPE 命令显示或打印该文件,以便分析调试源程序。如显示 D 盘上已存在的列表文件 MYFILE.LST操作方法如下: D> TYPE MYFILE.LST;↓ 列表程序由三部分组成: (1)源程序和目标程序清单 列表程序同时列出源程序和对应的机器语言清单。列表程序的第一列给出每条指令所 在行号;第二列给出从段的首地址开始的每条指令存放的偏移地址;接着是数字列,给出 对应每条语句的机器码和对应于存放在栈段和数据段的值,在机器码加上“R”的指令表示: 这条指令在连接时可能产生与列出来的偏移地址不同的地址,因为这些偏移地址可能与其 它模块有关;最右边就是用汇编语言编写的源程序。 (2)段信息汇总表 在段信息汇总表中列出该程序用了哪几个段,如:代码段 CODE、数据段 DATA和堆 栈段 STACK;每个段所占存储空间的长度(字节数);每个段的定位类型,包括 PAGE(页)、 PARA(节)、WORD(字)和 BYTE(字节),它们表示此段的起始边界要求,即起始边 界地址应分别可以被 256、16、2和 1 除尽。该列表清单 中是以 PARA为 CODE段、DATA 段和 STACK段的起始边界地址。最后一列为段的组合类型;段的组合类型是告诉连接程序, 本段与其它段的关系,组合类型有 NONE、PUBLIC、COMMOM、AT表达式、STACK和 MEMORY。 NONE:表示本段与其它段不发生逻辑关系,即每段都有自己的基本地址。是隐含组 合类型。 STACK:表明连接程序首先要把本段与同名同类别的其它段相邻地连接在一起,然后 为所有定义为栈段的连接在一起的段,定义一个共同的段基地址,即连接成一个物理段。 《微机系统与接口》实验参考资料之一 5 在列表程序的源程序中只有一个栈段,在栈段定义中给出了组合类型为 STACK,因此 在段信息汇总表中列出了该项,在本程序中它没有任何意义,因为没有其它栈段与它连接, 只是为了说明这个问题而设置的。 (3)符号汇总表 在列表程序中最后部分列出了符号汇总,是指在源程序中用户定义的符号名、类型、 值和所在段。 如果在源程序中存在某些语法错误时,列表文件可提示某条语句有哪些错误,出错提 示显示在出错指令行的下面,因此用户可借助列表文件很快地找到错误行,以便调试。另 外由于列表文件给出了各条指令的偏移地址,对和程序时设置断点很方便。 3)交叉索引文件(.CRF) 汇编后产生的交叉索引文件,扩展名为.CRF,它列出了源程序中定义的符号(包括:标 号、变量等)和程序中引用这些符号的情况。 如果要查看这个符号表,必须使用 CREF.EXE的文件,它根据.CRF文件建立一个扩展 名为.REF的文件,而后再用 DOS的 TYPE命令显示,就可以看到这个符号使用情况表。具 体操作方法如下: D>CREF↓ cref filename [.CRF]:MYFILE↓ list filename [MYFILE.REF]:↓ D>TYPE MYFILE.REF↓ 4. 执行连接程序 用汇编语言编写的源程序经过汇编程序(MASM)汇编后产生了目标程序(.OBJ), 该文件是将源程序操作码部分变成了机器码,但地址是可浮动的相对地址(逻辑地址), 因此必须经过连接程序 LINK连接后才能运行。连接程序 LINK是把一个或多个独立的目标 程序模块装配成一个可重定位的可执行文件,扩展名为.EXE文件。此外还可以产生一个内 存映象文件,扩展名为.MAP。 1)连接程序执行过程 在 DOS状态下,键入 LINK↓(或 LINK MYFILE↓)则系统调入 LINK程序,屏幕 显示操作如下: D>LINK↓ IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 Object Modules [.OBJ]:MYFILE↓ Run File [MYFILE.EXE]:MYFILE↓ List File [NUL.MAP]:MYFILE↓ Libraries [.LIB]:↓ 其中划线部分为用户键入部分,MYFILE 为源程序名,方括号内为机器默认文件名, 当用户认为方括号中的文件名就是要键入的文件名时,可在冒号后面只键入回车。 其中 MAP 文件是否需要建立,由用户决定,需要则键入文件名,不需要则直接送入 一个回车键。 最后一个询问是问是否在连接时用到库文件,对于连接汇编语言源程序的目标文件, 通常是不需要的,因此直接键入回车键。 与汇编程序一样,可以在连接时用分号结束后续询问。 《微机系统与接口》实验参考资料之一 6 例如: D>LINK MYFILE;↓ IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 连接后只产生MYFILE.EXE文件。如果除MYFILE.EXE文件外还要产生MYFILE.MAP 文件,则在分号前加两个逗号。 D>LINK MYFILE,,;↓ IBM Personal Computer Linker Version 2.00(C)Copyright IBM Corp 1981,1982,1983 2)内存映象文件(.MAP) 由连接程序 LINK产生的扩展名为.MAP文件,它实际上是连接程序的列表文件,它给 出了每个段的地址分配情况及长度。 在 DOS状态下,用 TYPE命令显示打印出来。例如: D>TYPE MYFILE.MAP↓ Start Stop Length Name Class 00000H 0000FH 0010H DATA 00010H 0004FH 0040H STACK 00050H 0005FH 0010H CODE Origin Group Program entry point at 0005:0000 从中可以看到,源程序MYFILE中定义了三个段:数据段(DATA)起始地址为 00000H, 终止地址为 0000FH,长度为 0010H个字节;堆栈段(STACK)起始地址为 00010H,终止 地址为 0004FH,长度为 0040H 个字节;代码段(CODE)起始地址为 00050H,终止地址 为 0005FH,长度为 0010H个字节。 5. 执行程序 当用连接程序 LINK将目标程序(.OBJ)连接定位后,可产生可执行文件(.EXE), 可以在 DOS状态下执行该程序。 执行操作如下: D> MYFILE↓ 或 D> MYFILE.EXE↓ 在源程序MYFILE中如果有显示结果的指令,则在执行程序后可以看到执行结果;在 源程序 MYFILE 中如果没有显示结果的指令,要想看到结果,只有通过 DEBUG 和程序来 达到目的。如果经结果没有达到预先设计目的,也是通过 DEBUG 来进行调试、运行。因 此 DEBUG是汇编语言编程的最有利的调试工具。有关 DEBUG的介绍参阅附录 B。 《微机系统与接口》实验参考资料之一 7 二、动态调试程序 DEBUG 使用 在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调 试,调试程序 DEBUG 就是专为汇编语言设计的一种调试工具。它在调试汇编语言程序时 有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元内容, 并能监视目标程序的执行情况,使用户真正接触到 CPU内部,与计算机产生最紧密的工作 联系。 1.动态和程序 DEBUG的主要特点 1)能够在最小环境下运行汇编程序 在 DOS状态下运行汇编程序,必须将程序经过MASM汇编程序,而后还要经过 LINK 连接程序产生可执行程序,才能最终运行,比较麻烦。在 DEBUG 状态下,为用户提供了 调试、控制测试的环境,可以在此环境下进行编程、调试、监督、执行用户编写的汇编程 序。因此调试周期短,为用户提供了极大的方便。 2)提供极简单的修改手段 DEBUG提供了修改命令,可以修改内存单元内容,修改寄存器的内容,为调试程序、 修改程序带来了方便。 3)提供用户与计算机内部联系的窗口 DEBUG 具有显示命令,它既可以使用户看到某内存单元或某一块单元内容,也可以 看到 CPU内部各寄存器的内容。用单步执行命令实现跟踪执行,每执行一步都使用户看到 各寄存器的内容的变化,以便分析和调整程序。 4)可装入、修改或显示任何文件 当然在 DEBUG 状态下运行汇编程序也具有一定局限性。在 DEBUG 状态下运行的程 序不能使用宏汇编程序中的宏指令,大部分伪指令也不能使用,因此只能把程序分段调试。 此外,不能调试太长的程序,只能分块进行中程序设计。在 DEBUG 状态下调试好的程序 不能形成可执行文件(.EXE),因此调试好的程序只能记下,到编辑环境下重新键入调试 好的程序,通过汇编程序(如MASM),再通过连接程序(LINK)形成可执行文件(.EXE)。 2.DEBUG的进入 在操作系统(DOS)状态下,直接调入 DEBUG程序,键入命令的格式如下: D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] 其中[]的内容为可选项,可以有也可以缺省。 [d:]为驱动器号,指要调入 DEBUG 状态的可执行文件在哪个驱动器中,如 A:、B:、 C:等。 [Path]为路径,指要调入 DEBUG状态的可执行文件是在哪个目录下或子目录下。 [filename[.ext]],指要调入 DEBUG状态下的可执行文件的文件名,该文件可以是通过 编辑、汇编、连接后产生的可执行文件,也可以是在 DEBUG状态下汇编的程序 段,通过 写盘命令W写入磁盘的文件。 [Parm1][Parm2]为任选参数,是给定文件的说明参数。 在启动 DEBUG 时,如果输入 filename(文件名),则 DEBUG 程序把指定文件装入 内存,用户可以通过 DEBUG的命令对指定文件进行修改、显示或执行。如果没有文件名, 则是以当前内存的内容工作,或者用命名命令或装入命令把需要的文件装入内存,然后再 通过 DEBUG命令进行修改、显示或执行。 当启动 DEBUG程序后,屏幕上出现“—”,说明系统已进入 DEBUG状态。 《微机系统与接口》实验参考资料之一 8 3.DEBUG的主要命令 1)DEBUG命令的有关规定 (1)DEBUG命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数 之间用“,”或空格隔开。 (2)DEBUG命令必须接着按 ENTER键,命令才有效。 (3)参数中不论是地址还是数据,均用十六进制数表示,但十六进制数据后面不要用 “H”。 (4)可以用 Ctrl和 Break键来停止一个命令的执行,返回到 DEBUG的提示符“—” 下。 (5)用 Ctrl-Num Lock键中止正在上卷的输出行,再通过按任意键继续输出信息。 2)DEBUG命令 (1)汇编命令 A 格式:a. A [段寄存器名]:[偏移地址] b. A [段地址]:[偏移地址] c. A [偏移地址] d. A 功能:用该命令可以将汇编语言程序直接汇编进入内存。 当键入 A命令后,显示段地址和偏移地址等待用户键入汇编指令,每键入一条汇编指 令回车后,自动显示下一条指令的段地址和偏移地址,再键入下一条汇编指令,直到汇编 语言程序全部键入,又显示下一地址时可直接键入回车返回到提示符“-”为止。 其中 a 的段地址在段地址寄存器中,因此在使用该命令时必须将段地址寄存器送入段 地址,c的地址在 CS中,d的段地址在 CS中,偏移地址为 100H。 (2)显示内存命令 D 格式:a. D [地址] b. D [地址范围] c. D 功能:显示指定内存范围的内容。 显示的内容为两种形式:一种为十六进制内容,一种为与十六进制相对应的 ASCII码 字符,对不可见字符以“·”代替。 对于 a、c每次显示 128个字节内容,b显示的字节数由地址范围来决定。 若命令中有地址,则显示的内容从指定地址开始,若中中无地址(如 c)则从上一个 D 命令所显示的最后一个单元的下一个单元开始。若以前没有使用过 D 命令,则以 DEBUG 初始化的段寄存器的内容为起始段地址,起始偏移地址为 100H,即 CS:100。 对于 a 中的地址为偏移地址,段地址为 CS 的内容,对 b 中的地址范围,可以指定段 地址和起始偏移地址和终止偏移地址。 (3)修改存储单元内容命令 E 格式:a· E [地址] [内容表] b· E [地址] 功能:a·用命令所给定的内容表去代替指定地址范围的内存单元内容。 b·一个单元一个单元地连续修改单元内容。 《微机系统与接口》实验参考资料之一 9 其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。 (4)填充内存命令 F 格式:F [范围][单元内容表] 功能:将单元内容表中的内容重复装入内存的指定范围内。 (5)内存搬家命令 M 格式:M [源地址范围][目标起始地址] 其中源地址范围和目的起始地址为偏移地址,段地址为 DS的内容。 功能:把源地址范围的内容搬至以目标起始地址开始的存储单元中。 (6)比较命令 C 格式:C [源地址范围],[目标地址] 其中源地址范围是由起始地址和终止地址指出的一片连续的存储单元,目标地址为与 源地址所指单元对比的目标地址起始地址。 功能:从源地址范围是由起始的地址单元开始逐个与目标起始地址往后的单元顺序比 较每个单元内容,比较到源终止地址为止。比较结果如果一致则不显示任何信息,如果不 一致,则以[源地址][源内容][目的内容][目的地址]的形式显示失败单元地址及内容。 (7)搜索指定内容命令 S 格式:S [地址范围][表] 功能:在指定地址范围内搜索表中内容,搜索到就显示表中元素所在地址。 (8)检查和修改寄存器内容命令 R 格式:a·R b·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 有/无 CY/NC (9)跟踪与显示命令 T 格式:a·T[=地址]或 T [地址] b·T[=地址][条数]或 T [地址][条数] 《微机系统与接口》实验参考资料之一 10 功能:a·执行一条指定地址处的指令,停下来,显示 CPU 所有寄存器内容和全部标 志位的状态,以及下一条指令的地址和内容。 b·为多条跟踪命令,从指定地址开始;若命令中用[地址]给定了起始地址,则从起始 地址开始,若未给定,则从当前地址(CS:IP)开始,执行命令中的[条数]决定一共跟踪几 条指令后返回 DEBUG状态。 (10)反汇编命令 U 格式:a· U [地址] b· U [地址范围] 功能:将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和 机器。 若在命令中没有指定地址则以上一个U命令的最后一条指令地址的下一个单元作为起 始地址;若没有输入过 U命令,则以 DEBUG初始化段寄存器的值作为段地址,以 0100H 作为偏移地址。 (11)命名命令 N 格式: N 文件名 功能:在调用 DEBUG时,没有文件名,则需要用 N命令将要调用的文件名格式化到 CS:5CH的文件控制块中,才能用 L命令把它调入内存进行调试(其它形式参考 DOS手册)。 (12)读盘命令 L 格式:a·L [地址][驱动器号][起始扇区号][所读扇区个数] b·L [地址] c·L 功能:a·把指定驱动器和指定扇区范围的内容读到内存的指定区域中。其中地址是读 入内存的起始地址,当输入时没有给定地址,则隐含地址为 CS:100H。起始扇区号指逻辑 扇区号的起始位置。所读扇区个数是指从起始扇区号开始读到内存几个扇区的内容。驱动 器号为 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状态下调试的程序或数据写入指定的驱动器中,起始扇区号, 所写扇区个数为要占盘中几个扇区。 写盘指定扇区的操作应十分小心,如有差错将会破坏盘上的原有内容。 如果在命令行中的地址只包含偏移地址,W命令认为段地址在 CS中。 b·当键入不带参数的写盘命令时,(或只键入地址参数的写盘命令),写盘命令把文件 《微机系统与接口》实验参考资料之一 11 写到软盘上。该文件在用W命令之前用命名命令 N将文件格式化在 CS:5CH的文件控制块 中。 c·只有W命令以前而没有任何参数时,与 N配合使用进行写盘操作。 在用W命令以前在 BX和 CX中应写入文件的字节数。 (15)输出命令 O 格式:O[端口地址] [字节值] 功能:向指定端口地址输出一个字节。 (16)运行命令 G 格式:G [=地址][地址[地址…]] 功能:执行用户正在调试的程序。 其中地址为执行的起始地址,以 CS中内容作为段地址,以等号后面的地址为偏移地址。 再后面的地址为断点地址。在命令行中只有起始地址,没有断点地址,则程序在执行时不 中断。DEBUG 规定最多设置 10 个断点地址。设置多个断点用于调试较大的程序,即程序 中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点 处停下来,以便调整程序。 断点地址为程序中断处的偏移地址,段地址在 CS中。 当执行在 DEBUG状态下汇编的小段程序时,只用 G命令即可。 (17)十六进制运算命令 H 格式: H 数据 1 数据 2 其中数据 1和数据 2为十六进制数据。 功能:将两个十六进制数进行相加、减,结果显示在屏幕上。 (18)结束 DEBUG返回到 DOS命令 Q 格式:Q 功能:程序调试完退出 DEBUG状态,返回到 DOS状态下。 Q命令不能把内存的文件存盘,要想存盘必须在退出 DEBUG之前用W命令写盘。 《微机系统与接口》实验参考资料之一 12 附录 C: MS-DOS软中断与系统功能调用 操作系统是系统软件的核心,它负责管理计算机的所有资源,协调计算机的各种操作。 操作系统和编辑程序、汇编程序、连接程序、调试程序等一系列系统实用程序一起组成微 型计算机的系统软件。 MS-DOS是 PC机上用得最普遍的操作系统,其主要功能可以分为两方面。一个是设 备管理功能,管理显示器、键盘、磁盘、打印机、异步通信口等各种设备资源;另一个是 文件管理功能,包括如何在磁盘上建立文件、删除文件、读 / 写文件和检索文件等。 MS-DOS采用层次化模块结构,它有基本输入/ 输出模块 BIOS、磁盘管理模块、命 令处理模块这 3 个主要模块。它从两个层次上向用户提供了接口,普通用户可以通过键盘 命令在命令处理模块这个层次上和操作系统打交道。高级用户可以通过软件中断和系统功 能调用在MS-DOS的较低层次上,即磁盘管理模块和基本输入/ 输出模块,和操作系统打 交道。 MS-DOS 能处理的命令分内部命令和外部命令两类。内部命令往往是最常用的一些 命令,如目录显示命令 DIR、复制文件命令 COPY、文件改名命令 REN等,它们所对应的 命令执行模块就在 COMMAND.COM程序内部。大部分命令属于外部命令,一个外部命令 的处理要通过此命令所对应的一个命令文件的执行来实现。例如,我们要设计、运行用汇 编语言编写的程序,就要用到下列外部命令,用编辑命令 EDLIN来编辑文件,用汇编命令 MASM 来得到目标文件,用连接命令 LINK 来得到可执行文件,在程序被确认完全正确之 前,还要用调试命令 DEBUG进行调试。 MS-DOS 的主要系统功能都是用中断处理程序的形式来提供的,用户可以按照一定 的格式在指定寄存器中存放好某一适当的参数,再用一条 INT 中断指令,便可调用某个中 断子程序,这就是利用软件中断方法来调用操作系统的功能。因为类型为 21H 的软件中断 所对应的中断处理程序中包含了实现外部设备管理功能、文件读 / 写功能和管理功能、目 录管理功能等最常用的功能子程序, 它们几乎包括了整个系统的功能,所以系统功能调用 这个术语通常指对类型为 21H的软件中断。 C·1 常用的软件中断 常用的几个软件中断类型如表 C-1所示。 表 C-1 常用的软件中断 中断类型号 功 能 入 口 参 数 出 口 参 数 10H 设置屏幕 参考表 3-2 1AH 设置时间和读取时间 AH=1设时间 AH=0读时间 CX、DX中为所设时间 CX和 DX中为时间 20H 程序正常退出 无 无 25H 读磁盘扇区 AL=盘号 CX=所读扇区数 DX=起始逻辑扇区号 DS:BX=缓冲区首址 CF=1表示出错 26H 写磁盘扇区 AL=盘号 CX=所写扇区数 DX=起始逻辑扇区号 DS:BX=缓冲区首址 CF=1表示出错 27H 程序驻留退出 DS:DX=程序长度 《微机系统与接口》实验参考资料之一 13 1) 读 / 写磁盘扇区的软件中断 INT 25H和 INT 26H软件中断指令分别用来实现对磁盘指定扇区的读 / 写。 这两条 指令在执行时,会分别转去执行 BIOS中的读磁盘扇区子程序。 调用前,必须按表 3-1中要求的入口参数对指定寄存器内容进行设置。同时,应保存 每个重要寄存器的内容。因为这个中断破坏除段寄存器(CS,DS,SS和 ES)之外的所有 寄存器的内容。 2)退出程序的软件中断 用户程序中可以分别用 INT 20H和 INT 27H软件中断指令来退出程序。 用 INT 20H退出程序很简单,不需要任何入口参数。实际上,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会把此用户程序看成是系统的一个组成部分, 因此,在其它程序装配运行时,这部分用户程序不会受到覆盖。通常,用户对自己编写的 中断处理程序进行装配以后,常用这种方法返回控制台命令接收状态,因为这样做,MS- DOS 会将用户编写的中断处理程序作为系统程序而驻留内存,所以,其它用户程序可以用 软件中断的方式调用这部分程序。 要注意的是用 INT 27H指令前必须在 DX中设置要驻留的程序长度(按字节计算)。 否则,尽管会实现返回,但没有得到驻留。 3)设置时间和读取时间 用指令 INT 1AH可以实现对时间的设置和读取。使用这条指令前,在 AH寄存器中必 须存放 1或 0,以指出当前是要设置时间还是读取时间。如果为设置时间,则还须在 CX和 DX中分别存放时间的高位字节和低位字节作为入口参数。如果是读取时间,CX和 DX寄 存器中作为出口参数得到时间值。 4)屏幕的设置 用户可以用 INT 10H对屏幕进行设置。使用 10H中断时,AH中要存放功能号,并在 指定的寄存器中存放入口参数。表 C-2列出了 10H对应的功能。 表 C-2 10H对应的功能 功能块号 入口参数 功能 0 AL=CRT工作方式 对 CRT初始化 1 CX=光标属性 置光标类型 2 DX=行、列号,BH=页号 置光标位置 3 BH=页号 读光标位置 4 读光笔位置 5 AL=页号 选择显示页 6 AL=上滚行数 屏幕显示往上滚动 7 AL=下滚行数 屏幕显示向下滚动 8 BH=页号 读光标处字符/属性 《微机系统与接口》实验参考资料之一 14 9 AL=字符 BL=属性 在光标处写字符/属性 10 AL=字符 在光标处写字符 11 DX=彩色标识和彩色值 设置屏幕彩色背景 12 DX=行号,CX=列号 在指定坐标处写点 13 DX=行号,CX=列号 在指定坐标处读点 14 AL=字符 写字符 15 取当前屏幕状态 C·2 系统功能调用 系统功能调用是由 MS-DOS 的磁盘管理模块提供的,它包括了三方面的功能,即设 备管理、目录管理和文件管理。 所有系统功能的调用格式都是一致的,按 4步进行,即 1·在 AH寄存器中设置系统功能调用号; 2·在指定寄存器中设置入口参数; 3·用 INT 21H指令执行功能调用; 4·根据出口参数分析功能调用执行情况。 只是有些系统功能调用比较简单,不需要设置入口参数,或者没有出口参数。 表 C-3列出了各系统功能调用号对应的功能和入口参数、出口参数。 1)设备管理 设备管理包括键盘输入、显示输出、设置磁盘缓冲区、选择当前盘等 12条功能调用。 这里需要指出 09H、0AH和 03H、04H这 4个功能调用的使用注意点。 09H是用来输出字符串的功能调用,要求用 DS和 DX指出要显示的字符串的首地址, 另外,要注意用$作为显示字符串的结束符。 0AH是输入 1行键盘字符的功能调用。使用 0AH功能时,入口参数中,要求用 DS和 DX寄存器给出输入缓冲区的首地址,并且在缓冲区第 1个字节中预设置缓冲区长度。功能 调用被执行后,缓冲区第 2 个字节中为实际输入字符信息的长度,从第 3 个字节开始才是 输入的字符串。 03H和 04H分别执行异步通信的输入/输出功能。执行输入功能时,输入字符作为出口 参数放在 AL中;执行输出功能时,输出字符作为入口参数放在 DL中。要求异步通信口设 置的初始状态为 2400波特、无校验位、8个数据位和 1个停止位。 2)目录管理 目录管理包括查找目录项、更改目录项、建立子目录、删除子目录等功能。这些功能 调用的用法都比较简单,只须对 56H和 43H这 2个功能调用作一说明。 56H 功能调用是更改文件名字的,要求设置入口参数时,将 DS 和 DX 寄存器指向旧 路径名,将 ES和 DI寄存器指向新路径名,另外,要求新旧路径名前的驱动器名相同。 43H 是用来显示和修改文件属性的功能调用,用户程序常用此调用来使某个文件改变 属性,使它成为只读文件或隐含文件。属性代码为:00--普通文件;01--只读文件; 02--隐含文件;04--系统文件。 3)文件管理 文件管理是 MS-DOS 提供给用户的最重要的系统功能调用。这里,一共有两组文件 管理功能。一组是用 24H以下的功能调用号提供的,这组功能调用和 8位微型机操作系统 CP/M 的功能调用兼容;另一组是用 3CH 以上的功能调用号提供的,这些功能调用是 MC -DOS所独有的。 存取文件时,首先要用文件控制块 FCB使操作系统知道要存取的哪个用户程序文件。 《微机系统与接口》实验参考资料之一 15 在 FCB中,用户程序指出存取文件所在的磁盘名以及文件名、扩展名,还指出 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 长度、 相对记录号和当前块号(或者随机记录号)。 读文件时,要有一个内存区域用来存放文件内容,称之为磁盘缓冲区,将读出的数据 保存在磁盘缓冲区;写文件时,由用户程序先把数据传送到磁盘缓冲区。对于顺序存取方 式和普通随机存取方式来说,每次只传输 1 个记录,因此,磁盘缓冲区只要 1 个记录大小 就行了,而对于随机分块存取方式和文件代号法存取方式来说,磁盘缓冲区往往要开辟得 很大。 读/写文件前,必须打开文件。 在存取文件后,尤其是写文件后,一定要有关闭文件操作。通过关闭文件,使操作系 统确认此文件放在磁盘哪一部分。如果写文件时忘了关闭文件,那就会导致写入的文件不 完整。不过读文件时,关闭文件这一步是可有可无的。 表 C-3 MS-DOS的功能调用 调用号 功 能 入 口 参 数 出 口 参 数 01 键盘输入字符 AL=输入字符 02 显示器输出字符 DL=输出字符 03 串行设备字符输入 AL=输入字符 04 串行设备字符输出 DL=输出字符 05 往打印机输出字符 DL=输出字符 06 直接控制台输入/输出 DL=FFH(输入) DL=字符(输出) AL=输入字符 07 直接控制台输入(无回送) AL=输入字符 08 键盘输入(无回送) AL=输入字符 09 显示字符串 DS:DX=缓冲区首址 0AH 输入字符串 DS:DX=缓冲区首址 0BH 检查键盘输入状态 AL=00H,无键入 AL=FFH,有键入 0CH 清除键盘输入缓冲区 0DH 磁盘设置和初始化 选 A为默认驱动器 0EH 选择当前盘 DL=盘号 AL=系统中驱动器数 0FH 打开文件 DS:DX=FCB首址 AL=00H,成功 AL=FFH,未打开指定文件 10H 关闭文件 DS:DX=FCB首址 AL=00H,找到 AL=FFH,未找到 11H 查找第一个目录项 DS:DX=FCB首址 AL=00H,找到 AL=FFH,未找到 12H 查找下一个目录项 DS:DX=FCB首址 AL=00H,找到 AL=FFH,未找到 13H 删除文件 DS:DX=FCB首址 AL=00H,找到 AL=FFH,未找到 14H 顺序读一个记录 DS:DX=FCB首址 AL=00H,成功 AL=01H,文件结束 AL=02H,缓冲区太小 《微机系统与接口》实验参考资料之一 16 调用号 功 能 入 口 参 数 出 口 参 数 AL=03H,读得残缺记录 15H 顺序写一个记录 DS:DX=FCB首址 AL=00H,成功 AL=FFH,磁盘满 16H 建立文件 DS:DX=FCB首址 AL=00H,成功 AL=FFH,目录区满 17H 文件改名 DS:DX=FCB首址 (DS:DX+17)=文件 新名字首址 AL=00H,成功 AL=FFH,不成功 18H 由 DOS内部调用 19H 取当前盘盘号 AL=当前盘的盘号 1AH 设置磁盘缓冲区 DS:DX=缓冲区首址 1BH 取当前盘文件分配表 FAT 的有关信息 DS:BX=FAT首址 DX=FAT表项数 AL=每簇扇区数 CX=每扇区字节数 1CH 取指定盘文件分配表的 有关信息 DL=盘号 DS:BX=FAT首址 DX=FAT表项数 AL=每簇扇区数 CX=每扇区字节数 1D~20H 由 DOS内部调用 21H 随机读一个记录 DS:DX=FCB首址 AL=00H,成功 AL=01H,文件结束 AL=03H,残缺记录 22H 随机写一个记录 DS:DX=FCB首址 AL=00H,成功 AL=FFH,盘满 23H 取文件长度 DS:DX=FCB首址 (FCB+33)=记录数 且 AL=00H,成功 否则 AL=FFH,未找到 24H 设置随机记录号 DS:DX=FCB首址 25H 设置中断向量 DS:DX 指定 4字节地址 AL=中断类型号 26H 由 DOS内部调用 27H 随机分块读 DS:DX=FCB首址 CX=所读记录数 AL=00H,成功 AL=01H,文件结束 AL=03H,残缺记录 28H 随机分块写 DS:DX=FCB首址 CX=所写记录数 AL=00H,成功 AL=FFH,盘满 29H 分析文件名 DS:SI=命令行首址 ES:DI=缓冲区首址 ES:DI=FCB首址 且 AL=0,则为单义名 AL=FFH,无效 AL=01H,广义文件名 2AH 取日期 CX和 DX中为日期 《微机系统与接口》实验参考资料之一 17 调用号 功 能 入 口 参 数 出 口 参 数 2BH 设置日期 CX和 DX中为日期 AL=00H,成功 AL=FFH,失败 2CH 取时间 CX和 DX中为时间 2DH 设置时间 CX和 DX中为时间 AL=00H,成功 AL=FFH,失败 2EH 设置校验状态,从而使 每次写操作时进行校验 DL=0,AL=1,校验 AL=0,去校验 2FH 取磁盘缓冲区首址 ES:BX=缓冲区首址 30H 取 DOS版本号 AL=版本号 AH=发行号 31H 终止用户程序并驻留内存 DX=程序长度 AL=退出码,即 00为正常退出 01为 CTRL-C退出 02为出错退出 32H 由 DOS内部调用 33H 设置和检查 CTRL-Break功能 如设置,则 AL=01,且 DL=00 如去除,则 AL=0,且 DL=01 如检查,则 AL=00 DL=01,有此功能 DL=00,无此功能 34H 由 DOS内部调用 35H 取中断向量 AL=中断类型号 ES:BX=中断向量 36H 检测磁盘可用空间 DL=盘号 BX=可用簇数 DX=盘上的总簇数 CX=每扇区字节数 AX=每簇扇区数 37H 由 DOS内部调用 38H 取国别标志 DS:DX=缓冲区首址 AL=0 DS:DX处为国别信息 39H 建一个子目录 DS:DX指向路径名 CY=0,成功 CY=1,失败 3AH 删除一个子目录 DS:DX指向路径名 CY=0,成功 CY=1,失败 3BH 改变当前目录 DS:DX指向新路径名 CY=0,成功 CY=1,失败 3CH 建立文件 DS:DX=路径名首址 CX=文件属性 AX=文件代号或出错代码 3DH 打开文件 DS:DX=路径名首址 AL=0为读打开 AL=1为写打开 AX=文件代号或出错代码 《微机系统与接口》实验参考资料之一 18 调用号 功 能 入 口 参 数 出 口 参 数 AL=0为读/写打开 3EH 关闭文件 BX=文件代号 3FH 读文件 BX=文件代号 CX=所读字节数 DS:DX=缓冲区首址 AX=实际读取字节数 40H 写文件 BX=文件代号 CX=所写字节数 DS:DX=缓冲区首址 AX=实际写入字节数 41H 删除文件 DS:DX=路径名首址 42H 移动文件读/写指针 BX=文件代号 CX:DX=位移量 AL=0,绝对移动 AL=1,相对
本文档为【Masm编译与调试过程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_963830
暂无简介~
格式:pdf
大小:185KB
软件:PDF阅读器
页数:19
分类:互联网
上传时间:2012-03-01
浏览量:33