Object filename[.OBJ]:回车;输入目标程序文件名,一般直接回车,名同源程序。 Source fisting[NUL.LST]:MY回车;输入一名,生成列表文件。若直接回车,就不生成该文件。 Cross-reference[NUL.CRF]:MY回车;生成交叉引用文件。若直接回车,就不生成该文件。 这时便开始对源程序进行汇编。如源程序有错误,则给出有关错误信息(错误语句,错误代码,错误性质)。因此,要返回到文本编辑中(如EDIT)进行修改源程序,再汇编,直到没有错误为止,此时显示: Warning Severe Errors Errors 0 0
关于列表文件(. LST)和交叉引用文件(. CRF)的用途可参阅教科书及其它资料;我们一般不需要生成它们,而只要目标程序(. OBJ)。 方式2. 使用命令行汇编: 格式1:
C>MASM MY,,,; 回车。它等效与下列命令,生成目标,列表,交叉文件 C>MASM MY.ASM ,MY.OBJ,MY.LST,MY.CRF回车。 格式2:
C>MASM MY ;回车 只生成目标文件(OBJ),注意:分号‘;’不可缺少。 [连接程序LINK的操作]
由汇编程序建立的目标码文件还不能直接上机运行,必须经过连接之后才能成为可执行文件(. EXE)。(详细内容参阅教科书第13章第2节)。 格式:C>LINK目标文件名;回车 或C>LINK目标文件名;回车 屏幕显示LINK版本说明,以下按屏幕提示输入:
Object Modules[.OBJ]:目标文件名;若LINK后有文件名,则直接回车。 Run File[文件名.EXE]:回车;可执行文件名同目标文件。 List File[NUL.MAP]:文件名 回车;内存分布图文件,若不要,可直接回车。 Libraries[.LIB]:回车;没有库文件,直接回车。 如果有多个要连接的目标文件,应一次键入,每个目标文件名用‘+’号相间隔(本实验例题都是一个文件)。当回答完以上问题后,连接程序开始连接。若连接过程有错,则显示有关错误信息。如: Warning:No stack segment There was 1 error detected 在源程序中美哟定义用户堆栈段,会出现差警告信息,可忽略它。但是,若出现Severe error,必须重新编辑源程序找出错误原因,然后重新汇编,再经过连接,直至无错。 【运行程序】 连接成功后生成的可执行(.EXE)文件,可以在DOS提示符下直接键入文件名(不必要扩展名)运行此程序。 如:运行例1(假设生成的可执行文件名为EXAM1.EXE) C>EXAM1 回车 屏幕显示:HELL,WELLCOM! DO YOU LIKE COMPUTER?(Y/N) ??
实验二 调试程序DEBUG的使用
DOS提供的动态调试程序DEBUG是一个专门为汇编语言设计的调试工具;它有很强的功能,可用来调试和修改汇编语言可执行程序。在DEBUG管理下,可单步执行程序;也可以在执行程序中设置断点;可以显示和修改指定范围的内存内容;可以显示和修改cpu内部寄存器和标志位的内容;还可以直接用汇编语言编写可执行程序,并可存盘等。因此很容易寻找程序中的错误,一旦发现错误,既可以在DEBUG中修改,也可重复前述的编辑,汇编,连接过程,直到程序能够正确运行为止。
[实验目的]
1.掌握DEBUG的主要命令。
2.学习使用DEBUG调试汇编语言程序。 [实验内容]
1.在DEBUG中输入一段汇编语言程序;用DEBUG命令对它
进行调试,存盘。
2.用DEBUG调试一个上次存盘的可执行文件。 [DEBUG主要命令的使用说明] 1.DEBUG的启动
C>DEBUG[D:][PATH][FILENAME[.EXE]]
号中是任选项。进入DEBUG后,提示符是“_”。
2.DEBUG命令 (1)汇编命令A
-A[地址]
上一个地址;
若前面未用过A命令,则从cs:100单元开始。输入汇编语句,
A命令把它们汇编成机器码后,从指定的地址单元开始连续存放。进入A命令后输入一段程序(以下段址cs是假设的,不同机器和
不同情况下此值不同):
-0D7B:0100 JMP 110 -0D7B:0102 DB 41,42,43,7 -0D7B:0106 DB 61,62,63,7,0D,0A -0D7B:010C DB 'OK',0D,0A -0D7B:0110 MOV SI,102 -0D7B:0113 MOV CX,0D -0D7B:0116 MOV AH,2 -OD7B:0118 MOV DL,[SI] -OD7B:O11A -0D7B:011C
INT 21 INC SI
118
-OD7B:011D LOOP
-0D7B:011F MOV AH,4C -OD7B:0121 INT 21 -0D7B:0123 ^C;结束 -
用复合键CTRL+C结束汇编命令A,返回DEBUG提示符_。 注:1.输入时,一行回车后,若发现错误,只有在'_A地址回
车'后重新输入。
2.DEBUG中不允许用标号,只能用地址值。 3.DEBUG中数字都是16进制。 (2)反汇编命令U
格式:_U[地址]回车或_U[首地址][末地址]回车
把一段机器码反汇编成汇编语言指令形式。如上述汇编命令A
结束后执行: _U回车或_U100回车显示如下: 0D7B:0100 0D7B:0102 0D7B:0103 0D7B:0104 0D7B:0105 0D7B:0106 0D7B:0107 0D7B:0108 0D7B:0109 0D7B:010A 0D7B:010D 0D7B:010E 0D7B:0111 0D7B:0113 0D7B:0116 0D7B:0118 0D7B:011A
0D7B:011C EBOE JMP 0110 41 INC CX 42 INC DX 43 INC BX 07 POP ES 61 DB 61 62 DB 62 63 DB 63 07 POP ES
0D0A4F OR AX , 4F0A 4B DB 4B 0D0ABE OR
AX,BE0A
0201 ADD AL,[BX+DI] B90D00 MOV CX,000D B402 MOV AH,02 8A14 MOV AH,02 CD21 INT 21 46 INC SI
0D7B:011D E2F9 LOOP 0118
0D7B:O11F B44C MOV AH,4C 0D7B:0121 CD21 INT 21 ……
显示一屏后,若继续用U命令,则会接上一屏最后地址继续反
汇编显示。
(3)显示和修改寄存器的命令R
格式:_R回车显示cpu内部所有寄存器的内容和全部标志位
状态。
格式:_R寄存器名回车显示指令寄存器内容并可在':'后键入
新值,或直接回车。
如:_R CX CX:0060
:0A25
PSW的各标志位状态用符号依次表示如下: 置位(1) 复位(0)
OV DN EI NG IR AC PE CY NV UP DI PL NZ NA PO NC
命令格式:_RF
位,则要键入此标志相反符号,输入顺序无关,符号之间可无空格,所有输入结束按回车。