收藏 分享(赏)

从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于.doc

上传人:11xg27ws 文档编号:8788321 上传时间:2019-07-11 格式:DOC 页数:8 大小:43KB
下载 相关 举报
从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于.doc_第1页
第1页 / 共8页
从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于.doc_第2页
第2页 / 共8页
从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于.doc_第3页
第3页 / 共8页
从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于.doc_第4页
第4页 / 共8页
从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、从如何建立源文件到进行调试作下简要的介绍,并配例题说明。由于本人水平有限,在下文在如有错误及可以进一步修改的地方请大家指出 汇编语言上机过程: 一、上机前的软件准备:MS-DOS 操作系统(如:MSDOS6.22 , MSDOS7.0 等)文本编辑器 (如:EDIT.COM , TURBO.EXE , TC.EXE , C.EXE 等)汇编程序 (如:MASM.EXE , ASM.EXE 等)连接程序 (如:LINK.EXE 等)调试程序 (如:DEBUG.EXE 等)二、汇编程序建立过程:a.建立汇编源程序通过b.编译为目标文件 d.连接为可执行文件 c.不通过,重新修改(语句错误) f.不

2、正确,用调试工具调试,重新修改(逻辑错误) e 运行正确g.完成三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明PROCEDURE a:建立汇编源程序(即:建立 文件名.asm)这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。将源程序代码录入计算机的方法很多,下面将介绍具体方法。 1.通过 MD-DOS 自带的 EDIT.EXE 文本编辑器进行输入,在 DOS 提示符下键入:EDIT 回车,这时如果你系统内可调用时,EDIT 的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个

3、文件名,形式:filename.asm ;(其中 filename 为你起的文件名,由 1-8 个字符组成),asm 是为汇编程序识别而必须加上去的,不可更改。存盘后在 DOS 下可用 DOS 命令 DIR 来查看,如果看到了所存的文件存在,就可以进行进程 b。2.如果你的系统中没有 EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用 c 语言和 pascal 语言的文本编辑器来编辑,最后将文件存为 filename.asm 的形式即可。PROCEDURE b:编译目标文件(即:编译为.obj .lst .crf 文件)这个过程计算机将把你编的正确的源代码编译为机器语言、程序清单及交叉

4、引用表的目标文件。如果此时你的程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,你可根据提示去逐一修改。现介绍具体过程:在 DOS 提示符下键入 MASM filename 回车(注:你系统内的汇编程序为 MASM.EXE,如果你系统的汇编程序为 ASM.EXE 时,便将命令变为 ASM filename 回车。其中 filename 为你刚才在 PROCEDURE a 中建立的文件名)这时汇编程序的输出文件可以有三个(分别:.obj .lst .crf),便会出现三次提问,在这可以一路回车即可。下面显示的信息是源程序中的错误个数,如果为 0 则表示顺利通过,就可进行进程 c。但如果

5、不为0 就说明有错误,并指出错误出现的行,可依据这个提示去进行修改。但如果错误太多还未等看清就显示过去了,可用如下命令形将错误信息存于一个你指定的文件,再用文本编辑器去查看。 MASM filename filen (filen 为你起的一个没用过的文件名,用以存放出错信息)以后可查看 filen 来得到出错信息。PROCEDURE c:编译不通过,重新修改(错误类型:源程序语句不合法)在执行过 PROCEDURE b 后,如有出错信息时,就要我们自己按 PROCEDURE c 去做,而不能跳跃到PROCEDURE d 去,如果强行执行 PROCEDURE d 将无任何有效结果。现在就开现找错

6、吧!首先要清楚,在 PROCEDURE b 中检测出的错误均为每一条语句的语法或用法错误,它并不能检测出程序的逻辑设计(语句按排位置)错误,所以就要记好出错的行号。在记录行号后,就应再次执行 PROCEDURE a,这时和操作应是打开已编好的源程序(以 EDIT 为例:在 DOS 提示符下键入:EDIT filename.asm 回车),依据行号进行修改并存盘,再次进行汇编,直至 PROCEDURE b 通过为止。便可继续向下执行 PROCEDURE d。下面给出一些常见出错信息,以便查对:1、Register already defined 汇编内部出现逻辑错误2、Unknown symbo

7、l type 在符号语句的类型中,有些不能识别的东西3、Symbol is multi-defined 重复定义一个符号4、Symbol not defined 符号没有定义5、Syntax error 语句的语法与任何可识别的语法不匹配6、Symbol is reserved word企图非法使用一个汇编程序的保留字(例:定义 add 为一变量)7、Not proper align/combine type SEGMENT 参数不正确8、One operand must be const 这是加法指令的非法使用9、Operands must be same or 1 abs 这是减法指令的非

