MASM汇编基础及上机.ppt

上传人:牧羊曲112 文档编号:6511611 上传时间:2023-11-08 格式:PPT 页数:69 大小:566.50KB
返回 下载 相关 举报
MASM汇编基础及上机.ppt_第1页
第1页 / 共69页
MASM汇编基础及上机.ppt_第2页
第2页 / 共69页
MASM汇编基础及上机.ppt_第3页
第3页 / 共69页
MASM汇编基础及上机.ppt_第4页
第4页 / 共69页
MASM汇编基础及上机.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《MASM汇编基础及上机.ppt》由会员分享,可在线阅读,更多相关《MASM汇编基础及上机.ppt(69页珍藏版)》请在三一办公上搜索。

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汇编基础及上机,assumecodesg XXX segment XXX ends end,4.6 汇编程序的编写与执行4.6.2 源程序,寄存器与段的关联假设,assume:含义为“假设”。它假设某一段寄存器和程序中的某一个用 segment ends 定义的段相

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

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

5、egment start:mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21hcodesg endsend start,语法错误和逻辑错误,逻辑错误程序在编译时不能表现出来的、在运行时发生的错误不容易发现。,assume cs:codesgcodesg segment start:mov ax,0123h mov bx,0456h add ax,bx add ax,axcodesg ends mov ax,4c00h int 21hend start,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行4.

6、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键。目标文件(*.obj)是我们对一个源程序进行编译要得到的最终结果。编译程序默认要输出的目标文件名为1.o

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

8、警告错误和必须要改正的错误。一般来说,有两类错误使我们得不到所期望的目标文件:(1)我们程序中有“Severe Errors”;(2)找不到所给出的源程序文件。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行4.6.4 连接在对源程序进行编译得到目标文件后,我们需要对目标文件进行连接,从而得到可执行文件。继续上一节的过程,我们再将D:masm1.obj连接为D:masm1.exe。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行4.6.4 连接进入DOS方式,进入C:masm目录,运行link.exe。在输入目标文件名的时候,要注意指明它所在的路径。这里,我们要连接

9、的文件是当前路径下1.obj,所以此处输入“1”。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行4.6.4 连接输入要连接的目标文件名后,按Enter键。可执行文件是我们对一个程序进行连接要得到的最终结果。连接程序默认要输出的可执行文件名为 1.EXE,所以可以不必再另行指定文件名。我们直接按 Enter 键,使用连接程序设定的可执行文件名。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行4.6.4 连接映像文件是连接程序将目标文件连接为可执行文件过程中产生的中间结果。可以不生成这个文件,直接按 Enter 键即可。,第4章 MASM汇编基础及上机,4.6 汇编程

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

11、很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;,连接,连接的作用有以下几个(续):一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。注意,对于连接的过程,可执行文件是我们要得到的最终结果。,第4章 MASM汇编基

12、础及上机,4.6 汇编程序的编写与执行4.6.5 执行现在,终于将我们的第一个汇编程序加工成了一个可在操作系统下执行的程序文件。1.exe的执行情况:程序到底运行没有?程序当然运行了,只是从屏幕上不可能看到任何运行结果。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行4.6.5 执行我们的程序没有像显示器输出任何信息。程序只是做了一些将数据送入寄存器和加法的操作,而这些事情,我们不可能从显示屏上看出来。程序执行完成后,返回,屏幕上再次出现操作系统的提示符。可执行文件中的程序装入内存并运行的原理,可执行文件中的程序装入内存并运行的原理,DOS是一个单任务操作系统。在DOS中,可执行

13、文件中的程序P2若要运行,必须有一个正在运行的程序P1,将 P2从可执行文件中加载入内存,将CPU的控制权交给它,P2才能得以运行;P2开始运行后,P1暂停运行。当P2运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P1。此后,P1继续运行。1.exe的执行过程,可执行文件中的程序装入内存并运行的原理,1.exe的执行过程:(1)我们在提示符“D:masm”后面输入可执行文件的名字“1”,按Enter键。(2)1.exe中的程序运行;问题1(3)运行结束,返回,再次显示提示符“D:masm”。问题2,问题1执行第(1)步操作时,有一个正在运行的程序将1.exe中的程序加载入内存,这个正

