MASM汇编基础及上机_第1页
MASM汇编基础及上机_第2页
MASM汇编基础及上机_第3页
MASM汇编基础及上机_第4页
MASM汇编基础及上机_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理与汇编语言,第4章 MASM汇编基础及上机 4.6 汇编程序的编写与执行 4.7 调试程序DEBUG的使用,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.1 一个汇编语言程序从写出到最终执行的简要过程 编写-编译-连接-执行 演示,1.编写汇编源程序,使用文本编辑器(如Edit、记事本等),用汇编语言编写汇编源程序。,2.对源程序进行编译连接,使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件; 再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。,3.可执行文件,可执行文件中包含两部分内容: 程序(从原程序中的汇编指令翻译过来

2、的机器码)和数据(源程序中定义的数据) 相关的描述信息(比如:程序有多大、要占多少内存空间等),4.执行可执行文件中的程序,在操作系统中,执行可执行文件中的程序。 操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。,第4章 MASM汇编基础及上机,assume codesg XXX segment XXX ends end,4.6 汇编程序的编写与执行 4.6.2 源程序,寄存器与段的关联假设,assume:含义为“假设”。 它假设某一段寄存器和程序中的某一个用 segment e

3、nds 定义的段相关联。 通过assume说明这种关联,在需要的情况下 ,编译程序可以将段寄存器和某一个具体的段相联系。,标号,一个标号指代了一个地址。 codesg:放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。,定义一个段,segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。 segment和ends的功能是定义一个段,segment说明一个段开始,ends 说明一个段结束。 一个段必须有一个名称来标识,使用格式为: 段名 segment 段名 ends,定义一个段,一个汇编程序是

4、由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。 一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。,程序结束标记,End 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。 如果程序写完了,要在结尾处加上伪指令end 。否则,编译器在编译程序时,无法知道程序在何处结束。 注意:不要搞混了end和ends。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.2 源程序 程序的结构 定义一个段 实现处理任务 程序结束 段与段寄存器关联,语法错误和逻辑错误,语法错误 程序在编译时被编译器发现的错误; 容

5、易发现。 assum cs:codesg codesg segment start:mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends end start,语法错误和逻辑错误,逻辑错误 程序在编译时不能表现出来的、在运行时发生的错误不容易发现。,assume cs:codesg codesg segment start:mov ax,0123h mov bx,0456h add ax,bx add ax,ax codesg ends mov ax,4c00h int 21h end sta

6、rt,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.2 源程序 打开“记事本”程序,在其中编辑程序,如下图所示:,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.3 编译 进入DOS方式,进入 D:masm 目录,运行masm.exe。 如果源程序文件不是以 asm为扩展名的话,就要输入它的全名。比如1.txt。 在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.3 编译 输入要编译的源文件文件名后,按 Enter键。 目标文件(*.o

7、bj)是我们对一个源程序进行编译要得到的最终结果。 编译程序默认要输出的目标文件名为1.obj,所以可以不必再另行指定文件名。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.3 编译 列表文件是编译器将源程序编译为目标文件的过程中产生的中间结果。 可以不生成这个文件,直接按 Enter键即可。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.3 编译 编译程序提示输入交叉引用文件的名称。 这个文件同列表文件一样,是编译器将源程序编译为目标文件过程中产生的中间结果。 可以不生成这个文件,直接按 Enter 键即可。,第4章 MASM汇编基础及上机,4

8、.6 汇编程序的编写与执行 4.6.3 编译 对源程序的编译结束,编译器输出的最后两行告诉我们这个源程序没有警告错误和必须要改正的错误。 一般来说,有两类错误使我们得不到所期望的目标文件: (1)我们程序中有“Severe Errors”; (2)找不到所给出的源程序文件。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.4 连接 在对源程序进行编译得到目标文件后,我们需要对目标文件进行连接,从而得到可执行文件。 继续上一节的过程,我们再将D:masm1.obj连接为D:masm1.exe。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.4 连接

9、进入DOS方式,进入C:masm目录,运行link.exe。 在输入目标文件名的时候,要注意指明它所在的路径。这里,我们要连接的文件是当前路径下1.obj,所以此处输入“1”。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.4 连接 输入要连接的目标文件名后,按Enter键。 可执行文件是我们对一个程序进行连接要得到的最终结果。 连接程序默认要输出的可执行文件名为 1.EXE ,所以可以不必再另行指定文件名。 我们直接按 Enter 键,使用连接程序设定的可执行文件名。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.4 连接 映像文件是连接程序将

10、目标文件连接为可执行文件过程中产生的中间结果。 可以不生成这个文件,直接按 Enter 键即可。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.4 连接 连接程序提示输入库文件的名称。 库文件里包含了一些可以调用的子程序,如果我们的程序中调用了某一个库文件中的子程序,就需要在连接的时候,将这个库文件和我们的目标文件连接到一起,生成可执行文件。 如果没有调用任何子程序,直接按Enter键即可。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.4 连接 这时我们得到了一个新的文件 1.exe 。当然,如果连接过程中出现错误,那么我们将得不到这个可执行文

