汇编语言开发工具的使用自学内容_第1页
汇编语言开发工具的使用自学内容_第2页
汇编语言开发工具的使用自学内容_第3页
汇编语言开发工具的使用自学内容_第4页
汇编语言开发工具的使用自学内容_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、3.5 汇编语言运行及调试环境Ø 汇编语言源程序是一个文本文件,其默认扩展名为.asm,在将其汇编(也称为翻译)成语言之前,必须首先生成该文件;可以用任何文本编辑工具编辑,包括Windows下的“记事本”、“写字板”,乃至“Word”来编辑汇编语言源程序。如果使用“Word”一定要保存为无格式的纯文本文件,而不是.doc或其他文件格式。Ø 程序设计时,首先提取要处理问题的数学模型,寻找合适的算法,在已知算法的基础上遵循汇编语言规范,构思程序流程,必要时画出流程图(也称作框图),最后按照流程图用汇编语句逐一实现流程图中的每一步,形成源程序。Ø 汇编语言源程序文件.a

2、sm生成后,需要经过汇编生成.obj中间文件,然后连接.obj才能够最终生成.exe可执行文件。本节介绍下列内容:3.5.1 DOS下Edit的使用3.5.23.5.33.5.4Debug调试汇编程序EMU8086的使用用MASM(或ASM)运行汇编语言程序3.5.1 DOS下Edit的使用(1)进入Edit的DOS环境窗口Windows下,选择【开始】|【运行】命令,弹出【运行】框,如图3-1所示,在【打开】下拉列表框中输入edit,单击【确定】按钮,进入DOS环境下的Edit窗口,如图3-2所示。图3-2 Edit窗口图3-1 Windows运行框DOS下Edit的使用(2)用Edit编辑

3、汇编语言程序Edit编辑是一个DOS环境的编辑软件,因此主要用键盘操作。Edit窗口全屏幕显示的切换方式是按Alt+Enter组合键,一旦切换到全屏幕方式,其显示如同在DOS环境下的状态,必要时可以再次按Alt+Enter组合键返回到窗口方式。Edit窗口的上方是命令菜单选项: File、Edit、Search、View、Options和Help。通过组合键 Alt+菜单项的首字母,可以打开相应的菜单选项。例如,按 Alt+F组合键弹出File菜单,如图3-3所示。图3-3 Edit窗口3.5.2Debug调试汇编程序用Debug运行汇编语言程序Debug调试程序是以DOS外部命令程序的形式提

4、供的,它的文件名是。在进入Debug的提示符“-”之后,用户可以通过Debug令输入汇编源程序,并用相应命令将其汇编成语言程序,然后调试并运行该程序。使用Debug运行汇编程序较之使用ASM和MASM运行有以下优点。Ø 可在最底层环境下直接运行,免去使用ASM或MASM所必须熟悉的文本编辑程序、ASM和MASM汇编程序,以及LINK程序的麻烦,因而调试周期短;Ø 熟悉Debug命令的使用,可以为以后的软件开发掌握一种最容易找到的调试工具。这是因为Debug除了可运行汇编语言,还可以直接用来检查和修改内存单元、装入、及启动可执行程序,检查及修改寄存器。也就是说Debug命令可

5、以深入到计算机的基本级,可使用户通过这些命令了解计算机底层的工作状态。然而在Debug下调试和运行汇编语言程序也受到了一些限制,即不宜汇编较长的程序,不便于分块程序设计,也不便于形成以DOS外部命令形式的EXE文件,不能使用浮动地址,也不能使用绝大多数ASM和MASM提供的伪指令。Debug调试汇编程序举例 显示内存中的内容,理解内存分段的本质含义。(1)进入Debug在Windows下,选择【开始】|【运行】命令,弹出【运行】框,如图3-4所示,在【打开】下拉列表框中输入debug,单击【确定】按钮,进入DOS环境下的Debug窗口,其标志是Debug所示。令提示符“-”,如图3-5图3-4

6、 运行Debug图3-5 Debug窗口Debug调试汇编程序Ø Debug的提示符是“-”,在这一提示符下输入DebugDebug将对命令解释并且执行。Ø Debug命令的关键字是单个字母,并且不区分大小写,关键字用来指出该命令做什么。依命令的不同,关键字后可以给出操作参数,操作参数指出了该命令按照何种方式去进行。Ø 关键字与参数、参数与参数之间用空格隔开,命令若结束按令,Enter键(键)。必要时按Ctrl+Break组合键可中止命令的执行,Ctrl+Num Lock组合键可暂停屏幕卷动,按任一键继续。Ø Debug下所用数据均为十六进制数,且不必写

