汇编上机说明书_第1页
汇编上机说明书_第2页
汇编上机说明书_第3页
汇编上机说明书_第4页
汇编上机说明书_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编软件MASI和调试工具软件DEBU(使用汇编语言是唯一能够充分利用计算机硬件特性并直接控制硬件设备的语言。对于诸如 实时控制、软件加密解密、病毒分析、软件调试等领域,汇编语言是最有效的程序设计语 言。在学习汇编语言的过程中,只有通过大量的上机实验才能更好地掌握汇编语言程序设 计的技能。1.1 实验目的(1) 掌握汇编软件 MASM勺使用,熟悉汇编语言的上机过程。(2) 掌握调试工具软件 DEBU啲应用,掌握汇编语言程序的调试技能。1.2 相关基础知识1.2.1汇编语言程序上机步骤1. 汇编语言程序设计上机步骤汇编语言源程序的上机步骤包括编辑、汇编、调试等几个过程,如图1-1所示。图1.1汇

2、编语言源程序上机步骤源程序文件的编辑就是编写一个汇编语言源程序,它可以使用任何一个文件编辑器实 现。例如,Windows 2000操作系统附件中的记事本。编辑形成的文件最后一定要以.ASM后缀保存。在编辑源程序的时候一定要将输入法切换到英文环境下,否则会出错。2. 汇编汇编是把用汇编语言编写的源代码程序翻译成计算机能够识别的二进制机器语言程 序。目前常用的汇编程序是MAS M称为宏汇编程序。宏汇编程序当前主要有两个版本:MASM5.0和MASM6.0其中,MASM5.0的可执行文件是 MASM.EXE MASM5.C用于DOS环境下。 初学者首先学习使用 MASM5.0而MASM6.0勺可执行

3、文件是 ML.EX吕汇编过程是将源程序翻译为等价的二进制机器语言的过程。所产生的文件称为目标程 序,其后缀为.OBJ。在这个阶段中,将对源程序的语法进行检验,如果发现错误将给予提 示。错误提示分为严重错误和警告错误两种。严重错误指示某些指令存在语法错误,不能 形成对应的二进制机器指令。而警告错误指示某些指令含义不够明确,需要提醒程序员注 意。程序员可以根据提示对源程序进行修改,直到得到正确的结果为止。在汇编过程中还会产生列表文件和交叉引用文件。列表文件的后缀为 .LST ,主要用于 给出源程序和机器代码程序的清单,以供检查程序使用。交叉引用文件的后缀为.CRF,它是一个为源程序所引用的各种符号

4、进行前后对照的文件,主要用于给出不同程序段中互相 引用的全部符号列表。这两个文件是可有可无的,如果不需要生成这两个文件,可以在汇 编过程中加以控制。3在汇编过程中形成了目标文件(.OBJ),但是在该文件中,只是将源程序的操作码部 分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再 定位。只有经过过程才能形成最后的可执行文件。程序的功能就是把一个或多个目标文件 合并成一个可执行文件,其后缀为.EXE。其实在过程中一共形成两个文件:第一个是可执行文件(.EXE)。默认的可执行文件名字与源程序文件相同,也可以根据用户要求进行修改可执行文件的名字; 过程中形成的第二个文件是

5、存映像文件(.MAP),它给出了每个段的地址分配情况和长度。如果不需要该文件则可以在命令执行时直接输入Enter 键。在过程中还与一个库文件( .LIB 文件)相关。一般的汇编程序不需要库文件。但是当汇编语言与高 级语言(如C语言)接口时需要用到库文件。此时输入相应的库文件名字即可。4 运行通过汇编和,最终形成的可执行文件已经排出了程序中的语法错误,可以直接执行。 但是可能还存在一些算法错误,这样的错误则要通过调试过程来修正。常用的调试工具软 件有 DEBUG?。5 汇编语言上机举例例编写一个名字为 ABCD.ASM的源程序,该程序的功能是在计算机屏幕上显示一个 字符串“ HELLO!”。1)

6、编辑源程序利用 Windows 2000 操作系统附件中的“记事本”编辑如下源程序。DATASEGMENTS1 DB HELLO!,$DATAENDSSTACK SEGMENT PARA STACKDB 64 DUP(?)STACK ENDSCODESEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAH,09HMOVDX,OFFSET S1INT21HRETMAIN ENDPCODEENDSEND STA

