您好,欢迎访问三七文档
汇编语言程序开发过程2007.05.31基本开发流程(1)用文本编辑器建立扩展名为.asm的汇编语言源程序;(2)用汇编器对源程序进行汇编,生成目标文件(.obj);(3)用连接器将一个或多个目标文件以及库文件(.lib)连接成一个可执行文件(.exe);(4)可执行文件的执行和调试。汇编语言源程序的编辑源文件是文本文件,可以使用任何文本编辑器;如:DOS的EDIT,Windows的记事本,MASMforEditPlus集成开发环境中的编辑器,以及一些高级语言开发环境中的编辑器;注意:不能使用Word和写字板;源文件应以.asm作为扩展名,文件名与路径名中不得出现空格,在汇编之前必须保存源文件的汇编利用汇编对源文件(.asm)进行汇编,生成目标文件(.obj);这个过程中可能会出现错误或警告信息,此时需要修改源文件,再汇编;MASM6.0之前的汇编器是masm.exe,在DOS下通过命令行的方式进行:masmXXX.asm这里源文件扩展名.asm可以省略;源文件的汇编(续)MASM6.1X的汇编器是ml.exe,我们用的是6.15版本,基本命令格式为:ml/cXXX.asm与masm.exe不同,源文件扩展名.asm不能省略;一般命令格式:ML[/选项]源文件列表[/link连接选项]MASMforEditPlus编译环境的设置。源文件的汇编(续)“/选项”是可选的一个或多个参数,每个参数均以“/”开头,参数之间以空格分隔;源文件列表中的多个文件以空格分隔,且要求给出完整的文件名,.asm不能省略;ML后的参数是大小写敏感的。常用选项如下:/AT生成.com文件/c只汇编,不连接/Fe可执行文件名指定生成的可执行文件名源文件的汇编(续)/Fl[列表文件名]产生列表文件(.lst),缺省时与源文件同名;/Fm[映像文件名]产生映像文件(.map),缺省时与源文件同名;/Fo目标文件名指定生成的目标文件名;/Zi增加调试所需的符号信息;一般应选择默认值/c/Zi。注意,对于后面跟可选参数的选项,中间不能有空格分隔,如/Fl,/Fm后的文件名(若有的话),否则ML会将这些文件当作源文件处理。使用/Zi选项,会增加.exe文件的长度。源文件的汇编(续)列表文件(.lst)是一个文本文件,同时列出源文件和目标文件。它包含两部分的内容。第一部分中,从左到右依次列出数据或指令在段内的偏移地址、机器代码和源程序。若程序有错误,则列出错误信息。其中,机器代码中的字母“R”表示该指令的操作数需要重定位第二部分列出了程序中所有标识符的信息。比如,段的名称、大小与长度,变量与标号的名字、类型及偏移地址等。目标文件的连接目标文件的连接是利用连接器将一个或多个目标文件进行连接装配,生成可执行文件。当多个obj文件连成一个EXE文件时,既要链接也要装配;单个目标文件的连接时,只需装配,一般不会发生连接错误。装配就是将浮动地址转变成绝对地址;链接就是若干个obj连接起来。我们使用的连接器是LINK5.exe可执行文件的执行实验1:用EditPlus建立一个Helloworld程序(选择模板ASM-DOS),汇编、链接并执行该程序,查看结果。说明:如果没有显示结果,可以选择“工具”、“配置用户工具”、“运行”,选中“捕捉输出”选项。实验2:汇编、链接、运行例3.1,查看结果。可执行文件的调试若可执行文件的运行不能产生正确结果,需要修改源程序。若程序较大,则需要借助于调试器,通过动态跟踪和调试。Debug是DOS自带的简单调试器,命令格式:DEBUGXXX.exeMASMforEditPlus中用的调试器是CodeWiew(CV.exe),它是一个多窗口的调试工具,支持16位和32位指令。可执行文件的调试:CodeViewCodeView的菜单Run菜单(P264)Restart:使程序重新开始执行。Go:从当前指令开始执行,直至断点或程序结束。Step:单步执行。Trace:跟踪执行。GotoCursor:从当前指令执行到光标所在位置。可执行文件的调试:CodeView(续)CodeView的窗口:“Source”窗口用来显示源程序和对应机器码。按F3键可以实现几种模式的切换;“Memory”窗口用来显示或修改内存单元的值。按Shift-F3可以在不同数据显示模式之间切换;“Register”窗口用来显示或修改寄存器及8个标志位的值。8个标志位的值以符号方式显示,如下表标志位OFDFIFSFZFAFPFCF取值0/1NV/OVUP/DNDI/EIPL/NGNZ/ZRNA/ACPO/PENC/CY可执行文件的调试:CodeView(续)“Output”窗口。在Windows菜单下选择“ViewOutput”,或按F4键,可以暂时回到DOS的显示屏幕,以便观察当前程序的输出结果,按任意键返回CodeView。“Command”窗口可以输入调试命令。CodeView中,大多数命令可以通过菜单或快捷键实现。实验3:用CodeView的Output窗口查看Helloworld程序的运行结果。可执行文件的调试:CodeView(续)CodeView常用的调试命令:内存显示命令MD(MemoryDump)。有两种基本格式:MD[地址]MD[地址范围],地址范围有两种形式:•开始地址结束地址•开始地址L长度如:MDCS:100显示从CS:100开始的内存值MD100显示从DS:100开始的内存单元的值MD2000:1002000:110显示2000:100MD2000:100L11到2000:110的值实验4:用MD命令查看例3.1的数据段中定义的变量X、Y、Z的初值。用MD命令查看helloworld程序中定义的变量szMsg的值。可执行文件的调试:CodeView(续)内存修改命令ME(MemoryEnter)。有两种基本格式:ME地址ME地址字节表第一种以交互的方式逐个修改内存单元,有如下操作:(1)输入一个新值;(2)键入空格,跳到下一地址单元;(3)键入“\”,返回上一地址单元;(4)回车,结束ME命令。第二种形式将字节表的值依次写入从指定地址开始的内存单元。其中,字节表是用空格分隔的若干字节或字符串。如:ME1001‘123’a,它将内存单元DS:100~DS:104的值设置为01H、31H、32H、33H、0AH可执行文件的调试:CodeView(续)内存填充命令MF(MemoryFill)。基本格式:MF地址范围字节表将字节表的值依次写入地址范围所指定的内存区域。若字节表中的字节数超过地址范围的字节数,则忽略多余的字节;若比它少,则重复这些数据。如:MF2000:02000:70//将2000:0~2000:7的8个字节均置为0MF100107123//将DS:100~DS:107的8个字节依次置为1、2、3、1、2、3、1、2可执行文件的调试:CodeView(续)内存搜索命令MS(MemorySearch)。基本格式:MS地址范围字节表用来在指定内存块内搜索特定的字符串。若否则找到所需的字符串,则显示其每次出现的地址;否则,不显示任何信息。如:MS2000:02000:100‘demo’//在内存地址2000:0~2000:100内搜索字符串‘demo’;MS100L101‘demo’//在内存地址DS:100~DS:200内搜索字符串‘demo’。可执行文件的调试:CodeView(续)内存传送命令MM(MemoryMove)。基本格式:MM地址范围地址用来将一个内存块的数据(或代码)复制到另一个内存块。其中地址范围指出要复制的内存块,地址为目的内存块的首地址。如:MC2000:02000:10080//复制内存块2000:0~2000:100的值到DS:80~DS:180MF2000:0L203000:0//复制内存块2000:0~2000:1F的值到3000:0~3000:1F实验5:用ME和MF指令修改helloworld程序中变量的szMsg的值。可执行文件的调试:CodeView(续)内存比较命令MC(MemoryCompare)。基本格式:MC地址范围地址比较两个内存块的值,若两块相等,则不输出任何信息,否则显示不同的值及其所在的地址。其中地址范围指出第一个内存块,地址为第二个内存块的首地址。如:MC2000:02000:10080//比较内存块2000:0~2000:100与DS:80~DS:180MF2000:0L203000:0//比较内存块2000:0~2000:1F与3000:0~3000:1F可执行文件的调试:CodeView(续)寄存器命令R(Register)。有3种基本格式:R用来显示所有寄存器和8个标志位的的值,并反汇编CS:IP所指的当前指令;R寄存器名用来显示指定寄存器的值,并等待键入新的值,按回车结束R命令R寄存器名=值用来设置指定寄存器的值。上面两种若修改的是标志位则寄存器名为FL或EFL,键入的值为标志位的符号表示。可执行文件的调试:CodeView(续)跟踪命令T(Trace)。基本格式:T[指令条数]继续命令P(Proceed)。基本格式:P[指令条数]它们都是从CS:IP开始,执行指定条数的指令。不同之处:T命令执行时,若遇到CALL或INT指令(除了DOS系统调用INT21),会跟踪进入相应过程或中断服务程序内部;对于带重复前缀(如REP)的指令,每次重复算一步。P命令则将它们当作一步。可执行文件的调试:CodeView(续)运行命令G(Go)。基本格式:G[地址]该命令从CS:IP开始,一直执行到指定地址(端点)或程序终止。重新启动命令L(Restart)。基本格式:L该命令使程序重新开始执行,程序的数据及代码被重新初始化,此前对代码或数据所作的修改均丢失。等同于“Run”下的“Restart”。可执行文件的调试:CodeView(续)反汇编命令U(Unassemble)。基本格式:U[地址]该命令从指定地址开始反汇编,转换二进制代码为汇编指令,显示在活动的“Source”窗口。地址缺省为CS:IP。退出命令Q(Quit)。格式:Q退出CodeView。实验6:调试例3.1,查看结果Z的值。实验7:汇编、链接和调试例4.2。Thanks!
本文标题:汇编语言程序的开发
链接地址:https://www.777doc.com/doc-2368352 .html