汇编语言源程序的运行过程复习课程
- 格式:doc
- 大小:608.50 KB
- 文档页数:16
汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。
2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。
3.练习DEBUG常用命令的使用。
4.熟悉8086的寄存器。
5.了解程序的执行过程。
二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。
2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。
3.预习使用DEBUG单步、断点及连续执行程序的命令。
三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。
本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。
DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。
简述汇编语言程序运行步骤汇编语言程序是一种低级语言,它直接操作计算机硬件资源。
了解汇编语言程序运行步骤对于理解计算机的底层工作原理以及编写高效的代码至关重要。
本文将简述汇编语言程序的运行步骤,以帮助读者对该过程有一个清晰的了解。
汇编语言程序的运行步骤可以大致分为如下几个环节:预处理、编译、汇编、链接和运行。
以下将详细描述每个步骤的功能和过程。
1. 预处理:在预处理环节,汇编语言程序会经过预处理器的处理。
预处理器主要负责处理宏定义、头文件包含、条件编译等指令,以生成一份经过预处理的源代码文件。
预处理环节的目标是去除源代码中的注释、展开宏定义、处理条件编译等操作,为后续步骤做准备。
2. 编译:编译是将预处理得到的源代码转化为汇编语言代码的过程。
编译器将预处理后的源代码进行词法分析、语法分析、语义分析等操作,生成相应的汇编语言代码。
编译器还会进行优化操作,以提高程序的执行效率。
3. 汇编:汇编是将编译得到的汇编语言代码转化为机器代码的过程。
在这一步骤中,汇编器将汇编语言代码转化为计算机可以理解和执行的二进制指令。
4. 链接:链接是将多个目标文件链接在一起,形成一个可执行文件的过程。
在这一步骤中,链接器将编译得到的目标文件与系统库文件进行链接,解析符号引用,生成最终的可执行文件。
链接的目标是生成一个包含所有必要信息的可执行文件,以便能够正确地执行程序。
5. 运行:运行是将可执行文件加载到计算机的内存中,并执行其中的指令。
在运行过程中,处理器按照指令的顺序执行程序,对数据进行相应的处理,最终得到程序的结果。
以上即为汇编语言程序的运行步骤。
通过对这些步骤的简要描述,读者可以对程序的整个运行过程有一个初步的了解。
深入理解每个步骤的原理和细节,对于编写高效的汇编语言程序至关重要。
因此,建议读者在掌握基本步骤的基础上,进一步学习汇编语言的相关知识,以提升自己的编程能力。
总结起来,汇编语言程序的运行步骤包括预处理、编译、汇编、链接和运行。
实验一汇编程序的汇编及运行1.实验目的(1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看LST文件;(3)生成OBJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验涉及知识汇编程序从编写到执行的过程编程→.ASM→编译→.OBJ→连接→.EXE→加载→内存中的程序→执行1)编写源程序用EDIT或记事本输入各段,并存储成源程序(保存在MASM目录下),扩展名为ASM。
2)对源程序进行汇编、连接操作如下:(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM 文件名(连同扩展名);(3)在系统出现的提示中输入:object filename[.obj]:按回车键。
Source listling[nul.lst]:输入:文件主名,生成lst文件,也可以不生成,直接按回车键。
Lst文件用于查看编译为目标文件的过程中产生的中间结果。
Cross-reference [nul.crf]:按回车键。
(4)如果系统没有提示出错,那么编译过程就完成了。
如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤(5)输入:link 文件主名(不要输扩展名,也可以输入扩展名.obj)run file [.exe]:按回车键。
List file [nul.map]:按回车键。
Libraries [.lib]:按回车键。
(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。
如果出现‘no stracksegment’的错误警告,不用理会。
3)执行程序(由DOS中的COMMAND命令将文件加载入内存)在DOS提示符下直接输入文件主名就可以执行文件了。
程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。
3.实验内容1)将下面的数据段输入,取名1.ASM,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
..汇编语言源程序的运行过程一、概述二、具体操作过程1.编辑过程在计算机“附件”的“记事本”中,用word 编辑汇编语言源程序,比用编辑程序EDLIN 要方便得多。
因为使用后者,必须熟记它的各种命令及其功能。
使用前者的操作步骤如下:第一步:编辑并建立扩展名为ams 的文件开始→程序→附件→记事本→键入汇编语言源程序(也可用Ctrl+C 及Ctrl+V 拷贝已有程序)→文件→另存为→出现“另存为”窗口→在‘文件名:’处为该文件命名,并切记:将扩展名由.txt 改为.asm →在“另存为”窗口里的“我的电脑”中找到含有MASM.EXE 、LINK.EXE 以及DEBUG.EXE 这三个工具的文件夹(如,8086experi ),并双击之→该文件夹名便出现在“保存在:”处→保存(至此,该文件夹中将出现你所编辑的扩展名为asm 的汇编语言源程序。
此时的源程序以ASCII 码形式存盘,而非机器码)→关闭记事本。
注意:上述三个工具及用户程序必须在同一文件夹中。
此后,为显示,打印或修改该程序,双击该程序的图标即可。
第二步:在DOS 下运行EDLIN ,以便查找并排除源程序中可能存在的语法错误。
window 状态→开始→运行→打开:cmd ↙→确定→出现DOS 提示符:C:\……>→指定存有你的程序的文件夹所在盘(如D 盘)为当前盘 D: ↙→D:\>cd 文件夹名↙→在DOS 管理下键入源程序编辑程序 无语法错误的汇编语言调试过程D:\文件夹名>edlin 文件名.asm ↙End of input file* E ↙按结束编辑命令E 之前,生成了一个扩展名为$$$的文件;结束编辑状态之后,该文件的扩展名由$$$变为BAK 。
特别指出:即使不用EDLIN 进行编辑,也必须进行此步。
否则,若源程序中存在语法错误,下一步进行汇编后,不予提示,也不生成机器码文件,无法进行再下一步的连接,致使程序无法运行。
汇编语言源程序的运行过程收集于网络,如有侵权请联系管理员删除汇编语言源程序的运行过程一、概述二、具体操作过程1.编辑过程在计算机“附件”的“记事本”中,用word 编辑汇编语言源程序,比用编辑程序EDLIN 要方便得多。
因为使用后者,必须熟记它的各种命令及其功能。
使用前者的操作步骤如下:第一步:编辑并建立扩展名为ams 的文件开始→程序→附件→记事本→键入汇编语言源程序(也可用Ctrl+C 及Ctrl+V 拷贝已有程序)→文件→另存为→出现“另存为”窗口→在‘文件名:’处为该文件命名,并切记:将扩展名由.txt 改为.asm →在“另存为”窗口里的“我的电脑”中找到含有MASM.EXE 、LINK.EXE 以及DEBUG.EXE 这三个工具的文件夹(如,8086experi ),并双击之→该文件夹名便出现在“保存在:”处→保存(至此,该文件夹中将出现你所编辑的扩展名为asm 的汇编语言源程序。
此时的源程序以ASCII 码形式存盘,而非机器码)→关闭记事本。
注意:上述三个工具及用户程序必须在同一文件夹中。
此后,为显示,打印或修改该程序,双击该程序的图标即可。
在编辑程序文件NAME ·EXE收集于网络,如有侵权请联系管理员删除第二步:在DOS 下运行EDLIN ,以便查找并排除源程序中可能存在的语法错误。
window 状态→开始→运行→打开:cmd ↙→确定→出现DOS 提示符:C:\……>→指定存有你的程序的文件夹所在盘(如D 盘)为当前盘 D: ↙→D:\>cd 文件夹名↙→D:\文件夹名>edlin 文件名.asm ↙End of input file* E ↙按结束编辑命令E 之前,生成了一个扩展名为$$$的文件;结束编辑状态之后,该文件的扩展名由$$$变为BAK 。
特别指出:即使不用EDLIN 进行编辑,也必须进行此步。
否则,若源程序中存在语法错误,下一步进行汇编后,不予提示,也不生成机器码文件,无法进行再下一步的连接,致使程序无法运行。
除非源程序中无任何语法错误。
2.汇编过程D:\文件夹名>masm 文件名;↙汇编程序负责将源程序文件(扩展名为.ASM )翻译为二进制的机器码文件(扩展名为.OBJ )。
在汇编过程中,计算机对源程序文件要进行语法检查,若有错误,在汇编结束后,屏幕上将出现错误信息提示,这时需要返回到编辑过程,对有语法错误的语句进行修改,修改后的源程序需要重新汇编,直到汇编结束时无语法错误为止。
注意:汇编过程不能发现程序中的逻辑错误。
汇编结束时,生成扩展名为OBJ 的文件(即CPU 可识别的目标(object )文件,又称机器码文件)。
若在编辑阶段中留有任何语法错误未改,则不能生成OBJ 文件,从而无法往下进行。
* L ↙显示24条指令此处为选择性操作3.连结过程D:\文件夹名>Link文件名;↙我们学习汇编的主要目的,就是通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。
基于这种考虑,我们的编程活动,大都是直接对硬件进行的。
我们希望直接对硬件编程,却并不希望用机器码编程。
我们用汇编语言编程,就要用到:编辑器(Edit)、编译器(Masm)、连接器(Link)、调试工具(Debug)等工具,而这些工具都是在操作系统控制下运行的程序,所以我们的学习过程必须在操作系统的环境中进行。
而操作系统,使用了许多工具,这势必要牵扯到操作系统、编译原理等方面的知识和原理。
我们只是利用这些环境、工具来方便我们的学习,而不希望这些东西分散了我们的注意力。
所以,对于涉及到而又不在本课程学习内容之中的东西,只做简单的解释。
连接的作用有以下几个:●当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;●程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;●一个源程序编译后,得到机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,需通过连接程序将这些内容处理为最终的可执行信息。
所以,既便只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。
注意,对于连接过程,可执行的目标文件是我们要得到的最终结果。
LINK把汇编产生的目标程序(扩展名为.OBJ)转换为一个可执行文件(扩展名为.EXE)。
如果LINK运行结束时给出错误标志,这时仍需返回到编辑过程,修改源程序后重新汇编、连接,直到LINK运行结束时,不显示错误标志为止。
连接后,若显示:“Warning: no stack segments”,可不予理采。
4.调试过程收集于网络,如有侵权请联系管理员删除D:\文件夹名>debug文件名.exe↙—出现调试状态提示符‘—’,表示已进入调试阶段。
这时已存盘的代码段的机器码及其数据段的数据便由硬盘调入了内存,供调试用,但程序尚未执行。
CS已自动赋值,但DS和SS、ES(如果用到的话)尚未赋值(这三个段寄存器是通过程序的运行对其赋值的)。
三、DEBUG调试程序的使用DEBUG调试程序的功能十分强大,在DEBUG的控制下,操作人员可以通过命令直接输入汇编源程序,并用相应命令将其汇编成机器语言程序;然后调试并运行该程序,这样免去使用MASM和LINK程序的麻烦,因而调试周期短,除此之外,更重要的是,使用DEBUG,它能使程序设计人员触及到机器的内部,能观察并修改寄存器和存储单元的内容,能监视目标程序的执行情况,便于操作人员调试程序。
然而由于在DEBUG控制下,只宜编写较小的程序,编写较大程序很不方便,不便于程序的分块设计,它不具备编写大程序所需的编辑功能。
因而,人们通常使用DEBUG来调试程序,而很少用DEBUG来编写较大程序。
1.使用DEBUG调试程序的条件在你所使用的硬盘或软盘上,必须有DEBUG.EXE这个文件。
2.进入与退出DEBUG在进入DEBUG后,出现提示符“—”。
此时CPU各寄存器内容处于初始状态(注意:此时程序尚未执行):CS:保存程序开始运行段的段基值。
IP:保存第一条要执行的指令的偏移量。
收集于网络,如有侵权请联系管理员删除SS:保存程序段定义语句中组合类型指定作堆栈段的段基值。
SP:保存堆栈底部+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命令将其转换成相应的源程序。
从而可以找出各段寄存器之值,以供调试用。
由第一条指令可知:CS=0B33收集于网络,如有侵权请联系管理员删除从第一、二条指令可看出:DS=0B30第三、四条指令表明:SS=0B31每个反汇编命令U只能对33个字节进行反汇编。
如有必要,可从断点处(此例的断点是0B33:0021)继续进行反汇编,为此只需键入命令U即可。
欲从某存贮单元开始进行反汇编的命令如下:—U该单元的段基址:偏移量例如:收集于网络,如有侵权请联系管理员删除收集于网络,如有侵权请联系管理员删除5.显示命令D或R(1)显示内存单元内容——D命令命令格式:D[地址]或 D[范围]其中,D是命令字母,[地址]或[范围]都是为了指定要显示的存储单元的范围。
例如:为显示代码段的内容:—DCS:0 ;可显示由CS:0存贮单元开始的128个存贮单元的内容。
为显示数据段的内容:—DDS:0 ;可显示由DS:0开始的128个存贮存单元的内容。
—DDS:100 ;从DS:100H开始显示80H个字节单元内容。
—D100 ;用上次使用的段寄存器显示80H个字节单元内容。
—DDS:100,110 ;从DS:100H开始显示11H个字节单元内容(显示范围为100H到110H)。
显示示例如下:在屏幕上显示内容分为3部分,左边是每一行存储单元的起始地址(段基址:偏移量),中间是各字节单元两位十六进制数内容显示,右边是把中间各字节单元用相应的ASCII码字符显示。
(2)显示寄存器内容——R命令例如:收集于网络,如有侵权请联系管理员删除收集于网络,如有侵权请联系管理员删除前两行显示的是上一条指令执行后所有CPU 内部寄存器的内容和全部标志位的状态,各标志位的复位(‘0’状态)和置位(‘1’状态)是用字符表示的,如下表所示。
(无单步标志TF )显示的第三行是表示现在CS :IP 指向的一条指令,也即是下一条即将执行的指令。
6.修改命令E(1)修改内存单元内容——E 命令此命令用于修改存储单元的内容,它有两种基本格式:(i )用命令中给定的内容表去代替指定范围的内存单元的内容:命令格式:E 地址 内容表例如:E ds: 200 BF “RST ” 7F则内容单元ds: 200到ds: 204这5个存储单元的内容,由表中指定的5个字节的内容所代替,在以DS: 0200为起始单元的连续五个字节单元中依次分别存放数据BFH ,字符‘R ’、‘S ’、‘C ’的ASCII 码和数据7FH 。
(ii )一个单元一个单元地连续修改方式命令格式:E 地址在输入了上述命令后,屏幕上显示指定单元的地址和原有的内容之后,键入新内容,为连续修改后续存贮单元的内容,可以采取下述操作;键入空格键,屏幕上显示下一个高字节单元的内容,并等待输入新的数据,如再键入空格键,则又显示更高一个字节内容,……,依次由低地址向高地址逐个字节单元进行修改,当修改完毕,按回车键,结束E命令。
(2)修改寄存器内容——R命令命令格式:R 寄存器名例如为了检查和修改寄存器AX的内容,可打入以下命令:—R AX则系统可能出现如下响应:AX 2F34M此时,若原内容不需修改,可直接键入回车键;若需要改变其内容,可输入1—4个16进制字符制,再按回车键就实现了修改。
例:—R AXAX 2F34;AX原有内容M 79FE;修改AX的内容(3)修改标志位状态命令的格式为:RF屏幕显示:OV DN EI NG ZR AC PE CY—可采取下述操作:若不需要修改任一个已设置的标志状态,可直接按回车键。