14、在运行的程序是什么?它将程序加载入内存后,如何使程序得以运行?结论在DOS中直接执行 1.exe 时,是正在运行的command将1.exe中的程序加载入内存。command设置CPU的CS:IP指向程序的第一条指令(即程序的入口),从而使程序得以运行。,问题2执行第(3)步操作,程序运行结束后,返回到哪里?结论程序运行结束后,返回到command中,CPU继续运行command。,第4章 MASM汇编基础及上机,4.6 汇编程序的编写与执行汇编程序从写出到执行的过程:1.编写源程序1.txt2.编译masm 1.txt 1.obj3.连接link 1.obj 1.exe4.加载到内存并运行,

15、第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用为了观察程序的运行过程,我们可以使用Debug。Debug 可以将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU 的控制,这样,我们就可以使用Debug 的相关命令来单步执行程序,查看每条指令的执行结果。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用接下来可以用R命令看一下各个寄存器的设置情况:可以看到,Debug将程序从可执行文件加载入内存后,CX寄存器中存放的是程序的长度。1.exe 中程序的机器码共有15个字节。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用

16、用U命令查看一下其他指令:,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用用T命令单步执行程序中的每一条指令,并观察每条指令的执行结果。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用到了 int 21,要用P命令执行:int 21 执行后,显示“Program terminated normally”,返回到Debug中。表示程序正常结束。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用最后,使用Q命令退出Debug,将返回到command中,因为Debug是由command加载运行的。如果需要退出DOS,请输入exit并回车。,第4章

17、MASM汇编基础及上机,需要注意的是,在 DOS 中运行程序时,是command将程序加载入内存;所以程序运行结束后返回到command中,而在这里是debug 将程序加载入内存,所以程序运行结束后要返回到Debug中。我们在 DOS中用“Debug 1.exe”运行Debug对1.exe进行跟踪时,程序加载的顺序是:command加载Debug,Debug加载1.exe。返回的顺序是:从1.exe中的程序返回到Debug,从Debug返回到command。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用启动Debug启动 Debug,它是可用于测试和调试 MS-DOS 可执

18、行文件的程序。Debug drive:path filename parameters drive:path filename 指定要测试的可执行文件的位置和名称。parameters 指定要测试的可执行文件所需要的任何命令行信息。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用Debug 命令?显示 Debug 命令列表。a 汇编 8086/8087/8088 记忆码。c 比较内存的两个部分。d 显示部分内存的内容。e 从指定地址开始,将数据输入到内存。f 使用指定值填充一段内存。g 运行在内存中的可执行文件。h 执行十六进制运算。i 显示来自特定端口的 1 字节值。l 将

19、文件或磁盘扇区内容加载到内存。m 复制内存块中的内容n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用Debug 命令 o 向输出端口发送 1 个字节的值。p 执行循环、重复的字符串指令、软件中断或子例程。q 停止 Debug 会话。r 显示或改变一个或多个寄存器。s 在部分内存中搜索一个或多个字节值的模式。t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行的指令的解码形式。u 反汇编字节并显示相应的原语句。w 将被测试文件写入磁盘。xa 分配扩展内存。xd 释放扩展内存。xm

20、映射扩展内存页。xs 显示扩展内存的状态。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用调试命令显示和修改寄存器或存储单元有关命令运行程序命令汇编和反汇编命令文件的装、写命令退出DEBUG命令其他命令,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用命令参数分隔命令参数 所有 Debug 命令都接受参数,除了 q 命令之外。可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价:dcs:100 110 d cs:100 110 d,cs:100,110,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用命令参

21、数指定有效地址项 Debug 命令中的 address 参数指定内存位置。Address 是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u 和 w 命令的默认段是 CS。所有其他命令的默认段是 DS。所有数值均为十六进制格式。有效地址如下:CS:0100 04BA:0100 在段名和偏移量之间要有冒号。,第4章 MASM汇编基础及上机,4.7 调试程序Debug的使用命令参数指定有效范围项 Debug 命令中的 range 参数指定了内存的范围。可以为 range 选择两种格式:起始地址和结束地址,或者起始地址和长度范围(由 L 表示

22、)。例如,下面的两个语法都可以指定从 CS:100 开始的 16 字节范围:cs:100 10f cs:100 L 10,显示和修改寄存器或存储单元有关命令,1.R命令显示单个寄存器的内容并等待修改这个寄存器的内容。R之后输入寄存器名字符。显示所有寄存器和标志位值。只输入R。,显示和修改寄存器或存储单元有关命令,1.R命令显示上述8个状态标志位的状态并等待重新设置。输入RF。按回车不改变标志位状态。或输入新的状态符,重新设置标志位状态。,显示和修改寄存器或存储单元有关命令,2.D命令显示某个存储区的内容。D,如不指定范围,一次显示8行16个字节D 默认段寄存器为DS,当前偏移地址 D 地址D

