汇编语言源程序的运行过程.docx
- 文档编号:1462276
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:11
- 大小:326.92KB
汇编语言源程序的运行过程.docx
《汇编语言源程序的运行过程.docx》由会员分享,可在线阅读,更多相关《汇编语言源程序的运行过程.docx(11页珍藏版)》请在冰豆网上搜索。
汇编语言源程序的运行过程
汇编语言源程序的运行过程
一、概述
二、具体操作过程
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文件夹名↙→
D:
\文件夹名>edlin文件名.asm↙
Endofinputfile
此处为选择性操作
*E↙
按完毕编辑命令E之前,生成了一个扩展名为$$$的文件;完毕编辑状态之后,该文件的扩展名由$$$变为BAK。
特别指出:
即使不用EDLIN进展编辑,也必须进展此步。
否那么,假设源程序中存在语法错误,下一步进展汇编后,不予提示,也不生成机器码文件,无法进展再下一步的连接,致使程序无法运行。
除非源程序中无任何语法错误。
2.汇编过程
D:
\文件夹名>masm文件名;↙
汇编程序负责将源程序文件〔扩展名为.ASM〕翻译为二进制的机器码文件〔扩展名为.OBJ〕。
在汇编过程中,计算机对源程序文件要进展语法检查,假设有错误,在汇编完毕后,屏幕上将出现错误信息提示,这时需要返回到编辑过程,对有语法错误的语句进展修改,修改后的源程序需要重新汇编,直到汇编完毕时无语法错误为止。
注意:
汇编过程不能发现程序中的逻辑错误。
汇编完毕时,生成扩展名为OBJ的文件〔即CPU可识别的目标〔object〕文件,又称机器码文件〕。
假设在编辑阶段中留有任何语法错误未改,那么不能生成OBJ文件,从而无法往下进展。
3.连结过程
D:
\文件夹名>Link文件名;↙
我们学习汇编的主要目的,就是通过用汇编语言进展编程而深入地理解计算机底层的根本工作机理,到达可以随心所欲地控制计算机的目的。
基于这种考虑,我们的编程活动,大都是直接对硬件进展的。
我们希望直接对硬件编程,却并不希望用机器码编程。
我们用汇编语言编程,就要用到:
编辑器〔Edit〕、编译器〔Masm〕、连接器〔Link〕、调试工具〔Debug〕等工具,而这些工具都是在操作系统控制下运行的程序,所以我们的学习过程必须在操作系统的环境中进展。
而操作系统,使用了许多工具,这势必要牵扯到操作系统、编译原理等方面的知识和原理。
我们只是利用这些环境、工具来方便我们的学习,而不希望这些东西分散了我们的注意力。
所以,对于涉及到而又不在本课程学习容之中的东西,只做简单的解释。
连接的作用有以下几个:
●当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;
●程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
●一个源程序编译后,得到机器码的目标文件,目标文件中的有些容还不能直接用来生成可执行文件,需通过连接程序将这些容处理为最终的可执行信息。
所以,既便只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进展处理,生成可执行文件。
注意,对于连接过程,可执行的目标文件是我们要得到的最终结果。
LINK把汇编产生的目标程序〔扩展名为.OBJ〕转换为一个可执行文件〔扩展名为.EXE〕。
如果LINK运行完毕时给出错误标志,这时仍需返回到编辑过程,修改源程序后重新汇编、连接,直到LINK运行完毕时,不显示错误标志为止。
连接后,假设显示:
“Warning:
nostacksegments〞,可不予理采。
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操作系统,可使用:
—Q
3.程序连续运行的命令
〔1〕在DEBUG下运行时:
-G=CS:
0〔不返回DOS,显示“Programterminatednormally〞不保存运行结果〕
-G=CS:
0,指令INT21H所在地址〔不返回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地址容表
例如:
Eds:
200BF“RST〞7F
那么容单元ds:
200到ds:
204这5个存储单元的容,由表中指定的5个字节的容所代替,在以DS:
0200为起始单元的连续五个字节单元中依次分别存放数据BFH,字符‘R’、‘S’、‘C’的ASCII码和数据7FH。
〔ii〕一个单元一个单元地连续修改方式
命令格式:
E地址
在输入了上述命令后,屏幕上显示指定单元的地址和原有的容之后,键入新容,为连续修改后续存贮单元的容,可以采取下述操作;
键入空格键,屏幕上显示下一个高字节单元的容,并等待输入新的数据,如再键入空格键,那么又显示更高一个字节容,……,依次由低地址向高地址逐个字节单元进展修改,当修改完毕,按回车键,完毕E命令。
〔2〕修改存放器容——R命令
命令格式:
R存放器名
例如为了检查和修改存放器AX的容,可打入以下命令:
—RAX
那么系统可能出现如下响应:
AX2F34
此时,假设原容不需修改,可直接键入回车键;假设需要改变其容,可输入1—4个16进制字符制,再按回车键就实现了修改。
例:
—RAX
AX2F34;AX原有容
79FE;修改AX的容
〔3〕修改标志位状态
命令的格式为:
RF
屏幕显示:
OVDNEINGZRACPECY—
可采取下述操作:
假设不需要修改任一个已设置的标志状态,可直接按回车键。
假设有一个或多个标志需要修改,那么可输入此标志的相反的值。
输入的标志的次序是无关的,输入的各标志位之间,可以没有空格,按回车键完毕修改。
各显示字符所代表的标志位的状态,见表13.1。
7.汇编命令A
对那些不含伪指令、变量、转移指令和地址标号等简单程序,可在debug下直接用A命令输入源程序。
欲退出汇编命令A,可按回车键。
然后直接用单步执行命令T执行之。
而不必在DOS控制下经编辑—汇编—连接之后再作运行。
这样,便可免去使用EDLIN时所必需熟练掌握并记住的文本编辑的各种命令。
例:
8.在DEBUG下程序运行命令G或T
DEBUG有两种程序运行方式。
〔1〕连续运行方式——G命令—g=CS:
0
命令格式:
G[=起始地址],[断点地址]
其中,[=起始地址]用于指定程序执行的起始地址:
这个地址必定是以CS为段基址,以冒号后给出的地址作为偏移量。
输入时“=〞号是必不可缺的,以区别于后面的断点地址。
当程序从给出的起始地址连接运行到预置的断点地址时,便自动停顿,并显示各存放器的容以及下一条将要执行的指令。
于是,便可利用DEBUG的各种命令来观察断点指令之前运行的结果是否正确,也可进展必要的修改。
假设命令G后,不键入起始及断点地址而直接回车,那么从当前的CS:
IP连续运行至程序完毕。
〔2〕跟踪运行方式——T命令
命令格式:
T[=地址]
其中,[=地址]为程序的运行起始地址,如命令中未指定,就以CS和IP现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 源程序 运行 过程
![提示](https://static.bdocx.com/images/bang_tan.gif)