汇编语言源程序的运行过程

上传人:cn****1 文档编号:488469336 上传时间:2024-01-15 格式:DOCX 页数:12 大小:41.90KB
返回 下载 相关 举报
汇编语言源程序的运行过程_第1页
第1页 / 共12页
汇编语言源程序的运行过程_第2页
第2页 / 共12页
汇编语言源程序的运行过程_第3页
第3页 / 共12页
汇编语言源程序的运行过程_第4页
第4页 / 共12页
汇编语言源程序的运行过程_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《汇编语言源程序的运行过程》由会员分享,可在线阅读,更多相关《汇编语言源程序的运行过程(12页珍藏版)》请在金锄头文库上搜索。

1、汇编语言源程序的运行过程一、概述无语法错误的汇编语言源程序NAME ASM (以ASCI I码形式存盘)在 DOS 管理下键入汇编语言 源程序编辑程序EDLIN.EXE ,编辑过程,汇编程序MASMEXE.目标(机器码)文件汇编过程NAMEOBJI连接程序LINKEXE片可执行文件连接过程nameEXE调试程序DEBUG EXE 无逻辑错误的可执行文调试过程件 NAME EXE二、具体操作过程1编辑过程在计算机“附件”的“记事本”中,用word编辑汇编语言源程序,比用编辑程序EDLIN 要方便得多。因为使用后者,必须熟记它的各种命令及其功能。使用前者的操作步骤如下:第一步:编辑并建立扩展名为a

2、ms的文件开始一程序一附件一记事本一键入汇编语言源程序(也可用Ctrl+C及Ctrl+V拷贝已 有程序)f文件f另存为f出现“另存为”窗口f在文件名:处为该文件命名,并切 记:将扩展名由txt改为.asmf在“另存为”窗口里的“我的电脑”中找到含有MASM.EXE、 LINK.EXE以及DEBUG.EXE这三个工具的文件夹(如,8086experi),并双击之f该文件 夹名便出现在“保存在:”处f保存(至此,该文件夹中将出现你所编辑的扩展名为asm 的汇编语言源程序。此时的源程序以ASCII码形式存盘,而非机器码)f关闭记事本。注意:上述三个工具及用户程序必须在同一文件夹中。此后,为显示,打印

3、或修改该程序,双击该程序的图标即可。第二步:在DOS下运行EDLIN,以便查找并排除源程序中可能存在的语法错误。window状态f开始f运行f打开:cmd/f确定f出现DOS提示符:C:指定存有你的程序的文件夹所在盘(如D盘)为当前盘D: /fD:cd文件夹名/fD:文件夹名edlin文件名.asm /End of input file* L/此处为选择性操作显示 24 条指令* 25L/显示从第25 条指令开始的另24 条指令* E/按结束编辑命令 E 之前,生成了一个扩展名为$的文件;结束编辑状态之后,该文 件的扩展名由$变为 BAK。特别指出:即使不用EDLIN进行编辑,也必须进行此步。

4、否则,若源程序中存在语 法错误,下一步进行汇编后,不予提示,也不生成机器码文件,无法进行再下一步的连接, 致使程序无法运行。除非源程序中无任何语法错误。2汇编过程D:文件夹名masm文件名;/汇编程序负责将源程序文件(扩展名为.ASM)翻译为二进制的机器码文件(扩展名 为.OBJ)。在汇编过程中,计算机对源程序文件要进行语法检查,若有错误,在汇编结束后,屏 幕上将出现错误信息提示,这时需要返回到编辑过程,对有语法错误的语句进行修改,修 改后的源程序需要重新汇编,直到汇编结束时无语法错误为止。注意:汇编过程不能发现 程序中的逻辑错误。汇编结束时,生成扩展名为OBJ的文件(即CPU可识别的目标(o

5、bject)文件,又称 机器码文件)。若在编辑阶段中留有任何语法错误未改,则不能生成OBJ文件,从而无法 往下进行。3连结过程D:文件夹名Link文件名;/我们学习汇编的主要目的,就是通过用汇编语言进行编程而深入地理解计算机底层的 基本工作机理,达到可以随心所欲地控制计算机的目的。基于这种考虑,我们的编程活动, 大都是直接对硬件进行的。我们希望直接对硬件编程,却并不希望用机器码编程。我们用 汇编语言编程,就要用到:编辑器(Edit)、编译器(Masm)、连接器(Link)、调试工具 (Debug)等工具,而这些工具都是在操作系统控制下运行的程序,所以我们的学习过程 必须在操作系统的环境中进行。

6、而操作系统,使用了许多工具,这势必要牵扯到操作系统、 编译原理等方面的知识和原理。我们只是利用这些环境、工具来方便我们的学习,而不希 望这些东西分散了我们的注意力。所以,对于涉及到而又不在本课程学习内容之中的东西, 只做简单的解释。连接的作用有以下几个:当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件; 程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文 件连接到一起,生成一个可执行文件; 一个源程序编译后,得到机器码的目标文件,目标文件中的有些内容还不能直接 用来生成可执行文件,需通过连接程序

7、将这些内容处理为最终的可执行信息。 所 以,既便只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也 必须用连接程序对目标文件进行处理,生成可执行文件。注意,对于连接过程,可执行的目标文件是我们要得到的最终结果。LINK把汇编产生的目标程序(扩展名为.OBJ)转换为一个可执行文件(扩展名 为.EXE)。如果LINK运行结束时给出错误标志,这时仍需返回到编辑过程,修改源程序后重新 汇编、连接,直到LINK运行结束时,不显示错误标志为止。连接后,若显示:“Warning: no stack segments” 可不予理采。4调试过程D:文件夹名debug文件名.exe/出现调试状态提示符

