汇编实验讲义.doc_第1页
汇编实验讲义.doc_第2页
汇编实验讲义.doc_第3页
汇编实验讲义.doc_第4页
汇编实验讲义.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

汇编实验讲义一、 实验目的学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。为后续课程打下坚实的基础。二、 实验要求1 上机前作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析。2 上机时要遵守实验室的规章制度,爱护实验设备。3 程序调试完后,须由实验辅导教师在机器上检查运行结果,经教师认可后方可离开实验室。4 实验完成后,应写出一个实验报告。实验报告的要求如下: (1) 上机过程设计说明;(2) debug用法;(3) 以一个程序为例写出调试说明:便于学生总结经验提高编程及调试能力。说明程序的功能、结构。它包括:程序名、功能、原理及算法说明等。调试情况,如上机时遇到的问题及解决办法,观察到的现象及其分析,实验的心得体会等。三、 实验方法1. 源程序的编辑要开发一个汇编语言程序,首先要通过编辑软件使用汇编语言指令编写源代码,得到的程序要以asm的扩展名存放在MASM目录。2. 源程序的汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。MASM6.X提供的汇编程序是ML.EXE。进入已建立的程序所在目录,键入如下命令及相应参数即可完成源程序的汇编:ML/c lt301a.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(lt301a.obj),否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,在进行汇编。注意,仅利用ML实现源程序的汇编,参数/c(小写字母c)是必须有的;否则ML将自动调用连接程序LINK.EXE进行连接。3. 目标文件的连接连接程序能把一个或多个目标文件和库文件合成一个可执行文件(.EXE,.COM文件)。在程序目录下有了lt301a.obj文件,键入如下命令可实现目标文件的连接:LINK lt301a.obj如果不带文件名,LINK连接程序将提示输入OBJ文件名,它还会提示生成的可执行文件名以及列表文件名,一般采用默认文件名就可以。如果没有严重错误,LINK 将生成一个可执行文件(lt301a.exe);否则将提示相应的错误信息,这时需要根据错误信息重新再汇编、链接,直到生成可执行文件。连接程序的一般格式:LINK /参数选项 obj文件列表exe文件名,map文件名,库文件;连接程序可以将多个模块文件连起来程序,形成一个可执行文件;多个模块文件用加号“+”分隔。给出EXE文件名就可以替代与第一个模块文件名相同的默认名。给出MAP文件名将创建连接映像文件。库文件连接程序需要的子程序库等。总括号内的文件名是可选的,如果没给出,则连接程序还将提示,通常用回车表示接受默认名。为避免频繁的键盘操作,可以用一个分号“;”表示采用默认名,连接程序就不再提示键入内容。领用“/?”参数可以显示林肯的所有参数选项。事实上,ML汇编程序可以自动调用LINK连接程序(ML表示MASM和LINK),实现汇编和连接的依次进行。这只要在命令行中,输入不带/C参数的ML命令即可,例如:ML lt301a.asm上面介绍了通常采用的ML命令行格式。实际上,汇编程序ML.EXE可以带上其他参数。用“/?”或“/help”选项就可以看到它的所有参数。ML.EXE的命令行格式如下:ML /参数选项文件列表/LINK连接参数选项ML允许汇编和连接多个程序形成一个可执行文件。它的常用参数选项如下(注意参数是大小写敏感的):/AT:允许tiny存储模式(创建一个COM文件)/c:只汇编源程序,不进行自动连接(这里是消协的字母c)/Fl文件名:创建一个汇编列表文件(扩展名LST)/Fr文件名:创建一个可在PWB下浏览的。SBR源浏览文件/Fo文件名:根据指定的文件名生成模块文件,而不是采用默认名/Fe文件名:根据指定的文件名生成可执行文件,而不是采用默认名/Fm文件名:创建一个连接映像文件(扩展名MAP)/I路径名:设置需要包含进(INCLUDE)源程序的文件的所在路径/Sg:在生成的列表文件中,列出由汇编程序产生的指令/Sn:在创建列表文件时,加入调试程序CODEVIEW需要的信息/Zs:只进行句法检查,不产生任何代码/LINK:传递给连接程序LINK的参数列表文件是一种文本文件,含有源程序和目标代码,对学习汇编语言程序设计和发现错误很有用。创建列表文件,可以键入如下命令:ML/Fl /Sg lt301a.asm该命令除产生模块文件lt301a.obj和可执行文件lt301a.exe外,还将生成列表文件lt301a.lst。采用/Sg选项,如果源程序具有.startup,.exit伪指令以及流程控制伪指令.if,.while等,将在列表文件中得到相应的硬指令;否则列表文件只给出上述伪指令。Lt301a.lst如下所示:Microsoft (R) Macro Assembler Version 6.15.8803 11/09/09 09:41:32lt301a.asm Page 1 - 1 .model small;定义程序的存储模式.stack ;定义堆栈段 0000.data;定义数据段 0000 48 65 6C 6C 6F 2Cstring db Hello, Everybody !,0dh,0ah,$ 20 45 76 65 72 79 62 6F 64 79 20 21 0D 0A 24;在数据段定义要显示的字符串 0000.code cseg;定义代码段.startup;程序起始点,建立DS、SS 0000 *Startup: 0000 BA - R * mov dx, DGROUP 0003 8E DA * mov ds, dx 0005 8C D3 * mov bx, ss 0007 2B DA * sub bx, dx 0009 D1 E3 * shl bx, 001h 000B D1 E3 * shl bx, 001h 000D D1 E3 * shl bx, 001h 000F D1 E3 * shl bx, 001h 0011 FA * cli 0012 8E D2 * mov ss, dx 0014 03 E3 * add sp, bx 0016 FB * sti 0017 BA 0000 Rmov dx,offset string;指定字符串 001A B4 09mov ah,9 001C CD 21int 21h;利用功能调用显示信息 .exit 0 ;程序结束点,返回DOS 001E B8 4C00 * mov ax, 04C00h 0021 CD 21 * int 021h end ;汇编结束Microsoft (R) Macro Assembler Version 6.15.8803 11/09/09 09:41:32lt301a.asm Symbols 2 - 1Segments and Groups: N a m e Size Length Align Combine ClassDGROUP . . . . . . . . . . . . .GROUP_DATA . . . . . . . . . . . . .16 Bit 0013 Word Public DATASTACK . . . . . . . . . . . 16 Bit 0400 Para Stack STACK_TEXT . . . . . . . . . . . . .16 Bit 0000 Word Public CODEcseg . . . . . . . . . . . . . .16 Bit 0023 Word Public CODESymbols: N a m e Type Value AttrCodeSize . . . . . . . . . . .Number 0000h DataSize . . . . . . . . . . .Number 0000h Interface . . . . . . . . . . .Number 0000h Model . . . . . . . . . . . . .Number 0002h Startup . . . . . . . . . . . .L Near 0000 csegcode . . . . . . . . . . . . .Text csegdata . . . . . . . . . . . . .Text DGROUPfardata? . . . . . . . . . . .Text FAR_BSSfardata . . . . . . . . . . . .Text FAR_DATAstack . . . . . . . . . . . . .Text DGROUPstring . . . . . . . . . . . . .Byte 0000 _DATA 0 Warnings 0 Errors列表文件有两部分内容。在第一部分源程序中,最左列是数据或指令在该段从0开始的相对偏移地址,向右依次是指令的机器代码和汇编语言语句。机器代码后有字母“R”表示该指令的立即数/位移量现在不能确定或只是相对地址,它将在程序连接或进入主存时才能定位。带有符号“*”的处理器指令是由前面一条伪指令产生的,才用/Sg选项的列表文件罗列;否则,将只有伪指令本身。如果程序中有错误(Error)或(Warning),也会在相应位置提示。列表文件的第二部分是标识符使用情况。对段名和组名给出它们的名字(Name)、尺寸(Size)、长度(Length)、定位(Align)、组合(Combine)和类别(Class)属性;对符号给出它们的名字(Name)、类型(Type)、数值(Value)和属性(Attr)。采用简化段定义格式,有许多汇编系统的预定义标识符,例如data。映像文件也是一种文本文件,含有每个段在存储器中的分配情况。创建映像文件,可以输入如下命令:ML /Fm lt301a.asm该命令除产生lt301a.obj和lt301a.exe文件外,还将生成映像文件lt301a.map,如下所示:Start Stop Length Name Class 00000H 00000H 00000H _TEXT CODE 00000H 00022H 00023H CSEG CODE 00024H 00038H 00015H _DATA DATA 00040H 0043FH 00400H STACK STACKOrigin Group 0002:0 DGROUP Address Publics by Name Address Publics by ValueProgram entry point at 0000:0000映像文件中首先给出了该程序各个逻辑段的起点(Start)、终点(Stop)、长度(Length)、段名(Name)和类别(Class);然后是段组(Group)位置和组名;最后提示程序开始执行的逻辑地址。注意,这里的起点、终点和段地址是以该程序文件开头而言的相对地址,而实际的绝对地址需要在程序进入主存后确定。四、 程序的执行与调试 任一个编程成人员都知道,调试程序是编制程序的关键一步。我们可以通过调试程序来察看程序的运行结果,也可以通过调试程序来纠正程序中的错误。(一) 程序的执行 现在,可执行文件lt301aexe已经产生,可在DOS下直接运行,如:D:masm615lt301aexeHello, Everybody !D:masm615(二) 程序的调试无论是汇编程序还是连接程序只能指出语法错误,对于程序在功能上是否有错,需要进行调试。如果程序的执行结果存放在存储单元中,并没有显示出来。那么如何才能看到该程序的运行结果呢?通过调试程序可以实现。debug调试程序是为汇编语言设计的一种调试工具。它涉及到机器的内部,可以对寄存器和存储单元的内容进行察看和修改。在使用debug调试程序时,有以下几点声明:在debug中,命令参数中的数据和屏幕显示的数据均是以十六进制数表示的。所有debug命令只有一个字母,后面可有一个或多个参数。参数之间用空格或逗号隔开,且命令是以回车符作结束符。1程序的装入程序的装入有两种方式:一种是在调用debug时装入;另一种是在进入debug后再装入。(1)在调用debug时装入 这种方式只需键入: D:masm615debug lt301aexe debug以短划线-作为响应。我们可以在其后输入任何debug提供的命令和参数。 (2)进入debug以后装入 本方式可以在进入debug后,通过它的命名命令n和装载命令l来装入可执行文件,操作如下: D:masm615debug 一n lt301aexe 一l 2退出命令 如果已进入debug中,现需要退出debug状态,返回操作系统可使用退出命令q即可实现。操作如下: -q c 3运行命令 程序的运行命令有两个:连续运行命令g和跟踪运行命令t。 (1)运行命令g 格式:-g地址1地址2说明:地址1指定了运行的起始地址。如没有指定,则从当前的cs:ip始运行。后面的地址是断点地址。当指令执行到断点时,就停止运行,并显示出当前所有寄存器和标志位的内容,最后还要显示出下一条要执行的指令。我们可以通过反汇编命令u来确定所要设的断点地址。(2)跟踪命令t 格式:1) - t地址 2) - t=地址1n说明:格式1)是逐条跟踪,从指定地址起执行一条指令后停下来,显示所有寄存器内容和标志位的值。如果没有指定地址,则从当前的cs:ip开始执行。格式2)是多条跟踪,从指定地址起执行n条指令后停下。4检查和修改寄存器内容的命令r(1)显示CPU内部所有寄存器的内容和标志位状态;格式:-rr命令显示中标志位状态的含义如下表:标 志 名标志为1标志为0OF 溢出(是否)OVNV DF 方向(减量增量)DNUPIF 中断(允许关闭)EIDISF 符号(负正)NGPLZF 零(是否)ZRNZAF 辅助进位(是否)ACNAPF 奇偶(偶奇)PEPO CF 进位(是否)CYNC首先察看一下寄存器的内容,以便得知数据段的段基址。(2)显示和修改某个指定寄存器内容,格式为:-r 寄存器名-r axAX 0000:表示AX当前内容为0000,此时若不对其作修改,可按ENTER键,否则打入修改后内容,如: -r axAX 0000:1234-r axAX 1234:查看,修改后AX内容为12345. 需察看存储单元的内容,可使用显示存储单元内容的命令d格式:-d地址或 -d范围(给出方法同下面u命令)6修改命令e我们可以通过修改命令e来改变存储单元x的内容,然后重新执行,观察一下运行的结果。 -e ds:0000 我们可在屏幕上看到22bdh:0000h 00h此为存储单元ds:0000单元的原有内容。我们可在光标处输入新值,然后按回车键即可完成修改。7建立命令a我们可以通过建立命令a来输入汇编命令,然后执行,观察一下运行的结果。格式:-a地址该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。8.反汇编命令u,有两种格式:(1)-u地址该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个u命令的最后一条指令的下一单元开始显示32个字节。(2)-u范围 该命令对指定范围的内存单元进行反汇编,例如:-u 1368:100 1081368:0100 0000 ADD BX+SI,AL1368:0102 0000 ADD BX+SI,AL1368:0104 0000 ADD BX+SI,AL1368:0106 0000 ADD BX+SI,AL1368:0108 0000 ADD BX+SI,AL-u 1368:100 L91368:0100 0000 ADD BX+SI,AL1368:0102 0000 ADD BX+SI,AL1368:0104 0000 ADD BX+SI,AL1368:0106 0000 ADD BX+SI,AL1368:0108 0000 ADD BX+SI,AL可见此二命令是等效的。实验一1. 编写一个简单程序体会汇编语言程序设计上机的全过程(例3.1a书73页)2. 练习使用debug的各种命令例:执行下列指令序列 mov al,81h add al,al adc al,al后,AL=_。-a1371:0100 mov al,81h Error1371:0100 mov al,811371:0102 add al,al1371:0104 adc al,al1371:0106-tAX=0081 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1371 ES=1371 SS=1371 CS=1371 IP=0102 NV UP EI PL NZ NA PO NC1371:0102 00C0 ADD AL,AL-tAX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1371 ES=1371 SS=1371 CS=1371 IP=0104 OV UP EI PL NZ NA PO CY1371:0104 10C0 ADC AL,AL-tAX=0005 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1371 ES=1371 SS=1371 CS=1371 IP=0106 NV UP EI PL NZ NA PE NC1371:0106 0000 ADD BX+SI,AL DS:0000=CD1.执行如下指令“mov sp,4320h”和“push bx”之后,SP寄存器的值是 2.设AX=0012H、BX=0034H,那么下述程序段mov cl,8rol ax,clor ax,bx执行后,AX= 3. 执行下列指令序列mov al,81hadd al,aladc al,al后,AL=

温馨提示

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

评论

0/150

提交评论