《汇编语言》(王爽)第4章第1个程序._第1页
《汇编语言》(王爽)第4章第1个程序._第2页
免费预览已结束,剩余28页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、山汇編网 www.asmedunet) )汇编语言课件王爽著-清华大学出版社木课件由汇编网()制作提供制作EJL: Microsoft PowerPoint2003第4章第1个程序4.1-个源程序从写出到执行的过程4.2源程序4.3编辑源程序4.4编译4.5连接4.6以简化的方式进行编译和连接4.7 l.exe的执行4.8可执行文件屮的程序装入内存并运行的原理山汇編网www.asmeduqet)4.9程序执行过程的跟踪引言现在我们将开始编写完整的汇编语言 程序,用编译器将它们编译成为可执 行文件(如:* * exexe e文件),在操作系 统中运行。这一章,我们将编写第一个这样的程 序。网 w

2、ww.asmedunet)4.1一个源程序从写出到执行的过程一个汇编语言程序从写出到最终执 行的简要过程:练 r r 编译一连接-执彳丁山汇編网 www.asmedunet) )4.2源程序山汇編网 BS 2301BR 5604 03网(www.asmedunet) VifJX4.2源程序程序返回我们的程序最先以汇编指令的形式存在源程 序中, 经编译、连接后转变为机器码,存储 在可执行文件中,那么,它怎样得到运行呢?(讨论)现在,我们知道,一个程序结束后,将CPU的控制权交还给使它得以运行的程序,我们 称这个过程为:程序返回。如何返回呢?木ill 汇縄网 www.a$medunet) )4.2

3、源程序程序返回应该在程序的末尾添加返回的程序段。mov ax,4c00Hint 21H这两条指令所实现的功能就是程序返回。儿个和结朿相关的内容木课件山汇編网www.asmedunet)目的相关指令指令性质指令执行者通知编译器一个段结朿段名ends伪指令编译时, 由编译器执行通知编译器程序结束end伪指令编译时, 由编译器执行段木ill 汇縄网 www.a$medunet) )程序返回mov ax,4c00H int21H汇编指令编译时, 由CPU执行木课件 ilI 汇编网www.asmedunet) )语法错误和逻辑错误语法错误程序在编译时被编译器发现的错误; 容易发现。aume cs:abc

4、abc segmentmov ax, 2add axzaxadd ax,axend机课化 lllit 网www.asmedunet语法错误和逻辑错误逻辑错误程序在编译时不能表现出来的、在运行时 发生的错误;不容易发现。assume cs:abcabc segmentmov axz2add ax,axadd axzaxmov ax,4c00Hint 21Habc endsend www.asmedunet) )4.4编辑源程序进入 DOSDOS 方式,运行 Edit,Edit,在其中编辑程序,如下图所示:11. diassune cs :codesi add ax,bxROVax4c001i i

5、nt 21 Itcodcsg cnd3endFlHelpnasnMicrosoft rtacro Asscnbler UcrionCopyright Microsoft Corp 1981-1985, 1987. All righte recerued.Source f ilename .ASM : C - 1 . a.SnObject filename 【1.0BJ:进入DOS方式,进入C:masm目录,运 行masm.exe。如果源程序文件不是以asm为扩展名的 话,就宴输入它的全有。圧如pl.txto在输入源程序文件名的时候一定要指明它 所在的路径。如果文件就在当前路径下, 只输入交彳牛

6、名就口J以。4.4编译山汇編网 nasn1icro3oft rtacro Ascnblcr Ucrion 5.UUCopyright HicrosoFt Corp 1981-1985, 1987. All rightc reserved.Source f ilename .ASH : C - 1 . a.snObject filename H 0BJ:输入要编译的源文件文件名后,按Enter键。目标文件(*obj)是我们对一个源程序进 行编译要得到的最终结果。编译程序默认要输出的目标文件名为l.obj,所以可以不必再另行指定文件名。网 nasRMicrosoft rtacro Ascnblcr

7、 Ucrion 5.B0Copyright Microsoft Corp 1981-1985, 1987. All rightc recerved.列表文件是编译器将源程序编译为目 标文件的过程中产生的中间结果。可以不生成这个文件,直接按 EnterEnter 键即可。Source filenamepb.i&ctF :iltmsnw.ASN1: c :1 .asnri.OBJJ:4.4编译www.asmedunet)kZ:nasnmasmHicrosoft Macro Assttithler Ueraion 5-AACopyright CO tlicrosoft Corp 1981-1