7、RT2) 汇编在MASM5.0中的汇编程序是 MASM.EXE其命令格式为:C:MASM ABCD.ASM执行上述操作命令之后将在屏幕上显示如下信息:Microsoft(R) Macro Assembler Version 5.00Copyright(C) Microsoft Corp 1981-1985,1987.AII rights reservedObject filenameABCD.OBJSource listingNUL.LST:Cross referenceNUL.CRF:50678 + 410090 Bytes symbol space free0 warning Errors

8、0 Severe Errors在汇编过程中产生了三个文件,其默认的文件名显示在屏幕上,如果不需要做任何改 变就直接按Enter键。通过屏幕上的显示,可以了解到在本次汇编过程中没有发生错误和警告,因此可以继 续进行操作。3)在MASM5.0中的汇编程序是 LINK.EXE。其命令格式为:C:LINK ABCD执行上述命令后将在屏幕上显示如下信息:Microsoft(R) Overlay Linker Version 3.6Copyright(C) Mirosoft Corp 1983-1987.AII rights reservedRun FileABCD.EXEList FileNUL.MAP

9、:Libraries.LIB:在过程中产生了两个文件,其默认的文件名显示在屏幕上,如果不需要做任何改变就直接按Enter键。对于库文件一栏,如果不需要使用库文件,可以直接按Enter键;如果 需要使用库文件,则要求输入所使用的库文件名字。4)运行其命令格式为:C:ABCD在屏幕上就可以看到“ HELLO”的字样了。122调试工具软件DEBUG如果汇编语言的源程序中存在一些语法或格式上的错误,在汇编和过程中都可以被发现并得到纠正。但是如果在源程序中存在着算法错误和逻辑错误,那就只有在调试过程中才能发现并纠正了。 常用的调试工具软件是 DEBUG DEBU(提供了修改寄存器和存单元容的 命令,可以

10、很方便地修改寄存器、存单元的容,为调试程序、修改程序带来了方便。在DEBUG 状态下,还提供了调试、控制测试的环境。用户可以在此环境下进行编辑、调试和执行等 一些简单的汇编程序。DEBUG!显示命令,通过显示命令,可以观察某个存单元的容、CPU部某个寄存器的容,并可以根据这些容的变化情况分析、调试程序。1. DEBUG勺启动假设在Windows2000的环境下,通过选择“程序”宀“附件” 宀“命令提示符”进入 DOS 状态。然后输入:Debug drive:pathfile name parameters即可进入 DEBUG环境。其中,drive:path filename:指定要测试的可执行

11、文件的位置和名称。parameters :指定所需要的命令。如果已经进入存放 DEBUG文件的目录下,则可以使用简化的命令进入DEBUG简化命令的格式为:Debug 。进入DEBUGS,显示DEBUG勺提示符号,该提示符号为连字符(-)。2. DEBUG勺主要命令这里只介绍常用到的几个主要DEBU(命令,全部的DEBUG命令请参考相关文献。1) A (汇编命令)该命令的功能是从汇编语言程序语句创建可执行的机器码。所有数值都是十六进制格式,必须按14个字符输入这些数值。命令格式:A address参数address是指定输入汇编语言指令的位置。对 address 使用十六进制值,但是输入十六进制

12、地址时不能以h字符结尾。如果不指定地址,执行 A命令后将在它上次停止处的地址开始汇编。A命令使用举例如下。-A 0100:05000100:0500 MOV AL,050100:0502 JMP NEAR 5050100:0505 JMP FAR 50A2) C (比较命令)该命令的功能是比较存的两个区域存放的容。 命令格式为: C range address 参数 range 指定要比较的存第一个区域的起始和结束地址,或起始地址和长度。 参数 address 指定要比较的第二个存区域的起始地址。C 命令使用举例如下。-C 100,10F300该命令对100h10Fh的存数据块与300h30F

13、h的存数据块进行比较。Debug 响应前面的命令并显示如下信息(假定此时 DS = 197F):197F:01004DE4197F:0300197F:01016799197F:0301197F:0102A327197F:0302197F:010335F3197F:0303197F:010497BD197F:0304197F:01050435197F:0305197F:01077671197F:0307197F:0108E611197F:0308197F:0109192C197F:0309197F:010A800A197F:030A197F:010B367F197F:030B197F:010CB

14、E22197F:030C197F:010D8393197F:030D197F:010E4977197F:030E197F:010F4F8A197F:030F注意:列表中缺少地址 197F:0106 和 197F:0306 ,这表明地址中的数据值是相同的。3)D (显示存命令)该命令的功能是显示一定围存地址的容。 命令格式: D range 参数 range 指定要显示其容的存区域的起始和结束地址,或起始地址和长度。如不指 定range,将从以前D命令中所指定地址围末尾开始显示128字节的容。D 命令举例如下。-D CS:100 10FDebug按以下格式显示围中的容:04BA:0100 54