11、件。 对目标文件的连接结束,连接程序输出的最后一行告诉我们,这个程序有一个警告错误:“没有栈段” ,这里我们不理会这个错误。,连接,连接的作用有以下几个: 当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件; 程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;,连接,连接的作用有以下几个(续): 一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。 所以,在只有一个源程序文件,而

12、又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。 注意,对于连接的过程,可执行文件是我们要得到的最终结果。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.5 执行 现在,终于将我们的第一个汇编程序加工成了一个可在操作系统下执行的程序文件。1.exe的执行情况: 程序到底运行没有? 程序当然运行了,只是从屏幕上不可能看到任何运行结果。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 4.6.5 执行 我们的程序没有像显示器输出任何信息。程序只是做了一些将数据送入寄存器和加法的操作,而这些事情,我们不可能从显示屏上看出

13、来。 程序执行完成后,返回,屏幕上再次出现操作系统的提示符。 可执行文件中的程序装入内存并运行的原理,可执行文件中的程序装入内存并运行的原理,DOS是一个单任务操作系统。 在DOS中,可执行文件中的程序P2若要运行,必须有一个正在运行的程序P1 ,将 P2从可执行文件中加载入内存,将CPU的控制权交给它,P2才能得以运行; P2开始运行后,P1暂停运行。 当P2运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P1。此后,P1继续运行。 1.exe的执行过程,可执行文件中的程序装入内存并运行的原理,1.exe的执行过程: (1)我们在提示符“D:masm”后面输入可执行文件的名字“1”,

14、按Enter键。 (2)1.exe中的程序运行; 问题1 (3)运行结束,返回,再次显示提示符“D:masm”。 问题2,问题1 执行第(1)步操作时,有一个正在运行的程序将1.exe中的程序加载入内存,这个正在运行的程序是什么? 它将程序加载入内存后,如何使程序得以运行? 结论 在DOS中直接执行 1.exe 时,是正在运行的command将1.exe中的程序加载入内存。 command设置CPU的CS:IP指向程序的第一条指令(即程序的入口),从而使程序得以运行。,问题2 执行第(3)步操作,程序运行结束后,返回到哪里? 结论 程序运行结束后,返回到command中,CPU继续运行comm

15、and。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行 汇编程序从写出到执行的过程: 1.编写源程序1.txt 2.编译masm 1.txt 1.obj 3.连接link 1.obj 1.exe 4.加载到内存并运行,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 为了观察程序的运行过程 ,我们可以使用Debug。 Debug 可以将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU 的控制,这样,我们就可以使用Debug 的相关命令来单步执行程序 ,查看每条指令的执行结果。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的

16、使用 接下来可以用R命令看一下各个寄存器的设置情况: 可以看到,Debug将程序从可执行文件加载入内存后,CX寄存器中存放的是程序的长度。1.exe 中程序的机器码共有15个字节。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 用U命令查看一下其他指令:,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 用T命令单步执行程序中的每一条指令,并观察每条指令的执行结果。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 到了 int 21,要用P命令执行: int 21 执行后,显示“Program terminated normally”,返回

17、到Debug中。 表示程序正常结束。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 最后,使用Q命令退出Debug,将返回到command中,因为Debug是由command加载运行的。 如果需要退出DOS,请输入exit并回车。,第4章 MASM汇编基础及上机,需要注意的是,在 DOS 中运行程序时,是command将程序加载入内存; 所以程序运行结束后返回到command中,而在这里是debug 将程序加载入内存,所以程序运行结束后要返回到Debug中。 我们在 DOS中用 “Debug 1.exe” 运行Debug对1.exe进行跟踪时,程序加载的顺序是:comman

18、d加载Debug,Debug加载1.exe。 返回的顺序是:从1.exe中的程序返回到Debug,从Debug返回到command。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 启动Debug 启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。 Debug drive:path filename parameters drive:path filename 指定要测试的可执行文件的位置和名称。 parameters 指定要测试的可执行文件所需要的任何命令行信息。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 Debug 命令 ?

19、显示 Debug 命令列表。 a 汇编 8086/8087/8088 记忆码。 c 比较内存的两个部分。 d 显示部分内存的内容。 e 从指定地址开始,将数据输入到内存。 f 使用指定值填充一段内存。 g 运行在内存中的可执行文件。 h 执行十六进制运算。 i 显示来自特定端口的 1 字节值。 l 将文件或磁盘扇区内容加载到内存。 m 复制内存块中的内容 n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 Debug 命令 o 向输出端口发送 1 个字节的值。 p 执行循环、重复的字符串指令、软件中断或子例程。 q

