您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 汇编语言程序设计实验指导讲义
实验一汇编语言上机过程一、上机前的软件准备:MS-DOS操作系统(如:MSDOS6.22,MSDOS7.0等)文本编辑器(如:EDIT.COM,TURBO.EXE,TC.EXE,C.EXE等)汇编程序(如:MASM.EXE,ASM.EXE,TASM.EXE等)连接程序(如:LINK.EXE等)调试程序(如:DEBUG.EXE等)二、汇编程序建立过程:通过a.建立汇编源程序────→b.编译为目标文件──┬─→d.连接为可执行文件↑↓↓│c.不通过,重新修改(语句错误)││├──────────────────────┘│↑f.不正确,用调试工具调试,重新修改(逻辑错误)↓└────────────────────────────←e运行↓正确g.完成三、现在对(二)的每一个标有字母的过程(PROCEDURE)进行详细说明PROCEDUREa:建立汇编源程序(即:建立文件名.asm)这个过程就相当于我们在纸上编写源程序代码一样,只不过是将纸变为了计算机,这个过程也称源代码录入。将源程序代码录入计算机的方法很多,下面将介绍具体方法。1.通过MD-DOS自带的EDIT.EXE文本编辑器进行输入,在DOS提示符下键入:EDIT回车,这时如果你系统内可调用时,EDIT的操作画面便会出现在屏幕上,你就可在提示下进行录入了,当录入完毕后,选择存盘并给你输入的文件起一个文件名,形式:filename.asm;(其中filename为你起的文件名,由1-8个字符组成),asm是为汇编程序识别而必须加上去的,不可更改。存盘后在DOS下可用DOS命令DIR来查看,如果看到了所存的文件存在,就可以进行进程b。2.如果你的系统中没有EDIT,也可用你所熟悉的文本编辑器进行录入、编辑,如可用c语言和pascal语言的文本编辑器来编辑,最后将文件存为filename.asm的形式即可。PROCEDUREb:编译目标文件(即:编译为.obj.lst.crf文件)这个过程计算机将把你编的正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。如果此时你的程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,你可根据提示去逐一修改。现介绍具体过程:在DOS提示符下键入MASMfilename回车(注:你系统内的汇编程序为MASM.EXE,如果你系统的汇编程序为ASM.EXE时,便将命令变为ASMfilename回车。其中filename为你刚才在PROCEDUREa中建立的文件名)这时汇编程序的输出文件可以有三个(分别:.obj.lst.crf),便会出现三次提问,在这可以一路回车即可。下面显示的信息是源程序中的错误个数,如果为0则表示顺利通过,就可进行进程c。但如果不为0就说明有错误,并指出错误出现的行,可依据这个提示去进行修改。但如果错误太多还未等看清就显示过去了,可用如下命令形将错误信息存于一个你指定的文件,再用文本编辑器去查看。MASMfilenamefilen(filen为你起的一个没用过的文件名,用以存放出错信息)以后可查看filen来得到出错信息。PROCEDUREc:编译不通过,重新修改(错误类型:源程序语句不合法)在执行过PROCEDUREb后,如有出错信息时,就要我们自己按PROCEDUREc去做,而不能跳跃到PROCEDUREd去,如果强行执行PROCEDUREd将无任何有效结果。现在就开现找错吧!首先要清楚,在PROCEDUREb中检测出的错误均为每一条语句的语法或用法错误,它并不能检测出程序的逻辑设计(语句按排位置)错误,所以就要记好出错的行号。在记录行号后,就应再次执行PROCEDUREa,这时和操作应是打开已编好的源程序(以EDIT为例:在DOS提示符下键入:EDITfilename.asm回车),依据行号进行修改并存盘,再次进行汇编,直至PROCEDUREb通过为止。便可继续向下执行PROCEDUREd。下面给出一些常见出错信息,以便查对:1、Registeralreadydefined汇编内部出现逻辑错误2、Unknownsymboltype在符号语句的类型中,有些不能识别的东西3、Symbolismulti-defined重复定义一个符号4、Symbolnotdefined符号没有定义5、Syntaxerror语句的语法与任何可识别的语法不匹配6、Symbolisreservedword企图非法使用一个汇编程序的保留字(例:定义add为一变量)7、Notproperalign/combinetypeSEGMENT参数不正确8、Oneoperandmustbeconst这是加法指令的非法使用9、Operandsmustbesameor1abs这是减法指令的非法使用10、Alreadyhavebaseregister试图重复基地址11、Illegalsizeforitem引用的项的长度是非法的,(如:双字移位)12、Illegalregistervalue指定的寄存器值不能放入“reg”字段13、MustbeAXorAL某些指令只能用AX或AL14、Improperuseofsegmentreg段寄存器使用不合法(如:movds,0)15、Divisionby0oroverflow给出一个用0作除数的表达式16、Valueisoutofrange数值大于需要使用的17、CSregisterillealusage试图非法使用CS寄存器18、DUPistoolargeforlinkerDUP嵌套太长,以至于从连接程序不能得到所要的记录PROCEDUREd:连接为可执行文件(即:连接为.exe或.com文件)在这个过程中一般没有意外,如果有也就是文件名打错了。形式:在DOS提示符下:LINKfilename回车PROCEDUREe:运行编译好的可执行文件当PROCEDUREd通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。在试运行期间,要尽量试一些临界状态,看程序是否运行稳定、结果是否正确。如一切正常,便可进入PROCEDUREg了。可最怕的是不OK,程序产生一些莫名其妙的结果(你可不要以为是你的计算机不听你的指挥,其实它是在一丝不苟地按照你编的程序执行。我以前总以为我的计算机出了毛病),如果是在考场上这时千万不要慌,稳住自己的情绪,先不要看计算机,静几分钟(反正时间多得是)。这时就要用到最关键、最常用的一步了,进行PROCEDUREf。PROCEDUREf:用调试工具调试,重新修改(逻辑错误)在这我将介绍用DOS中自带的调试程序DEBUG.EXE来进行程序调试、检查错误.首先我们要了解DEBUG的基本用法:1、用于调试程序时的输入格式:DEBUGFILENAME.???回车其中FILENAME是主文件名,???是扩展文件名,例如我们在此前已编译好了一个文件,它的名字为:djx.exe要对它进行调试时就在DOS提示符下打:DEBUGdjx.exe回车,便可见到'-'提示符,如无任何提示说明正确,可进行调试。2、DEBUG调试过程中用到的DEBUG命令介绍:(注:在指令中用[]括起来的内容可缺省)1)D(Dump)显示指定内存单元内容(一般用来看数据数的内容,即DS段):格式:d[地址]从[地址]指定的内存单元显示128个字节的内容[地址]缺省时,显示上一个DUMP命令后面的内容d地址范围显示指定范围内的内存内容。示例:-d100显示从DS段100H开始的内容(以十六进制显示)2)E(Enter)修改存储单元内容(一般在DS段)格式:e地址[数据]用给定的[数据]代替指定范围的存储单元内容e地址修改一个指定内存单元的内容示例:-eds:200'djx'FF00AA就可将DS段从200开始至205的内容替换为646A78FF00AA3)G(GO)运行命令格式:-g[=地址][断点地址1[断点地址2...[断点地址10]]]从指定[地址]开始执行程序(如地址缺省从当前CS:IP开始),运行至[断点地址1]停止,显示所有寄存器及标志位内容与下一条指令,如后面还有断点,可键入g,继续执行。示例:-g001a则执行从当前cs:ip至001a的指令注意:地址设置必须从指令的第一字节设起。4)T(Trace)执行一条语句格式:-t[=地址]从指定[地址]起执行一条语句后停下来,显示所有寄存器内容及标志位的值与下一条指令。如[地址]缺省则从当前CS:IP开始执行-t[=地址][value]从指定地址起执行value条指令后停止。5)P(proceed)执行一个循环;一个软中断或call子过程格式:-p[=地址][n]示例:movah,02hmovdl,41hint21h此时用:-p回车后系统将显示一个字符A,如果在这不用P,而改用T,那么系统将进入INT21H的中断调用中,出不来,这时你会误以为你的程序编错了,一定注意!!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中还有其它命令,在检查程序中不会用到,就不再介绍了。PROCEDUREg:程序编好,那就一切OK!!!交卷过关了!大吃、大睡。下面给出一个有病句的程序,希望大家和我一起调试、修改并通过:先执行PROCEDUREa编辑源程序实现功能:在屏幕上显示:HelloworldMynameisDJX文件名:error.asm行号:源程序代码:1datasegment2out1db'Helloworld'3axdb'MynameisDJX'4dataens56codesegment7assumecs:code;ds:data8leadx,out19movah,210int21h1112movdl,0ah13movah,214int21h15movdl,0dh16mooah,217int21h1819leadx,ax20movah,21int21h22codeends在编辑完执行PROCEDUREb用masm进行编译:masmerror回车后显示如下:Microsoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[error.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:Endoffileencounteredoninputfileerror.ASM(23):warningA4085:Endoffile,noENDdirectiveOpensegments:DATAerror.ASM(3):warningA4016:Reservedwordusedassymbol:AXerror.ASM(4):errorA2105:Expected:instructionordirectiveerror.ASM(16):errorA2105:Expected:instructionordirectiveerror.ASM(19):errorA2049:IllegaluseofregisterEndoffileencounteredoninputfileerror.ASM(23):warningA4085:Endoffile,noENDdirective51566+406450Bytessymbolspacefree2WarningErrors4SevereErrors说明这个程序有错误,并在第3,4,16,19,23行有错,我们再执行PROCEDUREc去逐一检查第三
本文标题:汇编语言程序设计实验指导讲义
链接地址:https://www.777doc.com/doc-3392457 .html