15、4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER.当使用D命令时,Debug以两个部分显示存容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示 ) 。每个非打 印字符在显示的 ASCII 部分由英文句号 (.) 表示。每个显示行显示 16 字节的容,其 中在第 8 和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。4)G (运行命令) 该命令功能是运行当前在存中的程序。命令格式: G =address breakpoints 参数 address

16、指定当前在存中要开始执行的程序地址。如果不指定address 参数,将从 CS:IP 寄存器中的当前地址开始执行程序。参数breakpoints 为G命令设置的临时断点。如果命令中有指定断点参数, 则程序在遇到的第一个断点处停止, 当程序到达断点时, Debug 将显示所有寄存器的容、所有标记的状态以及最后执行指令的解码形式。5)Q (退出命令)该命令功能是该停止 Debug 会话,返回到命令提示符。 命令格式: Q 参数:无。6)R (寄存器显示命令) 该命令功能是显示或改变一个或多个 CPU 寄存器的容。R register-name参数:无。如果在没有参数的情况下使用,则 R 命令显示所

17、有寄存器的容以及寄存器存储区 域中的标志。参数: register-name指定要显示其容的寄存器名。举例如下。要查看所有寄存器的容、 所有标记的状态和当前位置的指令解码表, 请输入以下 命 令:R如果当前位置是04BA:011A,显示结果将类似如下:AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC 04BA:011A CD21 INT 21如果只想查看标志的状态,请输入以下命令:RFDebu

18、g按以下格式显示信息:NV UP DI NG NZ AC PE NC - _7)T (跟踪命令) 该命令功能是执行一条指令,并显示所有寄存器的容、所有标志的状态和所执行指令 的源代码形式。 命令格式: T =address number 参数 =address 指定 Debug 启动跟踪指令的地址。 如果省略 address 参数, 跟踪将从当 前 CS:IP 寄存器所指定的地址开始。参数 number 指定要跟踪的指令数。该值必须是十六进制数,默认值为1。举例如下。要执行一个指令( CS:IP 指向的指令),然后显示寄存器的容、标志的状态以及指 令的解码形式,请输入以下命令:T如果程序中的指

19、令位于04BA:011A, Debug 可能显示下列信息:AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000 DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC 04BA:011A CD21 INT 218)U (反汇编命令) 该命令功能是反汇编字节并显示相应的原语句,其中包括地址和字节值。反汇编代码 像已汇编文件的列表。命令格式: U range 参数无。如果在没有参数的情况下使用,则 U 命令将反汇编 20H 字节的容(默认值),从前面 U

20、 命令所显示地址后的第一个地址开始。参数 range 指定要反汇编代码的起始地址和结束地址,或起始地址和长度。 举例如下。要反汇编16 (10h)字节,从地址 04BA:0100 开始,请输入以下命令:U04ba:010010Debug 按以下格式显示结果:04BA:0100206472ANDSI+72,AH04BA:010369DB6904BA:01047665 JBE 016B04BA:0106207370ANDBP+DI+70,DH04BA:010965DB6504BA:010A63DB6304BA:010B69DB6904BA:010C66DB6604BA:010D69DB6904BA

21、:010E63DB6304BA:010F61DB611.3 汇编语言上机实验实验1.1 设数据段字节变量 SO中存放一个非压缩型 BCD码,将其转为ASCII码,并 显示在屏幕上。1. 分析所谓非压缩BCD码就是每字节只存放一个 BCD码,该字节的低 4位为BCD码,而高4 位为0000。 BCD码不能直接用于屏幕显示和打印,必须将其转换为ASCII码。非压缩BCD码转换为ASCII码的算法很简单,就是在非压缩 BCD码上加上30H。2. 实验步骤(1) 调用文本编辑软件建立源程序.ASM文件。利用Windows 2000操作系统附件中的 “记事本”编辑以下源程序。 命名为Test1.ASM。

22、DATASEGMENTS0 DB 1;待显示的BCD码DATAENDSSTACK SEGMENT PARA STACKDB 64 DUP (?)STACK ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AL,S0ADD AL,30HMOV DL,ALMOV AH,02HINT 21HRETMAINCODEENDENDPENDSSTART(2) 调用汇编程序 MASM寸源程序汇编