7、H,如果写H会导致错误发生。Debug调试汇编程序(2)用Debug的E命令修改内存单元的内容如图3-6所示,在Debug令提示符“-”后,输入E 1000:100 I LoveAsm后并按Enter键。Debug的E命令用于修改指定内存单元的内容,在后续部分会详细介绍。(3)用Debug的D命令和D的不同地址参数显示同样单元的内容。继步骤(2)操作之后,在Debug令提示符“-”后,输入D 1000:100109后并按Enter键,观察屏幕右侧字符显示区域的内容,找到I Love Asm字符串,想想为什么?令提示符“-”后,输入D 1010:0 9后并按Enter键,观察右侧在新就绪字符显示

8、区域的内容。令提示符“-”后,再输入D 900:7100 7109后并按Enter键,在新就绪观察右侧字符显示区域的内容。令提示符“-”后,再输入 D 11:FFF0 FFF9后并按Enter键,在新就绪观察右侧字符显示区域的内容。Debug调试汇编程序图3-6 Debug结果典型Debug命令剖析D(1)显示内存命令D (Display )功能:显示内存内容。格式:D命令有以下三种格式。格式一: D格式二: D <地址>格式三: D <地址范围>说明:格式一Dü 进入Debug后,在命令提示符“-”下单独输入D命令后,将在屏幕上显示当前段、位移为100H起始

9、的128个字节的内容。每行显示16个字节的内容。屏幕左侧为起始地址“段地址:位移”;中间以十六进制形式显示16个字节的内容,前8 个与后8个之间用短横线分隔,以便于阅读;右侧以ASCII码字符形式显示这16个单元的内容,如果该单元内容为不可显示字符,则以小数点的形式显示。ü 格式一的D命令仅能受限制地从当前代码段位移为 100H处开始显示,或是继前一次后显示紧接着的 128 个单元内容。当需要更快捷地直接显示内存中某指定地址处开始的内容时,可以使用带地址的D命令。典型Debug命令剖析D格式二 D <地址>ü 带地址的D命令仍然显示128个字节,但总是从一个能够

10、被16整除的地址开始排列;ü 这里的“地址”不但支持形如1000:82这样指定了段地址及位移的绝对地址,还可以仅仅输入D及位移,这种情况总是默认为当前段地址;ü 任何时候输入的单字母“D”命令总是接着上一次的内容继续显示。格式三 D <地址范围>ü 当需要观察的内存内容限定在一个特定范围内时,用带“范围”参数的D命令会更加方便。ü 例如,当仅仅需要显示当前段,位移从100H开始到10AH为止的内存内容时,可以通过命令“D 100 10A”得到所需要的内容ü <地址范围>还可以通过指定:“开始段基址:位移 结束位移”决定要

11、显示的相应范围,如图2-13所示。也可以通过指定:“开始段基址:位移 L长度”的方式决定要显示的相应范围等。典型Debug命令剖析D典型Debug命令剖析E(1)编辑修改内存命令E (Edit)功能:编辑修改内容 。格式:E <地址>说明:ü 这里 “地址”概念同前面的D命令;ü Debug的E命令首先以十六进制形式显示指定地址的原值并以小数点结尾,然后等待输入新值,按空格键跳到下一个要修改的字节,并继续按这种方法修改。如果等待输入新值时直接按空格,当前字节的直到按Enter键为止。被保留并跳到下一个字节等待修改,ü 例如,在命令提示符“-”后输入E

12、203,并观测操作结果。典型Debug命令剖析E举例 用E命令直接输入显示单个字符的代码程序并且执行进入Debug后,按以下过程操作并观察结果:-e200 b2 33 b4 02 cd 21 cd 20-g=200 3Program terminated normally-e201-u200 207 13B4:0200 B24113B4:0202 B40213B4:0204 CD2113B4:0206 CD20-qMOV DL,41 MOV AH,02INT INT212013B4:0201-g=200 A33.41Program terminated normally典型Debug命令剖析A