20、 停止 Debug 会话。 r 显示或改变一个或多个寄存器。 s 在部分内存中搜索一个或多个字节值的模式。 t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行的指令的解码形式。 u 反汇编字节并显示相应的原语句。 w 将被测试文件写入磁盘。 xa 分配扩展内存。 xd 释放扩展内存。 xm 映射扩展内存页。 xs 显示扩展内存的状态。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 调试命令 显示和修改寄存器或存储单元有关命令 运行程序命令 汇编和反汇编命令 文件的装、写命令 退出DEBUG命令 其他命令,第4章 MASM汇编基础及上机,4

21、.7 调试程序Debug的使用 命令参数 分隔命令参数 所有 Debug 命令都接受参数,除了 q 命令之外。可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价: dcs:100 110 d cs:100 110 d,cs:100,110,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 命令参数 指定有效地址项 Debug 命令中的 address 参数指定内存位置。Address 是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u 和 w 命令的默认段是 CS。所有其他命令的默

22、认段是 DS。所有数值均为十六进制格式。 有效地址如下: CS:0100 04BA:0100 在段名和偏移量之间要有冒号。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用 命令参数 指定有效范围项 Debug 命令中的 range 参数指定了内存的范围。可以为 range 选择两种格式:起始地址和结束地址,或者起始地址和长度范围(由 L 表示)。 例如,下面的两个语法都可以指定从 CS:100 开始的 16 字节范围: cs:100 10f cs:100 L 10,显示和修改寄存器或存储单元有关命令,1.R命令 显示单个寄存器的内容并等待 修改这个寄存器的内容。 R之后输入寄

23、存器名字符。 显示所有寄存器和标志位值。 只输入R。,显示和修改寄存器或存储单元有关命令,1.R命令 显示上述8个状态标志位的状态并等待重新设置。 输入RF。 按回车不改变标志位状态。 或输入新的状态符,重新设置标志位状态。,显示和修改寄存器或存储单元有关命令,2.D命令 显示某个存储区的内容。 D,如不指定范围,一次显示8行16个字节 D 默认段寄存器为DS,当前偏移地址 D 地址 D 0B03:0100 D 130;130为偏移地址,默认段寄存器DS,显示和修改寄存器或存储单元有关命令,2.D命令 显示某个存储区的内容。 D 范围 -D DS:100 -D CS:100 -D DS:100

24、 110 -D 100 L 10,显示和修改寄存器或存储单元有关命令,3.E命令 显示和修改存储单元的内容。默认段地址为DS。 E 地址 从指定地址开始,修改(或连续修改)存储单元内容。 DEBUG首先显示指定单元内容,如要修改,可输入新数据 减号键显示上一个单元内容并可修改 空格键显示下一个单元内容并可修改 如不修改,可按回车键结束命令。 E 地址 数据表 从指定的地址开始用数据表给定的数据修改存储单元。 E DS:170 F3 2F 8D。,显示和修改寄存器或存储单元有关命令,4.F命令 在指定的存储器地址范围内置入list参数给出的数值或字符代码。默认段地址为DS。 F 范围 数据表 将

25、数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。 F DS:0 L5 01,02,03,04,05 F DS:0 L5 01 02 03 04 05(空格分隔) F DS:0 L5 FF ;5个字节重复使用FF,显示和修改寄存器或存储单元有关命令,5.M命令 用指定的存储区的内容传送到另一指令的存储区去。默认段地址为DS。 M 范围 地址 范围指被传送的存储区的地址范围。 地址指传送的目的存储区的开始地址。,运行程序命令,1.G命令 执行正在调试的程序。默认段地址为CS。 G;从CS:IP指向的指令开始执行程序,直到程序结束。 G=地址;从指定地址开始执行程

26、序,直到程序结束。 G 断点1,断点2,断点10;从CS:IP指向的指令开始执行程序,直到遇到断点。 G=地址 断点1,断点2,断点10 G=100 ;从指定地址开始执行程序。 G=100 105 110 120,运行程序命令,2.T命令 执行一条或多条指令,每执行一条指令如同执行一次R命令,显示所有寄存器的内容和状态标志位的状态。 T;从当前IP开始执行一条指令。 T 数值;从当前IP开始执行多条指令。 T =地址; T =地址 数值; T T5 / T=100 5 要想填入正确的地址和要跟踪的命令数,应先使用-u命令察看内容,运行程序命令,3.P命令 跟踪执行并跳过子程序 。 P =地址 数值;类似T命令,但跳过子程序和中断服务程序,运行程序命令,T命令和P命令的区别 单步跟踪命令T 单步执行命令P 人们常将单步跟踪命令称作“单步进入(step in)”,而将单步执行命令称作“单步通过(step over)”。 对于t命令,单步跟踪命令t会进入进程,一步步地执行 而单步执行命令p会按照一般程序执行,而不会进入进程中,汇编与

温馨提示

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

评论

0/150

提交评论