23、产生.OBJ文件。在C: 提示符下输入MASM Test1.ASM执行上述操作命令之后将在屏幕上显示如下信息:Microsoft(R) Macro Assembler Version 5.00Copyright(C) Microsoft Corp 1981-1985,1987.AII rights reservedObject filenameTest1.0BJ:Source listingNUL.LST:Cross referenceNUL.CRF:50678 + 410090 Bytes symbol space free0 warning Errors0 Severe Errors(3)

24、 调用程序LINK对目标文件进行产生可执行文件。在C: 提示符下输入LINK Test1执行上述命令后将在屏幕上显示如下信息:Microsoft(R) Overlay Linker Version 3.6Copyright(C) Microsoft Corp 1983-1987.All rights reservedRun FileTest1.EXEList FileNUL.MAP:Libraries.LIB:(4) 运行可执行文件。在C: 提示符下输入Test1,在屏幕上将显示出1。(5) 改变S0的容(数字围要限制在 09之间),重新做这个实验。实验1.2设数据段变量 S1中存放一个小写英

25、文字符A,要求将其转为大写英文字符,并显示在屏幕上。试编写一段程序并运行该程序从而完成上述要求。提示:小写英文字符的ASCII码和大写英文字符的ASCII码之间存在一个差值。1.4 应用DEBUGS件调试程序实验实验1.3 常用的DEBUGS令使用练习。实验步骤1) 进入 DEBUGS境在Windows 2000环境下,按顺序选择“开始”宀“程序”宀“附件”宀“命令提示符” 后进入DOS环境,输入DEBU后即可进入DEBU,此时屏幕上显示“ _”提示符号。2) A (编辑命令)使用练习用DEBUG勺A命令输入程序。A1000357:0100MOV AL,340357:0102MOV DL,36

26、0357:0104ADD DL,AL0357:0106SUB DL,320357:0109MOV AH,20357:010BINT 210357:010DINT 200357:010F输入A命令时,自动产生程序所存存单元的段地址和偏移地址。程序输入结束时,只 需输入Enter键就可以退出汇编状态( A状态),回到DEBUGS态。注意:使用 A命令时,只要注意起始地址的偏移地址从0100开始即可。至于前面的段地址是随机变化的(取决于当前存使用情况),对此不必介意。3)C (比较命令)使用练习首先利用A命令输入以下容。A1000357:0100MOV AL,340357:0102MOV DL,36

27、0357:0104ADD DL,AL0357:0106SUB DL,320357:0109MOV AL,340357:010BMOV DL,360357:010DADD DL,AL0357:010FSUB DL,300357:0112然后利用C命令对01000108与01090112两个区域存存放的容进行比较。-C 100,108109该命令执行后将显示两块存储区域存放容不一致的那些单元。4)D (显示存命令)使用练习 首先利用A命令输入以下容。A1000357:0100DW 01000357:0102DW 03020357:0104DW 05040357:0106DW 07060357:01

28、08DW 09080357:010ADW 0B0A0357:010CDW 0D0C0357:010EDW 0F0E0357:0110之后利用D命令查看该区域容。_D1005)R (寄存器显示命令)使用练习 首先利用A命令输入以下容。_A1000357: 0100MOV AL,340357: 0102MOV AH,3603570104MOV BL,AL03570106MOV BH,3203570108MOV CL,550357010AMOV CH,AA0357010CMOV DL,AL0357010EMOV DH,3003570110利用运行命令G运行,G=100, 110使用R命令看各寄存器结

29、果(与 R命令相结合做练习)。利用R命令分别查看 AX BX CX DX AL、AH BL、BH CL、CH DL和DH容。 利用R命令将AX BX、CX和 DX的容都改为55AA。6)G (运行命令)使用练习 首先利用A命令输入以下容。A10003570100MOV AL,3403570102MOV AH,3603570104MOV BL,AL03570106MOV BH,3203570108MOV CL,550357010AMOV CH,AA0357010CMOV DL,AL0357010EMOV DH,3003570110然后执行运行命令:G=100, 10E。之后使用R命令查看有关寄存器容。7)T (跟踪命令)使用练习 首先利用A命令输入以下容。A10003570100MOV AL,3403570102MOV AH,3603570104MOV BL,AL03570106MOV BH,3203570108MOV CL,550357010AMOV CH,AA0357010CMOV DL,AL0357010EMOV DH,3003570110然后执行T=100,1命令。观察程序运行情况和指令执行后寄存器的变化情况。再执行T=100, 2观察程序运行结果。8)U (反汇编命令)使用练习首先利用A命令输入以下容。_A1000357:01000357:010

温馨提示

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

评论

0/150

提交评论