8、法使用10、Already have base register 试图重复基地址11、Illegal size for item 引用的项的长度是非法的,(如:双字移位)12、Illegal register value 指定的寄存器值不能放入“reg” 字段13、Must be AX or AL 某些指令只能用 AX 或 AL14、Improper use of segment reg 段寄存器使用不合法(如:mov ds,0)15、Division by 0 or overflow 给出一个用 0 作除数的表达式16、value is out of range 数值大于需要使用的17、CS

9、 register illeal usage 试图非法使用 CS 寄存器18、DUP is too large for linkerDUP 嵌套太长,以至于从连接程序不能得到所要的记录PROCEDURE d:连接为可执行文件(即:连接为.exe 或.com 文件)在这个过程中一般没有意外,如果有也就是文件名打错了。形式:在 DOS 提示符下: LINK filename 回车PROCEDURE e:运行编译好的可执行文件当 PROCEDURE d 通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。在试运行期间,要尽量试一些临界状态,看 程序是否运行稳定、结果是

10、否正确。如一切正常,便可进入 PROCEDURE g 了。可最怕的是不 OK,程序产生一些莫名其妙的结果(你可不要以为是你的计算机不听你的指挥,其实它是在一丝不苟地按照你编的程序执行。我以前总以为我的计算机出了毛病),如果是在考场上这时千万不要慌,稳住自己的情绪,先不要看计算机,静几分钟(反正时间多得是)。这时就要用到最关键、最常用的一步了,进行 PROCEDURE f 。PROCEDURE f:用调试工具调试,重新修改(逻辑错误)在这我将介绍用 DOS 中自带的调试程序 DEBUG.EXE 来进行程序调试、检查错误.首先我们要了解 DEBUG 的基本用法: 1、用于调试程序时的输入格式:DE

11、BUG FILENAME.? 回车其中 FILENAME 是主文件名,?是扩展文件名,例如我们在此前已编译好了一个文件,它的名子为:djx.exe 要对它进行调试时就在 DOS 提示符下打:DEBUG djx.exe 回车,便可见到 - 提示符,如无任何提示说明正确,可进行调试。2、DEBUG 调试过程中用到的 DEBUG 命令介绍:(注:在指令中用 括起来的内容可缺省)1)D(Dump)显示指定内存单元内容(一般用来看数据数的内容,即 DS 段):格式:d地址 从地址指定的内存单元显示 128 个字节的内容地址缺省时,显示上一个 DUMP 命令后面的内容 d 地址范围 显示指定范围内的内存内

12、容。示例:-d100 显示从 DS 段 100H 开始的内容(以十六进制显示)2)E(Enter)修改存储单元内容(一般在 DS 段)格式:e 地址 数据 用给定的数据代替指定范围的存储单元内容e 地址 修改一个指定内存单元的内容示例:-e ds:200 djxFF00AA 就可将 DS 段从 200 开始至 205 的内容替换为 64 6A 78 FF 00 AA3)G(GO)运行命令格式:-g =地址断点地址 1 断点地址 2 .断点地址 10从指定地址开始执行程序(如地址缺省从当前 CS:IP 开始),运行至断点地址 1停止,显示所有寄存器及标志位内容与下一条指令,如后面还有断点,可键入

13、 g,继续执行。示例:-g001a 则执行从当前 cs:ip 至 001a 的指令注意:地址设置必须从指令的第一字节设起。4)T(Trace)执行一条语句格式: -t =地址 从指定地址起执行一条语句后停下来,显示所有寄存器内容及标志位的值与下一条指令。如地址缺省则从当前 CS:IP 开始执行-t =地址value 从指定地址起执行 value 条指令后停止。5)P(proceed)执行一个循环;一个软中断或 call 子过程格式:-p =地址n示例: mov ah,02hmov dl,41hint 21h此时用: -p 回车后系统将显示一个字符 A,如果在这不用 P,而改用 T,那么系统将进

14、入 INT 21H 的中断调用中,出不来,这时你会误以为你的程序编错了,一定注意!6)R(register)显示并可修改寄存器内容格式:-r 显示所有寄存器内容-r 寄存器名 修改指定寄存器内容(可改:AX,BX,CX,DX,SP,BP,SI,DI,CS,DS,ES,SS,PC,IP,F)7)U(Unassemble)反汇编格式:-u 地址 从指定地址反汇编 32 个字节,若地址缺省则从当前地址汇编 32 个字节。-u 地址范围 对指定范围内的存储单元进行反汇编以上是在调试程序中可能用到的 DEBUG 命令解释,DEBUG 中还有其它命令,在检查程序中不会用到,就不再介绍了。PROCEDURE

15、 g:程序编好,那就一切 OK!交卷过关了!大吃、大睡。下面给出一个有病句的程序,希望大家和我一起调试、修改并通过:先执行 PROCEDURE a 编辑源程序实现功能:在屏幕上显示:Hello worldMy name is DJX文件名:error.asm行号: 源程序代码:1 data segment2 out1 db Hello world3 ax db My name is DJX4 data ens56 code segment7 assume cs:code;ds:data8 lea dx,out19 mov ah,210 int 21h1112 mov dl,0ah13 mov