13、,G,U下面通过实例介绍Debug命令。例1在Debug下调试运行一个汇编程序。本例用A命令将源程序写入内存,使用G命令执行,再用U命令反汇编,接着用D命令显示后,用Q命令DOS提示符。Debug,返回(1)进入Debug,用A命令直接写入并汇编一个程序。C:>debug-A1000B0F:0100 MOV DL,330B0F:0102 MOV AH,20B0F:0104 INT 210B0F:0106 INT 200B0F:0108典型Debug命令剖析(2) 执行该程序-G3Program terminated normally-(3) 用U命令反汇编-U100 1080B0F:01

14、00 B2330B0F:0102 B4020B0F:0104 CD210B0F:0106 CD200B0F:0108 207401MOV MOV INT INTANDDL,33 AH,02 2120SI +01,DH典型Debug命令剖析Ø 汇编命令:A命令格式1: A <段寄存器名>:<位移>格式3: A <位移>格式2: A <段地址>:<位移>格式4: A功能:输入该命令后,显示段地址和偏移量,等待用户从键盘上逐条输入汇编命令,并逐条汇编成代码指令,直到显示下一地址时用户直接输入返回到提示符。键Ø 执行命令:

15、G命令格式1:G格式2:G <地址>格式3:G <地址>,断点功能:格式1从CS段位移100H处开始执行;格式2从指定地址开始执行;格式3从指定地址开始执行,到断点自动停止。Ø 反汇编命令:U命令格式1:U <地址>格式2:U <地址范围>功能:将指定范围内的代码以汇编语句形式显示。反汇编时应指定指令的起始地址,否则得不到正确结果。地址的默认值是上一次U指令后下一地址的值。典型Debug命令剖析例2 调试运行一段指令程序。本例显示 200H 处开始的一片单元内容,然后用E命令,将代码指令写入200H208H,然后执行,再用U命令一段反汇

16、编。(1)进入Debug并且显示位移为200H处的起始地址内容。C:>debug-D2000B0F:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .0B0F:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .0B0F:0220 4E 87 00 00 4E 92 4E 9D-4E A8 4E B3 4E BE 4E C9 N. N.N.N.N.N.N.0B0F:0230 4E D4 4E DF 00 00 4E EA-4E F5 4E 00 4F 0B 4F 16 N.N

17、. N.N.N.O.O.0B0F:0240 4F 21 4F 2C 4F 37 7A 03-4F 00 13 01 FF 00 A7 05 O! O,O7z.O.0B0F:0250 80 00 CE 04 10 00 21 D7-40 AF 21 D7 40 AF 21 D7!.!.!0B0F:0260 40 04 22 B7 40 04 22 D7-40 2F 21 D7 40 2F 21 E2 ./!./0B0F:0270 43 CC 21 B7 40 6B 21 C7-40 AF 21 C7 40 AF 21 C7 C.!.K!.!.!典型Debug命令剖析(2)用E命令把代码指令写入内

18、存。E200 B2 33 B4 02 CD 21 CD 20 1B(3)用G命令从200H处开始执行。-G=200 3Program terminated normally(4)用U命令反汇编。-U200 2080B0F:0200 B2330B0F:0202 B4020B0F:0204 CD210B0F:0206 CD200B0F:0208 1B00MOV MOV INT INT SBBDL,33 AH,02 2120AX,BX+SI(5)用Q命令返回DOS。-QC:>典型Debug命令剖析 R,T例3 R命令及T命令应用实例。本例用A命令汇编一段汇编程序, 用R命令显示状态,并用T命令

19、单条执行。(1)进入Debug并用A命令写入汇编源程序。C:>debug-A1000B0F:0100 MOV AH,30B0F:0102 MOV AL,20B0F:0104 ADD AL,AH0B0F:0106 INT 200B0F:0108(2)用R命令显示寄存器状态 。-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000DI=0000DS=0B0F ES=0B0F SS=0B0F CS=0B0F IP=0100 NV UP EI PL NZ NA PO NC0B0F:0100 B403MOVAH,03典型Debug命令剖析

20、(3) 用T命令单条执行两条指令。-TAX=0300 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B0F ES=0B0F SS=0B0F CS=0B0F IP=0102 NV UP EI PL NZ NA PO NC0B0F:0102B002MOVAL,02-TAX=0302 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B0F ES=0B0F SS=0B0F CS=0B0F IP=0104 NV UP EI PL NZ NA PO NC0B0F

