1、汇编语言汇编语言汇编语言课件广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言第4章 第1个程序n4.1 一个源程序从写出到执行的过程一个源程序从写出到执行的过程n4.2 源程序源程序n4.3 编辑源程序编辑源程序n4.4 编译编译n4.5 连接连接n4.6 以简化的方式进行编译和连接以简化的方式进行编译和连接n4.7 1.exe的执行的执行n4.8 可执行文件中的程序装入内存并运行的原理可执行文件中的程序装入内存并运行的原理n4.9 程序执行过程的跟踪程序执行过程的跟踪广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言引言n现在我们将开始编写完整的汇编语言程序,现在我们将开始编写完整
2、的汇编语言程序,用编译器将它们编译成为可执行文件(如:用编译器将它们编译成为可执行文件(如:*.exe文件),在操作系统中运行。文件),在操作系统中运行。n这一章,我们将编写第一个这样的程序。这一章,我们将编写第一个这样的程序。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.1 一个源程序从写出到执行的过程n一个汇编语言程序从写出到最终执行的简要过一个汇编语言程序从写出到最终执行的简要过程:程:编写编写-编译编译-连接连接-执行执行n演示演示使用文本编辑器(如使用文本编辑器(如Edit、记事本等),用、记事本等),用汇编语言编写汇编语言编写汇编源程序汇编源程序。n使用汇编语言编译程序
3、对源程序进行编译,使用汇编语言编译程序对源程序进行编译,产生产生目标文件目标文件;再用连接程序对目标文件进;再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的行连接,生成可在操作系统中直接运行的可可执行文件执行文件。在操作系统中,执行可执行文件中的程序。在操作系统中,执行可执行文件中的程序。可执行文件中包含两部分内容:可执行文件中包含两部分内容:程序程序(从源程序中的汇编指令翻译过来的(从源程序中的汇编指令翻译过来的机器码)机器码)和数据和数据(源程序中定义的数据);(源程序中定义的数据);相关的相关的描述信息描述信息(比如:程序有多大、要(比如:程序有多大、要占多少内存空间等)。占
4、多少内存空间等)。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.2 源程序n汇编指令汇编指令n伪指令伪指令 XXX segment XXX ends end assume广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.2 源程序n源程序中的源程序中的“程序程序”汇编源程序:汇编源程序:伪指令伪指令 (编译器处理)(编译器处理)汇编指令(编译为机器码)汇编指令(编译为机器码)程序:源程序中最终由计算机执行、处程序:源程序中最终由计算机执行、处理的指令或数据。理的指令或数据。注意注意广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言程序经编译连接后变为机器码广东海洋大学信
5、息学院计算机科学与技术系汇编语言汇编语言4.2 源程序n标号标号一个标号指代了一个地址。一个标号指代了一个地址。codesg:放在:放在segment的前面,作为一的前面,作为一个段的名称,这个段的名称最终将被编个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。译、连接程序处理为一个段的段地址。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.2 源程序n程序的结构程序的结构任务:编程运算任务:编程运算 2 3。n定义一个段定义一个段n实现处理任务实现处理任务n程序结束程序结束n段与段寄存器关联段与段寄存器关联 汇编程序汇编程序 assume cs:abc abc s
6、egment mov ax,2 add ax,ax add ax,ax abc ends end 广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.2 源程序n程序返回程序返回我们的程序最先以汇编指令的形式存在源程序我们的程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可中,经编译、连接后转变为机器码,存储在可执行文件中,那么,它怎样得到运行呢?(执行文件中,那么,它怎样得到运行呢?(讨讨论论)现在,我们知道,一个程序结束后,将现在,我们知道,一个程序结束后,将CPU的的控制权交还给使它得以运行的程序,我们称这控制权交还给使它得以运行的程序,我们称这个过程为:程
7、序返回。个过程为:程序返回。如何返回呢?如何返回呢?广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.2 源程序n程序返回程序返回应该在程序的末尾添加返回的程序段。应该在程序的末尾添加返回的程序段。mov ax,4c00H int 21Hn这两条指令所实现的功能就是程序返回。这两条指令所实现的功能就是程序返回。n几个和结束相关的内容几个和结束相关的内容广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言段结束、程序结束、程序返回广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言语法错误和逻辑错误n 语法错误语法错误程序在编译时被编译器发现的错误;程序在编译时被编译器发现的错误;容
8、易发现。容易发现。aume cs:abc abc segment mov ax,2 add ax,ax add ax,ax end广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言语法错误和逻辑错误n 逻辑错误逻辑错误程序在编译时不能表现出来的、在运行时发程序在编译时不能表现出来的、在运行时发生的错误;生的错误;不容易发现。不容易发现。assume cs:abc abc segment mov ax,2 add ax,ax add ax,ax mov ax,4c00H int 21H abc ends end 广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.3 编辑源程序n进入进
9、入DOS方式,运行方式,运行Edit,在其中编辑,在其中编辑程序,如下图所示:程序,如下图所示:广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.4 编译n进入进入DOS方式,进入方式,进入 C:masm 目录,运目录,运行行masm.exe。n如果源程序文件不是以如果源程序文件不是以 asm 为扩展名的为扩展名的话,就要输入它的全名。比如话,就要输入它的全名。比如p1.txt。n在输入源程序文件名的时候一定要指明它在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,所在的路径。如果文件就在当前路径下,只输入文件名就可以。只输入文件名就可以。广东海洋大学信息学院计算
10、机科学与技术系汇编语言汇编语言4.4 编译n输入要编译的源文件文件名后,按输入要编译的源文件文件名后,按 Enter键。键。n目标文件(目标文件(*.obj)是我们对一个源程序进行)是我们对一个源程序进行编译要得到的最终结果。编译要得到的最终结果。n编译程序默认要输出的目标文件名为编译程序默认要输出的目标文件名为1.obj,所以可以不必再另行指定文件名。所以可以不必再另行指定文件名。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.4 编译n列表文件是编译器将源程序编译为目标列表文件是编译器将源程序编译为目标文件的过程中产生的中间结果。文件的过程中产生的中间结果。n可以不生成这个文件,
11、直接按可以不生成这个文件,直接按 Enter键键即可。即可。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.4 编译n编译程序提示输入交叉引用文件的名称。编译程序提示输入交叉引用文件的名称。n这个文件同列表文件一样,是编译器将源程这个文件同列表文件一样,是编译器将源程序编译为目标文件过程中产生的中间结果。序编译为目标文件过程中产生的中间结果。n可以不生成这个文件,直接按可以不生成这个文件,直接按 Enter 键即可。键即可。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.4 编译n对源程序的编译结束,编译器输出的最后两对源程序的编译结束,编译器输出的最后两行告诉我们这个源程
12、序没有警告错误和必须行告诉我们这个源程序没有警告错误和必须要改正的错误。要改正的错误。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.4 编译n一般来说,有两类错误使我们得不到一般来说,有两类错误使我们得不到所期望的目标文件:所期望的目标文件:(1)我们程序中有)我们程序中有“Severe Errors”;(2)找不到所给出的源程序文件。)找不到所给出的源程序文件。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n在对源程序进行编译得到目标文件后,在对源程序进行编译得到目标文件后,我们需要对目标文件进行连接,从而得我们需要对目标文件进行连接,从而得到可执行文件。到可
13、执行文件。n继续上一节的过程,我们再将继续上一节的过程,我们再将C:masm1.obj连接为连接为C:masm1.exe。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n进入进入DOS方式,进入方式,进入C:masm目录,运行目录,运行link.exe。n如果目标文件不是以如果目标文件不是以obj为扩展名的话,就为扩展名的话,就要输入它的全名。比如:要输入它的全名。比如:p1.bin。n在输入目标文件名的时候,要注意指明它所在输入目标文件名的时候,要注意指明它所在的路径。这里,我们要连接的文件是当前在的路径。这里,我们要连接的文件是当前路径下路径下1.obj,所以此处输入,
14、所以此处输入“1”。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n输入要连接的目标文件名后,按输入要连接的目标文件名后,按Enter键。键。n可执行文件是我们对一个程序进行连接要得到的最终可执行文件是我们对一个程序进行连接要得到的最终结果。结果。n连接程序默认要输出的可执行文件名为连接程序默认要输出的可执行文件名为 1.EXE,所,所以可以不必再另行指定文件名。以可以不必再另行指定文件名。n我们直接按我们直接按 Enter 键,使用连接程序设定的可执行键,使用连接程序设定的可执行文件名。文件名。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n映像文件是
15、连接程序将目标文件连接为可执映像文件是连接程序将目标文件连接为可执行文件过程中产生的中间结果。行文件过程中产生的中间结果。n可以不生成这个文件,直接按可以不生成这个文件,直接按 Enter 键即可。键即可。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n连接程序提示输入库文件的名称。连接程序提示输入库文件的名称。n库文件里包含了一些可以调用的子程序,如果我们的库文件里包含了一些可以调用的子程序,如果我们的程序中调用了某一个库文件中的子程序,就需要在连程序中调用了某一个库文件中的子程序,就需要在连接的时候,将这个库文件和我们的目标文件连接到一接的时候,将这个库文件和我们的目标
16、文件连接到一起,生成可执行文件。起,生成可执行文件。n如果没有调用任何子程序,直接按如果没有调用任何子程序,直接按Enter键即可。键即可。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n对目标文件的连接结束,连接程序输出的最后对目标文件的连接结束,连接程序输出的最后一行告诉我们,这个程序有一个警告错误:一行告诉我们,这个程序有一个警告错误:“没有栈段没有栈段”,这里我们不理会这个错误。,这里我们不理会这个错误。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n前面我们通过对前面我们通过对 1.obj 进行连接的过程,进行连接的过程,展示了使用连接器对目标
17、文件进行连接的展示了使用连接器对目标文件进行连接的方法。方法。n我们得到了一个新的文件我们得到了一个新的文件 1.exe。当然,。当然,如果连接过程中出现错误,那么我们将得如果连接过程中出现错误,那么我们将得不到这个可执行文件。不到这个可执行文件。n连接的作用是什么呢?连接的作用是什么呢?广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n这里再次强调一下,我们学习汇编的主要目的,就是这里再次强调一下,我们学习汇编的主要目的,就是通过用汇编语言进行编程而深入地理解计算机底层的通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目基本工作机理
18、,达到可以随心所欲地控制计算机的目的。的。n基于这种考虑,我们的编程活动,大都是直接对硬件基于这种考虑,我们的编程活动,大都是直接对硬件进行的。我们希望直接对硬件编程,却并不希望用机进行的。我们希望直接对硬件编程,却并不希望用机器码编程。器码编程。n我们用汇编语言编程,就要用到我们用汇编语言编程,就要用到:编辑器(:编辑器(Edit)、)、编译器(编译器(masm)、连接器()、连接器(link)、调试工具)、调试工具(debug)等所有工具,而这些工具都是在操作系统)等所有工具,而这些工具都是在操作系统之上运行的程序,所以我们的学习过程必须在操作系之上运行的程序,所以我们的学习过程必须在操作
19、系统的环境中进行。统的环境中进行。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n连接的作用有以下几个:连接的作用有以下几个:当源程序很大时,可以将它分为多个源程序文件当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文连接程序将它们连接到一起,生成一个可执行文件;件;程序中调用了某个库文件中的子程序,需要将这程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;生成一
20、个可执行文件;广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.5 连接n连接的作用有以下几个(续):连接的作用有以下几个(续):一个源程序编译后,得到了存有机器码的目标文一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行文件,连接程序将这些内容处理为最终的可执行信息。可执行信息。所以,在只有一个源程序文件,而又不需要调用所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理
21、,生成可执行文件。对目标文件进行处理,生成可执行文件。n注意,对于连接的过程,可执行文件是我们注意,对于连接的过程,可执行文件是我们要得到的最终结果。要得到的最终结果。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.6 以简化的方式进行编译和连接n我们编译、连接的最终目的是用源程序我们编译、连接的最终目的是用源程序文件生成可执行文件。文件生成可执行文件。n在这个过程中所产生的中间文件都可以在这个过程中所产生的中间文件都可以忽略。我们可以用一种较为简捷的方式忽略。我们可以用一种较为简捷的方式进行进行编译编译、连接连接。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.7 1.e
22、xe的执行n现在,终于将我们的第一个汇编程序现在,终于将我们的第一个汇编程序加工成了一个可在操作系统下执行的加工成了一个可在操作系统下执行的程序文件。程序文件。1.exe的执行情况:的执行情况:n程序到底运行没有?程序到底运行没有?程序当然运行了,只是从屏幕上不可程序当然运行了,只是从屏幕上不可能看到任何运行结果。能看到任何运行结果。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.7 1.exe的执行n我们的程序没有像显示器输出任何信我们的程序没有像显示器输出任何信息。程序只是做了一些将数据送入寄息。程序只是做了一些将数据送入寄存器和加法的操作,而这些事情,我存器和加法的操作,而这些
23、事情,我们不可能从显示屏上看出来。们不可能从显示屏上看出来。n程序执行完成后,返回,屏幕上再次程序执行完成后,返回,屏幕上再次出现操作系统的提示符。出现操作系统的提示符。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.8 可执行文件中的程序装入内存并运行的原理n在在DOS中,可执行文件中的程序中,可执行文件中的程序P1若要若要运行,必须有一个正在运行的程序运行,必须有一个正在运行的程序P2,将,将 P1 从可执行文件中加载入内存,从可执行文件中加载入内存,将将CPU的控制权交给它,的控制权交给它,P1才能得以运才能得以运行;行;当当P1运行完毕后,应该将运行完毕后,应该将CPU的控制
24、的控制权交还给使它得以运行的程序权交还给使它得以运行的程序P2。n1.exe的执行过程的执行过程广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.8 可执行文件中的程序装入内存并运行的原理n1.exe的执行过程:的执行过程:(1)我们在提示符)我们在提示符“C:masm”后面输入后面输入可执行文件的名字可执行文件的名字“1”,按,按Enter键。键。问题问题4.1(2)1.exe中的程序运行;中的程序运行;(3)运行结束,返回,再次显示提示符)运行结束,返回,再次显示提示符“C:masm”。问题问题4.2广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言 问题4.2n执行第(执行第
25、(3)步操作,程序运行结束)步操作,程序运行结束后,返回到哪里?后,返回到哪里?n参考内容参考内容n回答问题回答问题4.1和和4.2广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言回答问题4.1和4.2n(1)我们在)我们在DOS中直接执行中直接执行 1.exe 时,是时,是正在运行的正在运行的command将将1.exe中的程序加中的程序加载入内存。载入内存。n(2)command设置设置CPU的的CS:IP指向程指向程序的第一条指令(即程序的入口),从而序的第一条指令(即程序的入口),从而使程序得以运行。使程序得以运行。n(3)程序运行结束后,返回到)程序运行结束后,返回到comma
26、nd中,中,CPU继续运行继续运行command。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言n汇编程序从写出到执行的过程:汇编程序从写出到执行的过程:广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.9 程序执行过程的跟踪n为了观察程序的运行过程为了观察程序的运行过程,我们可以,我们可以使用使用Debug。nDebug 可以将程序加载入内存,设置可以将程序加载入内存,设置CS:IP指向程序的入口,但指向程序的入口,但Debug并并不放弃对不放弃对CPU 的控制,这样,我们就的控制,这样,我们就可以使用可以使用Debug 的相关命令来单步执的相关命令来单步执行程序行程序,查看
27、每条指令指令的执行结,查看每条指令指令的执行结果。果。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.9 程序执行过程的跟踪n接下来可以用接下来可以用R命令看一下各个寄存命令看一下各个寄存器的设置情况:器的设置情况:n可以看到,可以看到,Debug将程序从可执行文将程序从可执行文件加载入内存后,件加载入内存后,cx中存放的是程序中存放的是程序的长度。的长度。1.exe 中程序的机器码共有中程序的机器码共有15个字节。个字节。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.9 程序执行过程的跟踪n现在程序已从现在程序已从 1.exe 中装入内存,接中装入内存,接下来我们查看一
28、下它的内容,可是我下来我们查看一下它的内容,可是我们查看哪里的内容呢?们查看哪里的内容呢?n程序被装入内存的什么地方?程序被装入内存的什么地方?n我们如何得知?我们如何得知?n在在DOS系统中系统中.EXE文件中的程序的文件中的程序的加载过程如下加载过程如下广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言EXE文件中的程序的加载过程广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言EXE文件中的程序的加载过程n总结总结程序加载后,程序加载后,ds中存放着程序所在内存区的段地址,这个内存区中存放着程序所在内存区的段地址,这个内存区的偏移地址为的偏移地址为 0,则程序所在的内存区的地址为
29、:,则程序所在的内存区的地址为:ds:0;这个内存区的前这个内存区的前256(100H)个字节中存放的是个字节中存放的是PSP,dos用来用来和程序进行通信。和程序进行通信。从从 256字节处向后的空间存放的是程序,所以程序的物理地址是:字节处向后的空间存放的是程序,所以程序的物理地址是:SA16+0+256=SA16+1616=(SA+16)16+0 可用段地址和偏移地址表示为:可用段地址和偏移地址表示为:SA+10:0 即即cs=ds+10h,ip=0。广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.9 程序执行过程的跟踪n用用U命令查看一下其他指令:命令查看一下其他指令:广东海
30、洋大学信息学院计算机科学与技术系汇编语言汇编语言4.9 程序执行过程的跟踪n用用T命令单步执行程序中的每一条指令,命令单步执行程序中的每一条指令,并观察每条指令的执行结果,到了并观察每条指令的执行结果,到了 int 21,我们要用,我们要用P命令执行:命令执行:广东海洋大学信息学院计算机科学与技术系汇编语言汇编语言4.9 程序执行过程的跟踪nint 21 执行后,显示执行后,显示“Program terminated normally”,返回到,返回到Debug中。中。n表示程序正常结束。那程序返回哪里呢?表示程序正常结束。那程序返回哪里呢?广东海洋大学信息学院计算机科学与技术系汇编语言汇编语
31、言4.9 程序执行过程的跟踪n我们在我们在 DOS中用中用“Debug 1.exe”运行运行Debug对对1.exe进行跟踪时,程序加载的顺序进行跟踪时,程序加载的顺序是:是:command加载加载Debug,Debug加载加载1.exe。n返回的顺序是:从返回的顺序是:从1.exe中的程序返回到中的程序返回到Debug,从,从Debug返回到返回到command。n使用使用Q命令退出命令退出Debug,将返回到,将返回到command中,因为中,因为Debug是由是由command加载运行的。加载运行的。广东海洋大学信息学院计算机科学与技术系此课件下载可自行编辑修改,供参考!感谢您的支持,我们努力做得更好!