收藏 分销(赏)

汇编语言上机指导.ppt

上传人:仙人****88 文档编号:14119067 上传时间:2026-06-26 格式:PPT 页数:15 大小:60.50KB 下载积分:10 金币
下载 相关 举报
汇编语言上机指导.ppt_第1页
第1页 / 共15页
汇编语言上机指导.ppt_第2页
第2页 / 共15页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,汇编语言上机指导及示例、习题,汇编语言上机过程,一、上机前的软件准备:,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.,不正确,用调试工具调试,重新修改(逻辑错误),e,运行,正确,g.,完成,三、现在对(二)的每一个标有字母的过程,(PROCEDURE),进行详细说明,PROCEDURE a:,建立汇编源程序(即:建立 文件名,.,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,的形式即可。,PROCEDURE b:,编译目标文件(即:编译为,.,obj,.,lst,.,crf,文件)这个过程计算机将把你编的正确的源代码编译为机器语言、程序清单及交叉引用表的目标文件。如果此时你的程序有语句错误,系统将报错,并指出在第几行,什么类型的错误,你可根据提示去逐一修改。现介绍具体过程:在,DOS,提示符下键入,MASM filename,回车(注:你系统内的汇编程序为,MASM.EXE,如果你系统的汇编程序为,ASM.EXE,时,便将命令变为,ASM filename,回车。其中,filename,为你刚才在,PROCEDURE a,中建立的文件名)这时汇编程序的输出文件可以有三个(分别:,.,obj,.,lst,.,crf,),,便会出现三次提问,在这可以一路回车即可。下面显示的信息是源程序中的错误个数,如果为,0,则表示顺利通过,就可进行进程,c,。但如果不为,0,就说明有错误,并指出错误出现的行,可依据这个提示去进行修改。但如果错误太多还未等看清就显示过去了,可用如下命令形将错误信息存于一个你指定的文件,再用文本编辑器去查看。,MASM filename,filen,(,filen,为你起的一个没用过的文件名,用以存放出错信息)以后可查看,filen,来得到出错信息。,PROCEDURE c:,编译不通过,重新修改(错误类型:源程序语句不合法)在执行过,PROCEDURE b,后,如有出错信息时,就要我们自己按,PROCEDURE c,去做,而不能跳跃到,PROCEDURE d,去,如果强行执行,PROCEDURE d,将无任何有效结果。现在就开现找错吧!首先要清楚,在,PROCEDURE b,中检测出的错误均为每一条语句的语法或用法错误,它并不能检测出程序的逻辑设计(语句按排位置)错误,所以就要记好出错的行号。在记录行号后,就应再次执行,PROCEDURE a,,这时和操作应是打开已编好的源程序(以,EDIT,为例:在,DOS,提示符下键入:,EDIT,filename.asm,回车),依据行号进行修改并存盘,再次进行汇编,直至,PROCEDURE b,通过为止。便可继续向下执行,PROCEDURE d,。,下面给出一些常见出错信息,以便查对:,1,、,Register already defined,汇编内部出现逻辑错误,2,、,Unknown symbol 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,这是减法指令的非法使用,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 register,illeal,usage,试图非法使用,CS,寄存器,18,、,DUP is too large for linkerDUP,嵌套太长,以至于从连接程序不能得到所要的记录,PROCEDURE d:,连接为可执行文件(即:连接为,.exe,或,.com,文件)在这个过程中一般没有意外,如果有也就是文件名打错了。形式:在,DOS,提示符下:,LINK filename,回车,PROCEDURE e:,运行编译好的可执行文件当,PROCEDURE d,通过后,会产生一个可执行文件,这时只需运行这个程序,看它是否按你所想象那样得出结果。在试运行期间,要尽量试一些临界状态,看 程序是否运行稳定、结果是否正确。如一切正常,便可进入,PROCEDURE g,了。可最怕的是不,OK,,程序产生一些莫名其妙的结果(你可不要以为是你的计算机不听你的指挥,其实它是在一丝不苟地按照你编的程序执行。我以前总以为我的计算机出了毛病),如果是在考场上这时千万不要慌,稳住自己的情绪,先不要看计算机,静几分钟(反正时间多得是)。这时就要用到最关键、最常用的一步了,进行,PROCEDURE f,。,PROCEDURE f:,用调试工具调试,重新修改(逻辑错误)在这我将介绍用,DOS,中自带的调试程序,DEBUG.EXE,来进行程序调试、检查错误,.,首先我们要了解,DEBUG,的基本用法:,1,、用于调试程序时的输入格式:,DEBUG FILENAME.?,回车其中,FILENAME,是主文件名,,?,是扩展文件名,例如我们在此前已编译好了一个文件,它的名子为:,djx.exe,要对它进行调试时就在,DOS,提示符下打:,DEBUG,djx.exe,回车,便可见到,-,提示符,如无任何提示说明正确,可进行调试。,2,、,DEBUG,调试过程中用到的,DEBUG,命令介绍:(注:在指令中用,括起来的内容可缺省),1)D(Dump),显示指定内存单元内容(一般用来看数据数的内容,即,DS,段):格式:,d,地址,从,地址,指定的内存单元显示,128,个字节的内容,地址,缺省时,显示上一个,DUMP,命令后面的内容,d,地址范围 显示指定范围内的内存内容。示例:,-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,停止,显示所有寄存器及标志位内容与下一条指令,如后面还有断点,可键入,g,继续执行。示例:,-g001a,则执行从当前,cs:ip,至,001a,的指令注意:地址设置必须从指令的第一字节设起。,4)T(Trace),执行一条语句格式:,-t=,地址,从指定,地址,起执行一条语句后停下来,显示所有寄存器内容及标志位的值与下一条指令。如,地址,缺省则从当前,CS,:,IP,开始执行,-t=,地址,value,从指定地址起执行,value,条指令后停止。,5)P(proceed),执行一个循环,;,一个软中断或,call,子过程格式:,-p=,地址,n,示例,:,mov,ah,02h,mov,dl,41h,int,21h,此时用,:-p,回车后系统将显示一个字符,A,如果在这不用,P,而改用,T,那么系统将进入,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,中还有其它命令,在检查程序中不会用到,就不再介绍了。,1 data segment2 out1 db Hello world3 ax db My name is DJX4 data,ens,56 code segment7 assume,cs:code;ds:data,8 lea dx,out19,mov,ah,210,int,21h1112,mov,dl,0ah13,mov,ah,214,int,21h15,mov,dl,0dh16 moo ah,217,int,21h1819 lea,dx,ax,20,mov,ah,21,int,21h22 code ends,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: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: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 directive 51566+406450 Bytes symbol space free2 Warning Errors4 Severe Errors,说明这个程序有错误,并在第,3,4,16,19,23,行有错,我们再执行,PROCEDURE c,去逐一检查第三行:,3 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 A4085: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:data,start:lea dx,out1,mov,ah,2,int,21h,mov,dl,0ah,mov,ah,2,int,21h,mov,dl,0dh,mov,ah,2,int,21hlea dx,out2,mov,ah,9,int,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 Severe 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,来运行看一看是否正确在,dos,提示符下键入:,error,回车,(,小心,!),屏幕显示:乱码,并死机。,reset My computer!,说明程序在逻辑上有错误,并且严重。这是就要用,PROCEDURE f,用调试工具调试,查找错误。在,DOS,提示符下键入:,debug,error.exe,回车屏幕出现,-,提示符,这时就可以用,DEBUG,的命令来找错误了,我首先用,d,命令来查看数据区和内容,发展所定义的两个字符串并不在,数据段的段首,而在数据段内的,100h,位置上,这时才想起,masm,有一个不成文的规定,那就是在定义完数据段后,所定义的变量均向后,100h,个单元,需要我们将,ds,段寄存器置位,在程序的,start:,后面加上如下指令:,(,执行,PROCEDURE a),mov,ax,data,mov,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,并死机,不能返回,DOS,原因分析,在程序中没有返回,DOS,的指令,更正:用,PROCEDURE a,来进行编辑:用,DOS 21H,中断的,4cH,子功能便可返回,DOS,,在,code ends,前加:,mov,ah,4ch,int,21h,再执行,PROCEDURE,b,PROCEDURE,d,PROCEDURE,e,来运行程序,屏幕显示:,Hello wordMy name is DJX,data segmentout1 db Hello world$out2 db My name is DJX$data endscode segmentassume,cs:code;ds:data,start:,mov,ax,data,mov,ds,ax,lea dx,out1,mov,ah,9,int,21h,mov,dl,0ah,mov,ah,2,int,21h,mov,dl,0dh,mov,ah,2,int,21hlea dx,out2,mov,ah,9,int,21h,mov,ah,4ch,int,21hcode endsend start,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服