21、:010400E0ADD AL,AH(4)用T命令单条执行第3条指令,结果在AL中,(AL)=5。-TAX=0305 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B0F ES=0B0F SS=0B0F CS=0B0F IP=0106 NV UP EI PL NZ NA PO NC0B0F:0106CD20INT 20典型Debug命令剖析Ø 显示寄存器命令:R命令格式1:R格式2:R <寄存器名>功能:格式1显示当前所有寄存器的内容、状态标志及将要执行的下一指令的地址、代码和汇编语句形式。例如:R

22、 AX 或 R FØ 跟踪调试命令:T命令格式:T=<地址> <条数>功能:执行由指定地址开始的、由条数指定的若干条命令,地址的默认值是当前的IP值,默认条数是1条。例如:T表示执行当前指令并显示状态;T 10表示从当前指令开始执行10H条指令。典型Debug命令剖析F,M,C例4 M命令、C命令的应用(1) 进入Debug,显示100H110H的内容。C:>debug-D100 1100B0F:0100 0F 00 B9 8A FF F3 AE 47-61 03 1F 8B C3 48 12 B1 .Ga.H.0B0F:0110 04(2) 用F命令将

23、31H装入100H至110H-F100 110 31(3) 用D显示100H至117H-D100 1170B0F:0100 31 31 31 31 31 31 31 31-31 31 31 31 31 31 31 310B0F:0110 31 8B C6 F7 0A D0 D3 01.1111111111111111典型Debug命令剖析(4) 用E命令修改105H至108H-E105 61,61,62,63(5) 用D命令显示100H至110H-D100 1100B0F:0100 31 31 31 31 31 61 61 62-63 31 31 31 31 31 31 310B0F:0110

24、 3111111aabc1111111(6) 用M命令将100H至110H的内容-M100 110 200到200H至210H(7) 用D命令显示200H至210H-D200 2100B0F:0200 31 31 31 31 31 61 61 62-63 31 31 31 31 31 31 310B0F:0210 3111111aabc11111111典型Debug命令剖析(8)用E命令修改201H,202H,203H,20DH,20EH,20FH-E201 32 31 34-E20D 41 42 43(9)用D命令显示200H至210H内容及100H至110H-D200 2100B0F:02

25、00 31 32 31 34 31 61 61 62-63 31 31 31 31 41 42 430B0F:0210 31-D100 1100B0F:0100 31 31 31 31 31 61 61 62-63 31 31 31 31 31 31 310B0F:0110 3112141aabc1111ABC111111aabb11111111典型Debug命令剖析(10) 用C命令比较100H至110H与200H至210H的内容,并显示二者不一致的-C100 110 2000B0F:01010B0F:01030B0F:010D0B0F:010E0B0F:010F-QC:>313131

26、313132344142420B0F:02010B0F:02030B0F:020D0B0F:020E0B0F:020F典型Debug命令剖析Ø 填充内存命令:F命令格式:<范围><单元内容表>功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用复使用。例如:F 5BC:200 L 10 B2, XYZ, 3C可重Ø 内存搬移命令:M命令格式:M <源地址范围> <目标起始地址>功能:将源地址范围中的内容顺序搬至目标起始地址起的一片连续单元。Ø 比较命令:C命令格式:C <源地址范围>,<目标

27、地址>功能:从源地址范围的起始单元起,逐个与目标起始地址以后的单元顺序比较单元内容,直至源的中止地址为止。遇有不一致时,以<源地址>< 标内容><目标地址>的形式显示失配单元及内容。><目典型Debug命令剖析 E,S例5 E命令和S命令应用例(1) 在位移300处写入ABCDEFG,并且显示这些单元内容-E300 ABCDEFG-D300 3060B0F:0300 41 42 43 44 45 46 47ABCDEFG(2) 在位移310处写入” 1234 ”,并且显示这些单元内容-E310”1234”-D310 3150B0F:0310

28、 27 31 32 33 34 271234(3) 在位移320H处写入'123ABC',并且显示这些单元内容。-E320 31 32 33 41 42 43-D320 3250B0F:0320 31 32 33 41 42 43123ABC典型Debug命令剖析(4) 在300H306H处搜索字符D,在310315处搜索字符D,在310315处搜索字符3等。-S300 306 'D' 0B0F:0303-S310 315 'D'-S310 315 '3'0B0F:0313-S310 315 "'" 0