8、985F1987. All rights reserued.Koiircf? f i lename I .ASM) : c : 1 .asmObjact f ilename 【1. 0BJ J :Source lictin (NUL LT】:Cross reference fHUL.CRF1编译程序提示输入交叉引用文件的名称。这个文件同列表文件一样,是编译器将源 程序编译为目标文件过程中产生的中间结 果O可以不生成这个文件,直接按Enter键即可。C 二 5a3nma3mMicrusof t Fluteru nasrnblei* Uci* ion 5 - 00Cupvriyhl nicrosu

9、ft Corp 1981-1985 1987. All rights reserved.Source f ilenane I .ASMJ: c : 1 .asmObject filcnamc 丄 0BJ:Source listing NUL.LST1:Cross15 fe fence rHIlL.CRF 1 :50686 參 415338 Bytes cynbol cpace i*ee0 Warn ing Errors0 Seuee ErrorsC:4.4www.asmedunet)4.4编译www.asmedunet)对源程序的编译结束,编译器输出的最后 两行告诉我们这个源程序没有警告错误和

10、 必须要改正的错误。 一般来说,有两类错误使我们得不 到所期望的目标文件: (1)我们程序中有“Severe Errors; (2)找不到所给出的源程序文件。木课件山汇编网 www.asmedunet)4.5连接木梨件山汇编网www.asmedunet):XnasmlinkMicrosoft Overlay Linker Uersion 3.69Copyright Microsoft Cor-p 19H3-1988. fill i-iylits reserued -Object Modules 【 0BJJ: 1进入DOS方式, 进入C:masm目录, 运行lin k.exe。如果目标文件不是

11、以obj为扩展名的话, 就宴输入它的仝名。比如:pl.bin。在输入1=1标文件名的时候,要注意指明它 所在的路径。 这里, 我们要连接的文件是 当前路径下lobj,所以此处输入 T”。网( (www.asmedunet) )C: nasmlin)rlicrusoft Overlay Linkor Uursion 3.69Copyright Microsoft Corp 19831988. fill rights reserued.Object Modules E.OBJJ: 1 Run File tl.EXEl:输入耍连接的目标文件名后,按Enter键。蠶獭件是我们对一个程序进行连接要得到的

12、翹騎親鶴瓣穀激件名为X-EXE,讓屠按讥键,使用连接程序设定的可执4.5连接4.5连接Itl 汇编网(www.asmedunet) UH W 供(tzinkrticrosoft Overlay Linker llersion 3.69Copyright linlicrocoft Overlay Linkut* UHrsion 3.69Copyi*iflht Microsoft Corp 1983-1988. All rights reserued.OliJHI:tMUIIIIIHI:r . ORT 1 : 1Run File 1.EXE:List File NUL.MAP3:LihraHies

13、 f.IJRl:连接程序提示输入库文件的名称。库文件里包含了一些可以调川的子程序,如果我们 的程序中调4.5连接4.5连接Itl 汇编网(www.asmedunet) UH W 供用了某一个库文件中的子程序,就需要 在连接的时候,将这个库文件和我们的目标文件连 接到一起,生成可执行文件。如果没有调用任何子程序,直接按Ente键即可。4.5连接山汇編网 linJlicrusoft Overlay Linker* Uersion 3 b9Copyright Microsoft Corp 1983 1988. All rights reserued.Object Modules .OBI R:LIN

14、K : warning L4021: no stack segnentC: xnasn对目标文件的连接结束,连接程序输出的 最后一行告诉我们, 这个程序有一个警告 错误: “没有栈段”,这里我们不理会这 个错误。网 www.asmedunet) )4.5连接前面我们通过对 l.objl.obj 进行连接的过 程,展示了使用连接器对目标文件进行连接的方法。我们得到了一个新的文件 l.exel.exe o o 当 然,如果连接过程中出现错误,那么 我们将得不到这个可执行文件。连接的作用是什么呢?4.5连接ill ifwww.asmedunet)这里再次强调一下,我们学习汇编的主要目的,就是通过用汇

15、编语言进行编程而深入地理解计算机底层的基本工作机目的。基于这种考虑,我们的编程活动,大都 是直接对硬件进行的。我们希望直接对 硬件编程,却并不希望用机器码编程。www.asmedunet)我们用汇编语言编程,就要用到:编辑 器(Edit)(Edit)、编译器(masm)(masm)、连接器 (link)(link)、调试工具(debug)(debug)等所有工 具,而这些工具都是在操作理,达到可以随心所欲地控制计算机的4.54.5连接編网 www.asmedunet)系统之上运 行的程序,所以我们的学习过程必须在 操作系统的环境中进行。4.5连接編网 www.asmedunet)我们在一个操作

16、系统环境中,使用了 许多工具,这势必要牵扯到操作系统、 编译原理等方面的知识和原理。我们只是利用这些环境、工具来方便 我们的学习,而不希望这些东西分散 了我们的注意力。編网 www.asmedunet)所以,对于涉及到而又不在我们学习 的主要内容之中的东西,我们只做简单的解释。4.5M 生成可执行文件。在这个过程中所产生的中间文件都可 以忽略。我们可以用一种较为简捷的 方式进行编译、连接。www.asmedunet士4.7 l.exe的执行现在,终于将我们的第一个汇编程 序加工成了一个可在操作系统下执 行的程序文件。l.exel.exe 的执行情况::5asml:5asm程序到底运行没有?程序

