ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:325.24KB ,
资源ID:22901411      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22901411.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言源程序的运行过程.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、汇编语言源程序的运行过程汇编语言源程序的运行过程一、概述二、具体操作过程1编辑过程在计算机“附件”的“记事本”中,用word编辑汇编语言源程序,比用编辑程序EDLIN要方便得多。因为使用后者,必须熟记它的各种命令及其功能。使用前者的操作步骤如下:第一步:编辑并建立扩展名为ams的文件开始程序附件记事本键入汇编语言源程序(也可用Ctrl+C及Ctrl+V拷贝已有程序)文件另存为出现“另存为”窗口在文件名:处为该文件命名,并切记:将扩展名由.txt改为.asm在“另存为”窗口里的“我的电脑”中找到含有MASM.EXE、LINK.EXE以及DEBUG.EXE这三个工具的文件夹(如,8086exper

2、i),并双击之该文件夹名便出现在“保存在:”处保存(至此,该文件夹中将出现你所编辑的扩展名为asm的汇编语言源程序。此时的源程序以ASCII码形式存盘,而非机器码)关闭记事本。注意:上述三个工具及用户程序必须在同一文件夹中。此后,为显示,打印或修改该程序,双击该程序的图标即可。第二步:在DOS下运行EDLIN,以便查找并排除源程序中可能存在的语法错误。window状态开始运行打开:cmd确定出现DOS提示符:C:指定存有你的程序的文件夹所在盘(如D盘)为当前盘 D: D:cd 文件夹名D:文件夹名edlin 文件名.asm End of input file此处为选择性操作 * E按结束编辑命

3、令E之前,生成了一个扩展名为$的文件;结束编辑状态之后,该文件的扩展名由$变为BAK。特别指出:即使不用EDLIN进行编辑,也必须进行此步。否则,若源程序中存在语法错误,下一步进行汇编后,不予提示,也不生成机器码文件,无法进行再下一步的连接,致使程序无法运行。除非源程序中无任何语法错误。2汇编过程D:文件夹名masm 文件名;汇编程序负责将源程序文件(扩展名为.ASM)翻译为二进制的机器码文件(扩展名为.OBJ)。在汇编过程中,计算机对源程序文件要进行语法检查,若有错误,在汇编结束后,屏幕上将出现错误信息提示,这时需要返回到编辑过程,对有语法错误的语句进行修改,修改后的源程序需要重新汇编,直到

4、汇编结束时无语法错误为止。注意:汇编过程不能发现程序中的逻辑错误。汇编结束时,生成扩展名为OBJ的文件(即CPU可识别的目标(object)文件,又称机器码文件)。若在编辑阶段中留有任何语法错误未改,则不能生成OBJ文件,从而无法往下进行。3连结过程D:文件夹名Link 文件名;我们学习汇编的主要目的,就是通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。基于这种考虑,我们的编程活动,大都是直接对硬件进行的。我们希望直接对硬件编程,却并不希望用机器码编程。我们用汇编语言编程,就要用到:编辑器(Edit)、编译器(Masm)、连接器(Link)、调试

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

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

7、segments”,可不予理采。4调试过程D:文件夹名debug 文件名.exe出现调试状态提示符,表示已进入调试阶段。这时已存盘的代码段的机器码及其数据段的数据便由硬盘调入了内存,供调试用,但程序尚未执行。CS已自动赋值,但DS和SS、ES(如果用到的话)尚未赋值(这三个段寄存器是通过程序的运行对其赋值的)。三、DEBUG调试程序的使用DEBUG调试程序的功能十分强大,在DEBUG的控制下,操作人员可以通过命令直接输入汇编源程序,并用相应命令将其汇编成机器语言程序;然后调试并运行该程序,这样免去使用MASM和LINK程序的麻烦,因而调试周期短,除此之外,更重要的是,使用DEBUG,它能使程序

8、设计人员触及到机器的内部,能观察并修改寄存器和存储单元的内容,能监视目标程序的执行情况,便于操作人员调试程序。然而由于在DEBUG控制下,只宜编写较小的程序,编写较大程序很不方便,不便于程序的分块设计,它不具备编写大程序所需的编辑功能。因而,人们通常使用DEBUG来调试程序,而很少用DEBUG来编写较大程序。1使用DEBUG调试程序的条件在你所使用的硬盘或软盘上,必须有DEBUG.EXE这个文件。2进入与退出DEBUG在进入DEBUG后,出现提示符“”。此时CPU各寄存器内容处于初始状态(注意:此时程序尚未执行):CS:保存程序开始运行段的段基值。IP:保存第一条要执行的指令的偏移量。SS:保