29、B0F:03100B0F:0315(5) 显示310H325H的内容后-D310 3250B0F:0310 27 31 32 33 34 27 22 13-41 AF 21 13 41 AF 21 13。1234.A.!.A.!.0B0F:0320 31 32 33 41 42 43123ABC典型Debug命令剖析例6考。Debug下执行计算机重启指令程序,并对遇到的现象进行思Debug使用虽然方便,但在Windows保护模式环境下,对于不少涉及系统操作的指令却无法执行,而在DOS操作系统下则过一个实验来体会这一限制。在Debug提示符后输入如下内容:-A13B3:0100 jmp FFFF

30、:013B3:0105-G出现这些问题。下面,通器地址FFFF:0000的指令,这一指令将跳转本实验旨在调用位于内存只读到重新启动计算机的引导程序。但是在Windows环境下,这条指令是执行的。这与多任务操作系统的执行保护有关,试想在某些在执行的情况下其中一个程序去或是无意执行一条开机指令,结果相当于重新启器,其后果是设想的。典型Debug命令剖析Ø 在Windows XP等常用操作系统下,尽管感觉上应用程序好像是在真正地操作硬件,但实际上是操作系统通过虚拟设备驱动程序在底层负责完成应用程序与硬件的实际。这样处理是为了使系统更加健壮,不过却给学习汇编语言带来了一定的麻烦和不便。因此本

31、例的上述Debug命令在执行时,系统通常会弹出一个警告,程序执行了违法操作将被关闭,在某些系统下,当前台窗口会停止响应,出现程序死锁现象。这是因为Windows操作系统自从NT以后,对系统管理采用了全新的方法,程序将不能直接去那些对于系统来说容易导致的指令。Ø 要想使上述Debug命令能够执行,必须搭建一个在Windows下不受这一限制的虚拟DOS环境VPC。在VPC虚拟的操作系统环境下,可以不受以上Windows的限制,而随心所欲地硬件和系统是模拟出来的,模拟出来的硬件和系统。尽管这种情况下的指令及程序是真实的,这样既能够进一步深入学习汇编的相关内容,又可以不受Windows的以上

32、限制。3.5.3EMU8086的使用Ø Emu8086是集8086/8088汇编和为一体的虚拟PC工具软件,它几乎可以解决学习汇编语言的所有问题。Emu8086含汇编语言源程序编辑器、汇编虚拟PC,以及教学软件。这对初学汇编语言程序、具有调试功能的软件的人来说是一个很有用的学习工具。它可以在虚拟PC地编辑调试汇编语言程序,支持单步执行,而且的算术和逻辑运算单元ALU可以显示指令的执行情况完全可视化。其所处理器CPU内部的工作情况;可以在程序执行的同时观察寄存器、标志位和内存。Ø 模拟器在虚拟出的PC中执行程序,避免了存取操作实际硬件(如硬盘、内存等)在Windows环境下所

33、带来的麻烦。在虚拟机上执行汇编程序,如同在真实硬件环境下执行,使得所有硬件底层级的指令可以得到“直接”而直观的执行。由于汇编代码是在虚拟机上执行,因此调试非常方便。这一软件兼容所有80x86系列的处理器,可以在Windows环境下运行。EMU8086的使用如右图所可示以, 在Emu8086Windows 平台下运行, 各种调试窗口为调试汇 编语言程序提供了极大 的方便。它也可以模拟DOS 的图形显示环境, 为学习、理解并设计图 形化程序提供了参考。Emu8086下的图形模式模拟显示屏EMU8086的使用例 LED显示端口这一练习通过向端口199写入16位数据,让一个模拟的LED发光装置进行计数

34、操作。结果是在环境下运行,但其对端口的操作与实际应用中的端口操作方法及实际效果是一样的。源程序EX2-10.asm如下:#START=LED_DISPLAY.EXE#MAKE_BIN# NAME "LED" MOV AX, 1234OUT 199, AXMOV AX, -5678OUT 199, AXMOV AX, 0X1: OUT 199, AX INC AXJMP X1 HLTEmu8086下的LED端口3.5.4用MASM(或ASM)运行汇编语言程序对使用MASM或ASM汇编后运行的汇编语言源程序有一定的要求。ü 在程序的书写方式上要遵循一定的规范。这样的源