8、,表示已进入调试阶段。这时已存盘的代码段的机器码及其数据段的数据便由硬盘调入了内存,供调试用,但 程序尚未执行。CS已自动赋值,但DS和SS、ES (如果用到的话)尚未赋值(这三个段 寄存器是通过程序的运行对其赋值的)。三、DEBUG调试程序的使用DEBUG调试程序的功能十分强大,在DEBUG的控制下,操作人员可以通过命令直 接输入汇编源程序,并用相应命令将其汇编成机器语言程序;然后调试并运行该程序,这 样免去使用 MASM 和 LINK 程序的麻烦,因而调试周期短,除此之外,更重要的是,使 用DEBUG,它能使程序设计人员触及到机器的内部,能观察并修改寄存器和存储单元的 内容,能监视目标程序

9、的执行情况,便于操作人员调试程序。然而由于在DEBUG控制下,只宜编写较小的程序,编写较大程序很不方便,不便于 程序的分块设计,它不具备编写大程序所需的编辑功能。因而,人们通常使用DEBUG来 调试程序,而很少用DEBUG来编写较大程序。1使用DEBUG调试程序的条件在你所使用的硬盘或软盘上,必须有DEBUG.EXE这个文件。2 进入与退出DEBUG在进入DEBUG后,出现提示符“一”此时CPU各寄存器内容处于初始状态(注意: 此时程序尚未执行):CS:保存程序开始运行段的段基值。IP:保存第一条要执行的指令的偏移量。SS:保存程序段定义语句中组合类型指定作堆栈段的段基值。SP:保存堆栈底部+

10、1单元的偏移量。DS、ES:保存程序段前缀的(PSP)的段基值。标志寄存器:各标志位均为0(复位)状态。如需退出DEBUG,返回DOS操作系统,可使用:Q3程序连续运行的命令(1)在DEBUG下运行时:G=CS:0 (不返回 DOS,显示“Program terminated normally” 不保留运行结果)G=CS:0,指令INT 21H所在地址(不返回DOS,保留运行结果)(2)在 DOS 下运行时:D:文件夹名不带扩展名的文件名(返回DOS)注意:一旦返回DOS,代码段、数据段以及寄存器内容均消失。4反汇编命令U已装入内存的可执行目标文件,可以用反汇编U命令将其转换成相应的源程序。从

11、而 可以找出各段寄存器之值,以供调试用。-u .CS u 9?33:OOO B8300B 0B33:0003 8ED8 0B33:0005 B8310B 0B3 3:0008 8EDG 0B33:000A BC1C00 OB33:OOOD E8O5OO 0B33:0010B8004C 0B33:0013 CD21 OB33:OO35 5O 0B33:0016 53 0B33:0()17 51 0B33:001S56 0B33:0019 57 0B33:001A9C OB33:001BBEOOOO 0B33:00lE BF0400MOVAX,OB30 今 DJMOV DSAXMOV AX,0B3

12、1 今&MOV SS,AXMOV . SR001CCALL 0015MOV AXt4C00INT 21PUSH AXPUSH BXPUSH CXPUSH SIPUSH DIPUSHFMOVSI,0000MOV 01,0004由第一条指令可知:CS=0B33从第一、二条指令可看出: DS=0B30第三、四条指令表明: SS=0B31每个反汇编命令U只能对33个字节进行反汇编。如有必要,可从断点处(此例的断 点是0B33: 0021)继续进行反汇编,为此只需键入命令U即可。-u0b33:00210B33:0021 BB08000B33:0024 8BOEOCOO0B33:0028 F8OB33:0

13、029 8B040B33;002B 13050B33:002D 460B33:002E46OB33:002F47OB33:0030 470B33:0031 8907OB33:0033 430B33:0034 430B33:0035 E2F20B33:0037 9DOB33:0038 5F0B33:0039 5E0B33:003A590B33:O03B 5BOB33:003C 580B33:003DC3OB33:003E 308OCFO2欲从某存贮单元开始进行反汇编的命令如下U 该单元的段基址:偏移量例如:MOVBK0008MOVCX,OOOCCLCMOVAX,SIADCAX,DIINCSIIN

14、CSIINCDIINCDIMOVBX;AXINCBXINCBXLOOP0029POPFPOPDIPOPSIPOPCXPOPBXPOPAXRETXOR BX+SimCFJAL5显示命令 D 或 R(1)显示内存单元内容D命令命令格式:D地址或D范围其中,D是命令字母,地址或范围都是为了指定要显示的存储单元的范围。 例如:为显示代码段的内容:DCS:O;可显示由CS:O存贮单元开始的128个存贮单元的内容。为显示数据段的内容:DDS:0DDS:100D100 DDS:100,110110H)。;可显示由DS:0开始的128个存贮存单元的内容。;从DS:100H开始显示80H个字节单元内容。;用上次

15、使用的段寄存器显示80H个字节单元内容。;从DS:100H开始显示11H个字节单元内容(显示范围为100H到显示示例如下:dds:0OAD40000 CD 20 00 9F OO SA FO FE0AD4:O010 CA 07 56 01 07 07 GA 07 OAD4 ;0020 FF FF FF FF FF FF FF FF0AD4:OO3O CA 07 14 00 18 00 D4 0A0AD4:0040 06 00 00 00 00 00 00 000AD4 :0050 CD 21 CB 00 00 00 00 00OAD4;0060 20 20 20 00 00 00 00 000AD4:0070 20 20 20

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号