23、0B03:0100D 130;130为偏移地址,默认段寄存器DS,显示和修改寄存器或存储单元有关命令,2.D命令显示某个存储区的内容。D 范围-D DS:100-D CS:100-D DS:100 110-D 100 L 10,显示和修改寄存器或存储单元有关命令,3.E命令显示和修改存储单元的内容。默认段地址为DS。E 地址从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据减号键显示上一个单元内容并可修改空格键显示下一个单元内容并可修改如不修改,可按回车键结束命令。E 地址 数据表从指定的地址开始用数据表给定的数据修改存储单元。E DS:17

24、0 F3 2F 8D。,显示和修改寄存器或存储单元有关命令,4.F命令在指定的存储器地址范围内置入list参数给出的数值或字符代码。默认段地址为DS。F 范围 数据表将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。F DS:0 L5 01,02,03,04,05F DS:0 L5 01 02 03 04 05(空格分隔)F DS:0 L5 FF;5个字节重复使用FF,显示和修改寄存器或存储单元有关命令,5.M命令用指定的存储区的内容传送到另一指令的存储区去。默认段地址为DS。M 范围 地址范围指被传送的存储区的地址范围。地址指传送的目的存储区的开始地址。,

25、运行程序命令,1.G命令执行正在调试的程序。默认段地址为CS。G;从CS:IP指向的指令开始执行程序,直到程序结束。G=地址;从指定地址开始执行程序,直到程序结束。G 断点1,断点2,断点10;从CS:IP指向的指令开始执行程序,直到遇到断点。G=地址 断点1,断点2,断点10G=100;从指定地址开始执行程序。G=100 105 110 120,运行程序命令,2.T命令执行一条或多条指令,每执行一条指令如同执行一次R命令,显示所有寄存器的内容和状态标志位的状态。T;从当前IP开始执行一条指令。T 数值;从当前IP开始执行多条指令。T=地址;T=地址 数值;T T5/T=100 5要想填入正确

26、的地址和要跟踪的命令数,应先使用-u命令察看内容,运行程序命令,3.P命令跟踪执行并跳过子程序。P=地址 数值;类似T命令,但跳过子程序和中断服务程序,运行程序命令,T命令和P命令的区别单步跟踪命令T单步执行命令P人们常将单步跟踪命令称作“单步进入(step in)”,而将单步执行命令称作“单步通过(step over)”。对于t命令,单步跟踪命令t会进入进程,一步步地执行而单步执行命令p会按照一般程序执行,而不会进入进程中,汇编与反汇编命令,1.A命令直接汇编汇编语言指令存入存储器A 地址;从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略

27、地址,则从当前CS:IP开始(通常是CS:100)。在DEBUG下编写简单程序即使用A命令。每条指令后要按回车。不输入指令按回车,或按Ctrl+C结束汇编。支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。,汇编与反汇编命令,2.U命令对存储器内的指令机器码进行反汇编。U 地址;从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。U 范围;对指定范围的单元进行反汇编。U U100 U100L10,汇编与反汇编命令,文件的装、写命令,1.N命令 N 文件标示符;指

28、定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。N MY_PRO.COM写盘:在当前盘当前目录生成指定文件。读盘:在当前盘当前目录读取指定文件。N A:USER MY_PRO.COM,文件的装、写命令,2.L命令 L 地址;装入N命令指定的文件,默认的内存地址为CS:100。N MY_PRO.COM L L 地址 驱动器号 扇区号 扇区数;将某驱动器的若干扇区(最多80H个)装入内存;0=A,1=B,2=C;默认的段地址为CS。L DS:200 2 0 1,文件的装、写命令,3.W命令 W 地址;将指定地址开始的内存数据写入磁盘,生成N命令指定的文件;默认的内存地址为CS:100;写盘的字节数由BX(高位字)和CX(低位字)决定,可执行程序写盘时,文件扩展名应指定.COM。N MY_PRO.COM W W 地址 驱动器号 扇区号 扇区数;将内存数据写入磁盘的若干扇区(最多80H);默认的段地址为CS。W DS:0 2 0 1 注释:写磁盘扇区要慎用,其他命令,1.S命令2.C命令3.H命令4.I命令5.O命令6.Q命令,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号