35、程序要有逻辑段的说明,而且必须至少有一个逻辑代码段。ü 源程序必须经过源程序编辑、汇编、连接后生成一个EXE文件才能够执行。EXE文件是作为DOS的外部命令在DOS下运行的。ü 小汇编ASM下的汇编语言程序可在64KB的内存条件下运行,且只能有限地使用伪指令。而宏汇编MASM下则必须在96KB以上的内存条件下运行, 且可使用各种伪指令。在ASM和MASM运行过程中,除汇编时用ASM代替MASM进行汇编外,其他步骤完全相同。在MASM下调试运由汇编语言源程序到生成可执行文件的过程行汇编语言程序的详细步骤如下页图所示。用MASM(或ASM)运行汇编语言程序汇编语言程序的调试步骤

36、MASM实例例 用MASM调试一个汇编程序。假设在D盘建立了一个名为MASM的子目录(Windows称作文件夹),同时已经将汇编程序MASM、连接程序LINK等都到该目录下,同时将要编辑的汇编语言源程序及其附属文件都存放在该子目录下。源程序名为sam.asm,程序如下:CODE SEGMENT ASSUME CS:CODESTART: MOV DL,33HMOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDSEND STARTMASM实例方法一在Windows内置DOS环境下运行MASM调试汇编程序(1) 进入Edit编辑Windows下,选择【开始】|【运行

37、】命令,弹出【运行】框,在【打开】下拉列表框中输入command,单击【确定】按钮,进入Windows环境下的DOS窗口。DOS窗口全屏幕显示的切换方式是按组合键Alt+Enter,一旦切换到全屏幕方式,其屏幕方式如同在DOS环境下的状态,必要时可以再次按Alt+Enter组合键返回到Windows窗口方式。这里假设MASM目录在D盘MASM目录下。为方便后续的调试,在DOS下输入D: 后按Enter键,设置D盘为当前盘。再输入CD MASM按Enter键,将MASM置为当前目录。然后在DOS提示符下输入Edit按Enter键,启动Edit窗口。(2) 在Edit下编辑源程序sam.asm在E

38、dit交互界面中,选择File|New命令,在编辑窗口逐行输入源程序。程,选择File|Save As命令,在弹出的序编辑框中输入源程序名sam.asm后单击OK按钮确定并且存盘。存盘后选择File|Exit命令返回DOS环境。MASM实例(3)汇编D:MASM>masmMicrosoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981 1985,1987. Source filename .asm:samObject filename sam.obj: Source listing NUL.lst:s

39、am Cross reference NUL.crf:sams.50698Bytes symbol space free0 Warning Errors0 Severe Errors(4) 连接D:MASM>linkMicrosoft (R) Overlay Linker Version 3.60 Copyright (C) Microsoft Corp 1983 1987. Object Modules .obj:samRun File sam.exe:List File NUL.map:samLibraries .lib:LINK:warning L4021:no stack seg

40、ments.MASM实例(5) 执行直接执行,在DOS下运行步骤4连接生成的可执行文件sam.exe。D:MASMsam.exe 3在Debug下执行,必须写全名:D:MASM>debug-n sam.exe-1-g 3;N命令,指定读写文件;L命令,装入指定的文件;G命令,运行文件Program terminated normallyMASM实例(6) 产生索引表文件并输出D:MASM>crefMicrosoft (R) Cross Reference Untility Version 5.00 Copyright (C) Microsoft Corp 1981 1985,198