9、存程序段定义语句中组合类型指定作堆栈段的段基值。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已装入内存的可

10、执行目标文件,可以用反汇编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

11、存贮单元开始的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命令例如:前两行显示的是上一条指令执行后所有CP

12、U内部寄存器的内容和全部标志位的状态,各标志位的复位(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、

13、C的ASCII码和数据7FH。(ii)一个单元一个单元地连续修改方式命令格式:E 地址在输入了上述命令后,屏幕上显示指定单元的地址和原有的内容之后,键入新内容,为连续修改后续存贮单元的内容,可以采取下述操作;键入空格键,屏幕上显示下一个高字节单元的内容,并等待输入新的数据,如再键入空格键,则又显示更高一个字节内容,依次由低地址向高地址逐个字节单元进行修改,当修改完毕,按回车键,结束E命令。(2)修改寄存器内容R命令命令格式:R 寄存器名例如为了检查和修改寄存器AX的内容,可打入以下命令:R AX则系统可能出现如下响应:AX 2F34此时,若原内容不需修改,可直接键入回车键;若需要改变其内容,可

14、输入14个16进制字符制,再按回车键就实现了修改。例:R AXAX 2F34;AX原有内容 79FE;修改AX的内容(3)修改标志位状态命令的格式为:RF屏幕显示: OV DN EI NG ZR AC PE CY可采取下述操作:若不需要修改任一个已设置的标志状态,可直接按回车键。若有一个或多个标志需要修改,则可输入此标志的相反的值。输入的标志的次序是无关的,输入的各标志位之间,可以没有空格,按回车键结束修改。各显示字符所代表的标志位的状态,见表13.1。7汇编命令A对那些不含伪指令、变量、转移指令和地址标号等简单程序,可在debug下直接用A命令输入源程序。欲退出汇编命令A,可按回车键。然后直

15、接用单步执行命令T执行之。而不必在DOS控制下经编辑汇编连接之后再作运行。这样,便可免去使用EDLIN时所必需熟练掌握并记住的文本编辑的各种命令。例:8在DEBUG下程序运行命令G或TDEBUG有两种程序运行方式。(1)连续运行方式G命令 g=CS: 0命令格式:G=起始地址,断点地址其中,=起始地址用于指定程序执行的起始地址:这个地址必定是以CS为段基址,以冒号后给出的地址作为偏移量。输入时“=”号是必不可缺的,以区别于后面的断点地址。当程序从给出的起始地址连接运行到预置的断点地址时,便自动停止,并显示各寄存器的内容以及下一条将要执行的指令。于是,便可利用DEBUG的各种命令来观察断点指令之

16、前运行的结果是否正确,也可进行必要的修改。若命令G后,不键入起始及断点地址而直接回车,则从当前的CS:IP连续运行至程序结束。(2)跟踪运行方式T命令命令格式:T=地址其中,=地址为程序的运行起始地址,如命令中未指定,就以CS和IP现有内容为起始地址,每执行一次T命令,则执行一条指令,屏幕上自动显示CPU各寄存器和标志寄存器的内容,继续打入T命令,则继续执行下一条指令。例:假设文件已装入内存,在DEBUG状态下。对于初学者,一般编写的程序比较短,用T命令逐条执行指令,可清楚了解程序的执行过程,但如果遇上用户程序中的软中断指令INT(如INT 21H),这时,通常不要用单步工作方式执行INT指令,因为系统提供的软中断指令INT是以中断处理子程序形式实现功能调用,且这种处理子程序常常是较长的。如用T命令去执行INT指令,那么将跳转到相应的功能调试子程序,而逐条完成这个子程序需要花费较式时间。因此,遇到INT指令且需执行时,应该使用连接运行方式的G,且将断点设置在INT指令的下一条。在单步运行情况下,解决这一问题的方法是:用命令P来执行INT nn指令。同理,此法也可用来执行LOOP Lable类指令,以便节省时间。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1