16、ah,214 int 21h15 mov dl,0dh16 moo ah,217 int 21h1819 lea dx,ax20 mov ah,21 int 21h22 code ends在编辑完执行 PROCEDURE b 用 masm 进行编译:masm error 回车后显示如下:Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename error.OBJ:Source listing NUL.LST

17、:Cross-reference NUL.CRF:End of file encountered on input fileerror.ASM(23): warning A4085: End of file, no END directiveOpen segments: DATAerror.ASM(3): warning A4016: Reserved word used as symbol: AXerror.ASM(4): error A2105: Expected: instruction or directiveerror.ASM(16): error A2105: Expected:

18、instruction or directiveerror.ASM(19): error A2049: Illegal use of registerEnd of file encountered on input fileerror.ASM(23): warning A4085: End of file, no END directive51566 + 406450 Bytes symbol space free2 Warning Errors4 Severe Errors说明这个程序有错误,并在第 3,4,16,19,23 行有错,我们再执行 PROCEDURE c 去逐一检查第三行:3

19、ax db My name is DJX它的错误在于 AX 不能作为变量名,更正:3 out2 db My name is DJX注意刚才我们定义 AX 为变量时在后面的程序中用过变量 AX在第 19 行19 lea dx,ax在出错报告中也报第 19 行错,因为不能将 AX 的有效地址赋给 DX,更正:19 lea dx,out2这样一下就解决了两个错误第四行:4 data ens这行为一个段的结束,但语句漏打了字母,更正:4 data ends第十六行:16 moo ah,2这行也是语句打错,更正:16 mov ah,2第二十三行:出错信息:error.ASM(23): warning A

20、4085: End of file, no END directive说明本程序没有结束伪操作,更正:加入:在第七、八行加入地址标志: start:原 23 end start执行 PROCEDURE a 将源程序修改如下:data segmentout1 db Hello worldout2 db My name is DJXdata endscode segmentassume cs:code;ds:datastart:lea dx,out1mov ah,2int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hlea dx,out

21、2mov ah,9int 21hcode endsend start再次进行 PROCEDURE b 进行编译,屏幕显示:Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename error.OBJ:Source listing NUL.LST:Cross-reference NUL.CRF:51524 + 406492 Bytes symbol space free0 Warning Errors0 Se

22、vere Errors本程序在语句上已无错误。再执行 PROCEDURE d 连接为可执行文件(link error 回车),屏幕显示:Microsoft (R) Overlay Linker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File ERROR.EXE:List File NUL.MAP:Libraries .LIB:LINK : warning L4021: no stack segment这时 error.exe 可执行文件已存在,可以执行 PROCEDURE e 来运

23、行看一看是否正确在 dos 提示符下键入:error 回车(小心!)屏幕显示:乱码,并死机。reset My computer!说明程序在逻辑上有错误,并且严重。这是就要用 PROCEDURE f,用调试工具调试,查找错误。在 DOS 提示符下键入:debug error.exe 回车屏幕出现 - 提示符,这时就可以用 DEBUG 的命令来找错误了,我首先用 d 命令来查看数据区和内容,发展所定义的两个字符串并不在数据段的段首,而在数据段内的100h 位置上,这时才想起 masm 有一个不成文的规定,那就是在定义完数据段后,所定义的变量均向后100h 个单元,需要我们将 ds 段寄存器置位,在

24、程序的 start:后面加上如下指令:(执行 PROCEDURE a)mov ax,datamov ds,ax再执行 PROCEDURE b,PROCEDURE d,PROCEDURE e 来运行程序,屏幕显示:换行My name is DJX 及乱码,并死机。(又要重新启动!)再次执行 PROCEDURE a 检查程序,发现:1.汇编语言有规定每个字符串应由$结尾2.在输出第一个串的语句中的 AH 子功能号应为 09H将以上两点改正。再执行 PROCEDURE b,PROCEDURE d,PROCEDURE e 来运行程序,屏幕显示:Hello worldMy name is DJX 并死机

25、,不能返回 DOS原因分析,在程序中没有返回 DOS 的指令,更正:用 PROCEDURE a 来进行编辑:用 DOS 21H 中断的 4cH 子功能便可返回 DOS,在 code ends 前加:mov ah,4chint 21h再执行 PROCEDURE b,PROCEDURE d,PROCEDURE e 来运行程序,屏幕显示:Hello wordMy name is DJX并返回 DOS成功!这样一个程序就调试完成,并正确。下面是正确的源程序:data segmentout1 db Hello world$out2 db My name is DJX$data endscode segmentassume cs:code;ds:datastart:mov ax,datamov ds,axlea dx,out1mov ah,9int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hlea dx,out2mov ah,9int 21hmov ah,4chint 21hcode endsend start以上这个程序很简单,只是为了说明实现汇编语言的上机编程及调试过程,汇编语言须多练习才能掌握它的特点,以便顺利通过考试。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报