41、7.Cross reference .crf:samListing sam.ref:2 Symbols D:MASM>type sam.refs.Microsoft Cross-Reference Version 5.00 Wed Jul 23 03:35:40 2008 Symbol Cross-Reference (# definition, + modification) Cref-1CODE . . . . . . . . . . . . . .START. . . . . . . . . . . . . .2 Symbols1#3#298MASM实例(7) 打印.lst文件和.

42、map文件文件sam.lst如下:Microsoft (R) Macro Assembler Version 5.007/23/8Page1-11 000023 00004 00025 00046 00067 0008CODE SEGMENT ASSUME CS:CODE START:MOV DL,33HMOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END STARTB2 33B4 02CD 21 B4 4C CD 218 000A9MASM实例打印.lst文件和.map文件(续)Microsoft (R) Macro Assembler Versi

43、on 5.00 Segments and Groups:7/23/8Symbols-1N a m eLengthAlignCombine ClassCODE . . . . . . . . . . . . . .Symbols:000APARANONEN a m eTypeValueAttr 0000START . . . . . . . .L NEARCODEFILENAME . . . . . . . . . TEXT sam9 Source Lines9 TotalLines4 Symbols49362 + 416174 Bytes symbol space free 0 Warning

44、 Errors0 Severe ErrorsMASM实例打印.lst文件和.map文件(续)SAM.MAP文件如下:LINK : warning L4021: no stack segmentStartStopLengthName Class00000H 00009H 0000AH CODEProgram entry point at 0000:0000MASM实例方法二在Windows下用VPC环境运行MASM,这与方法一调试汇编程序的步骤的主要区别在于:(1) 运行环境不同,需要VPC环境为使用MASM,VPCMASM LINK CREFEDIT文本编辑程序(2) 使用VPC运行MASM调

45、试汇编程序,此时系统运行在一个虚拟平台上,是用软件虚拟出来的硬 件环境,将可以不受限制地使用所有汇编语言的功能。MASM常见错误信息1、test.asm(54): error A2000: Block nesting error说明:此错误信息通常见于一个段定义起始和末尾不一致。修改:检查段定义,使前后保持一致。2、test.asm(5): error A2005: Symbol is multidefined: DATA说明:此错误信息提示DATA符号重复定义了。修改:将其中一个符号DATA重新设置。3、test.asm(7): error A2009: Symbol not defined

46、: B9H说明:此错误信息为test.asm中第7行指令出错,查看该指令,源操作数为十六进制数B9H。按规定以字母开始的十六进制数, 便汇编程序区分常数和符号。另一种出错的可能量没有定义。修改:以0B9H取代B9H;使用伪指令定义变量。前面加上数字0以使用的符号变是MASM常见错误信息(2)4、test.asm(11): error A2009: Symbol not defined: NO说明:test.asm中第11行指令JLE no-count,符号中使用了中折线,中折线在汇编中是作为减号,因此,汇编提示标号NO没有定义。注意,汇编语言规定符号中可以使用下划线。修改:将no-count改

47、为no_count。5、test.asm(28): error A2010: Syntax error第28行的指令语句的语法与任何可识别的语说明:此错误信息提示源法不匹配,出错。修改:按照汇编指令的规定格式重新编写。6、test.asm(2): error A2018: Operand must be register: DX说明:指定的寄存器不是指令或伪指令所要求的。如:ASSUME DX:DATA修改:查看汇编指令的规定格式。MASM常见错误信息(3)7、test.asm(16): error A2028: Operator expected说明:汇编程序需要的是操作符,得到的却是其它内

48、容。test.asm中第16行MOV DX OFFSET BUF2,显然是两操作数中间缺少“,”符号导致出错。修改:两操作数之间用“,”号分隔。8、test.asm(47): error A2029: Division by 0 or overflow说明:给出一个用零作除数的表达式或溢出。test.asm中第47行指令AND AL, 0010 0000数据溢出,这是因为,汇编程序默认数制为十进制,因而该指令中的源操作数超出范围。修改:若欲输入的是二进制数,在该数后加b,说明为二进制数。9、test.asm(8): error A2048: Must be index or base regi

49、ster说明:指令需要基址或变址寄存器,源给出的是其它寄存器。test.asm中第8行指令MOV AL, SI+DX,显然,DX寄存器应为BX寄存器。修改:按寻址方式规定修改。MASM常见错误信息(4)10、test.asm(6): error A2049: Illegal use of register说明:此错误信息为test.asm中第6行出错,查看该指令,是由于将两操作数之间的“,”号错为“.”号而出错。另外一种情况,如MOV AL, DL+20H,则是源操作数为格式。修改:按照汇编指令的规定格式重新编写。11、test.asm(48): error A2050: Value out

50、of range说明:test.asm中第48行指令AND AL, 0001 0000出错。因为汇编程序默认数制为十进制,因此,该指令源操作数为16位立即数,不能送入8位寄存器。修改:将8位寄存器AL改为16位寄存器,如AX。12、test.asm(10): error A2052: Improper operand type的操作数类型。如test.asm中第10行指令MOV RESULT, SI。汇说明:编语言规定两个操作数不能同时为器操作数。修改:先将源操作数传送到寄存器,再由寄存器传送到另一个单元。MASM常见错误信息(5)13、test.asm(3):error A2053:Jump out of range by 82 byte(s)说明:此错误信息为源程序test.asm中第3行的转移指令指定的转移超出范围。修改:可在该转移指令与目标指令中增加一条无条件转移指令。14、test.asm(21

温馨提示

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

评论

0/150

提交评论