17、当然运行了,只是从屏幕上不 可能看到任何运行结果。网 www.asmedunet) )4.7 l.exe的执行我们的程序没有像显示器输出任何信 息。程序只是做了一些将数据送入寄 存器和加法的操作,而这些事情,我 们不可能从显示屏上看出来。程序执行完成后,返回,屏幕上再次 出现操作系统的提示符。网 www.asmedunet) )4.8可执行文件中的程序装入 内存并运行的原理在 DOSDOS 中,可执行文件中的程序 P1P1 若 要运行,必须有一个正在运行的程序 P2P2 , ,将 P1P1 从可执行文件中加载入内 存, 将 CPUCPU 的控制权交给它,P1P1 才能 得以运行;当 P1P1

18、运行完毕后,应该将 CPUCPU 的控制 权交还给使它得以运行的程序 P2P2。 l.exel.exe 的执行过程ill 汇編网 www.asmedunet) )4.84.8可执行文件中的程序装入 内存并运行的原理 l.exel.exe 的执行过程: (1)我们在捉示符“C:masm”后而 输入可执行文件的名字“1”,按Enter键。问题41 (2) l.exe中的程序运行; (3)运行结束,返回,再次显示提示 符“C:masm”。问题4.2ill 汇編网 www.asmedunet) )束后,返回到哪里?参考内容冋答问题 4 4 1 1 和 4 4 2 2问题4.24.2lllil www.

19、asmedunet)回答问题4.1和4.2(1)我们在DOS中直接执行l.exe时,是 正在运行的command将l.exe中的程序加载 入内存。(2) command设置CPU的CS:IP指向程序 的第一条指令(即程序的入口),从而使 程序得以运行。(3)程序运行结朿后,返回到command中,CPU继续运行commandolifl 山汇编网 www.asmedunet) )4.8可执行文件中的程序装入 内存并运行的原理汇编程序从写出到执行的过程:编程_ 1 .asm一编译l.objf连接fl.exe 加栈_内存中的程序一运行(edit )(masin)(link )( command )(

20、CPU )lllil debuy 1 .exeBX 咖 OU CX = 00F DK=MU HP=WiW BP=Wj0 SI 咖厢 DID&- 129EES-129E SS=12AE C8 12AE IP tWWJ HU UP El PL HZ NA PO NC12HE:00e0 0000 B82301HOU AX.0123可以看到,DebugDebug 将程序从可执行文 件加载入内存后,exex 中存放的是程序 的长度。l.exel.exe 中程序的机器码共有 1515 个字节。4.9程序执行过程的跟踪ou JietEXE文件中的程序的加载过程SASA :SA :SA+10H : 0

21、SA :找到一段起姑地址 为 SA0000 (叩起集 地址的偏移地址为 0的容量足够的空冋内 ffEi在达段内存区的前 25时、 半节中.创建一个称为 决序的前壌PSP) 的致莠区.DOSS利用 PSP来和很加软程序进行週 f訊(读者可能不理懈PSP的 作用不过浪有关系, 我 们井不研究DOS 的廉15,只要知道育这个东丙我可从这段内存区的 2%字节处开:to ttPSP的坊面. 俗程序裝入.程序的地址被洛该内存区的段地址存入 DS 中.前始化戈他相关寄存器Jfi.设胃CS:【P 扌!5向理序的入口.(空闲的內存区从 s 鼻研抬.0-2554=节为 PSA 从 256 字节处开绘存放穆疗,为更

22、 好地区分PSP 和程序DOS 黑朽它们划分到不国的段中, 所有了这杆的地址安幷:空闲內存区:SA.0PSPExSA0 穆序区:SA-tlOHO注 PSP 区和柑序区虽 於將理地址连皴.却有不同的段地址4.9程序执行过程的跟踪现在程序已从 l.exel.exe 中装入内存,接下来我们查看一下它的内容,可 是我们查看那里的内容呢?程序被装入内存的什么地方?我们如何得知?在 DOSDOS 系统中 EXEEXE 文件中的程序的 加载过程如下www.asmedunet) )内存内存PSP内 7F木课件山汇編网(www.asmedunet)EXE文件中的程序的加载过程注意:有一步称为重定位的工作我们在上面没有讲解,因为这个问题和操作系统的关系较大,我们不作 讨论。网 www.asmedunet)网 www.asmedunet)总结程序加载后,ds中存放着程序所在内 存区的段地址,这个内存区的偏移地 址为0,则程序所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论