微机原理上机实验指导书_第1页
微机原理上机实验指导书_第2页
微机原理上机实验指导书_第3页
微机原理上机实验指导书_第4页
微机原理上机实验指导书_第5页
已阅读5页,还剩15页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

PAGEPAGE3第一部分调试程序DEBUGDEBUG的调用格式:[drive:][path]debug[d:][path][filename.ext]example:调入ASM1.COMdebug↓debug↓-NASM1.COM↓-L↓退出DEBUG-Q↓DEBUG的子命令相关的CPU寄存器,FLAGS寄存器标志位状态,驱动器号标志码(1)驱动器编号编号磁盘属性0A软盘1B软盘2C硬盘(2)命令中使用地址。段地址:偏移量example:CS:0100段地址:始偏移量末偏移量example:CS:01000110段地址:始偏移量长度example:CS:0100L10(3)不调入文件时,IP为0100。(4)SP指向栈底。(5)不调入文件时,AX、BX、CX、DX、SI、DI、BP为0。当调入文件时,文件长度装入CX,大于64K时,其长度高位装入BX,均以字节为单位。(6)CS、DS、SS、ES位于内存空间对应段的底部,既DEBUG程序后的第一段。(7)FLAGS 寄存器标志位为NV(无溢出)UP(方向为增)EI(中断允许)PL(符号为正)NZ(非零)NA(无辅助进位)PO(奇)NC(无进位)(8)DEBUG子命令有:A(汇编);U(反汇编);G(运行);T(跟踪);R(寄存器显示与修改);D(内存显示);E(内存修改);S(查找);F(填充);M(数据移动);C(数据比较);N(文件命名);W(存盘);L(装入);I(端口输入);O(端口输出);H(十六进制运算);Q(退出)。格式:R[寄存器名]功能:显示或修改CPU寄存器的内容,包括:AXBXCXDX;CSDSSSES;SPSIBPDIIPFLAGSFLAGS符号表标志位名置位复位OOVNVDDNUPIEIDISNGPLZZRNZAACNAPPEPOCCYNCExample:-R↓;立即显示各寄存器的内容-RBX↓;显示并修改BX的内容BX0000:0100↓-RF↓OVDNEINGZRACPECY-PONZ↓格式:A[起始地址]功能:从始地址汇编并把指令变成机器码;不指定始地址,默认为当前的CS:连续地址。Example:-A0100↓格式:U[始地址]或U[地址范围]功能:将始地址起或地址范围的机器码反汇编显示出来。Example:-U100↓-U100108↓格式:G[=始地址][断点地址……]功能:从始地址运行程序,遇断点停。Example:-G=10010d↓-G=100↓格式:T[=始地址][跟踪条数]功能:从始地址运行一条或数条指令。Example:-T=100↓-T↓-T=10003↓格式:D[始地址]或D[地址范围]功能:显示内存十六进制数。Example:-D↓(DS)-D100↓-D100120↓格式:E[始地址][数据表]功能:将用数据表的内容修改始地址连续的内存单元的内容;没给出数据表,在命令执行后逐个修改,结束按回车--往后修改按空格键;往前修改按-号键;空格和-号键为单元间隔。Example:-E0104412434↓(DS)-E0104↓0100:01044167↓格式:S地址范围数据表功能:查找指定范围的数据表,找到显示地址,找不到返回提示符。Example:-S1000128CD20↓格式:F地址范围数据表功能:将地址范围的数据用数据表的内容填充,如果地址表范围大于数据表个数,将从重复使用数据表。Example:-F6C02:01006C02:010412233445↓格式:M源地址范围目的始地址功能:将源地址范围的内容装入到目的地址。Example:M6C02:01006C02:02007F38:0100↓格式:C源地址范围目的地址功能:将源地址范围的内容依次与目的地址的内容相比较,不同时显示:源地址源数据目的数据目的地址格式:N[d:][p]filename[.ext]功能:(当调入文件或写文件到盘时)给文件命名。格式:W始地址或W始地址驱动器号始扇区扇区数功能:将从始地址开始,BX和CX记录的字节长度写入到N命名的磁盘文件中。或将始地址开始的内容,写入驱动器号标识磁盘的始扇区标定的扇数内容。格式:L[始地址]或L始地址驱动器号始扇区扇区数功能:将N命名的文件调入内存,文件长度存于CX和BX中;或从标识盘中始扇区,标定扇区数装入到内存始地址中。格式:I端口地址功能:从端口地址读入一字节数据并显示。地址0—FFH;DX从0—FFFFH。格式:O端口地址字节值功能:将指定端口的字节传送到输出端口。可以按CTRL-BREAK终止命令的执行。若命令产生相当多的输出行,为在屏幕上看清楚,可以按CTRL-NUMLOCK键暂停,按任一键继续。第二部分汇编程序、连接程序、DOS的装入和返回功能汇编程序的三在DOS系统下使用得较普遍的汇编程序是MAXM.exe。汇编程序的主要工具(1)地址计数器在每一段开始(由SEGMENT伪操作标识),地址计数器被初始化为0,每处理一条指令,包括助记符指令、数据定义以及存储器分配等伪操作,地址计数器就增加一个值,此值为该指令所需的字节数。在汇编过程中,地址计数器的内容就是当前正在被汇编的指令的偏移地址。(2)符号表记录用户所定义的符号极其属性。(3)机器指令表给出助记符表示的指令与机器指令的对应关系。(4)伪操作表给出所有伪操作及相关信息。2.汇编程序的主要功能检查汇编语言源程序,若程序中有不符汇编程序要求的语句,给出错误信息;利用地址计数器确定被汇编的每条指令的偏移地址;确定各符号的偏移地址,建立符号表;利用符号表、机器指令表和伪操作表把助记符指令翻译成机器语言指令,此时变量和符号均为浮动地址,段地址尚不定,假如指令的操作数涉及到变量或标号,则指令中的地址为浮动值;产生源程序的目标代码文件,供连接程序用。产生列表文件,给出源程序指令相对应的地址计数器的值和符号表,对于有浮动地址的指令在其二进制指令后以R标识。3.汇编程序的使用将DOS下所有相关路径设好,使用汇编程序的完整格式为:MASM[/option][Source(.asm)],[Object(.obj)],[Listing(.lst)],[Crossref(.crf)[;]↙命令MASM后跟若干参数,这些参数需用空格或逗号等分隔符分开。放在[]中的参数是可选参数,表示可以不紧跟在命令MASM后输入,可在命令执行后,按给出的提示输入;也可不输入,而使用命令的缺省值作为参数。放在()中的扩展名为缺省时的默认值。/option命令的动作选项,由符号“/”引导。利用命令MASM/HELP可查看所有动作选项及其说明。Source(.asm)指定汇编源程序的文件名,缺省的扩展名为.asm。Object(.obj)指定目标文件名,缺省的目标文件名与源程序名相同,缺省的扩展名为.obj。Listing(.lst)指定列表文件名,缺省的扩展名为.lst。缺省情况是不生成列表文件。Crossref(.crf)指定交叉参考文件名,缺省的扩展名为.crf。缺省情况是不生成交叉参考文件。命令可用分号结束,表示其后各项参数按缺省值处理。命令中除源程序参数Source(.asm)必须输入外,其它参数均设有缺省值,可不用输入。下面通过实例来介绍汇编程序的使用。test.asm是一个带有两处语法错误的汇编语言程序源文件,其内容如下:datasegmentbufferdb‘HelloWorld!’,‘$’,;手误一:在‘$’后多输了一个逗号dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axleadx,buffer;手误一:将buffer误输出为bufermovah,09Hint21Hmovah,4cHint21Hcodeendsendstart如注释所表明,程序中有两处语法错误,但检查时未发现,我们来看汇编程序会给出什么样的提示。汇编方法一:D:\MASM↙(命令尚未输入任何参数)Microsoft(R)MacroAssemblerVersion5.10(显示masm.exe的版本信息)Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.Sourcefilename[.ASM]:TEST↙(输入源文件名,缺省扩展名为.asm)Objectfilename[test.obj]:↙(直接回车,[]为缺省的目标文件名)Sourcelisting[NUL.LST]:↙(直接回车,不生成列表文件)Cross-reference[NUL.CRF]:↙(直接回车,不生成交叉参考文件)test.ASM(2):warningA4101:Missingdata;zeroassumed(指出错误1在第2行及其错误原因)test.ASM(10):errorA2009:Symbolnotdefined:BUFER(指出错误2在第10行及其错误原因)49924+421225Bytessymbolspacefree1WarningErrors(显示警告性错误总数)2SevereErrors(显示严重性错误总数)汇编提示我们,程序中有两处错误,并给出错误所在行号及错误原因。由于有严重性错误,汇编后未生成目标文件。可根据提示,在编辑器下修改程序的语法错误。方法一的输入较多,使汇编速度受到影响。采用下面介绍的方法二,可获得与方法一同样的结果,即按缺省文件名生成目标文件,不生成列表文件及和交叉参考文件。假设已在编辑器下将TEST.asm的两处语法错误改正。汇编方法二:D:\MASMTEST;↙(命令中用分号缺省后面的输入)Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.49928+421221Bytessymbolspacefree0WarningErrors0SevereErrors汇编后未有错误提示,表明汇编已成功,生成目标文件TEST.obj。若要形成列表文件,必须在汇编中输入列表文件名,否则将不生成该文件。D:\MASM↙(命令尚未输入任何参数)Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.Sourcefilename[.ASM]:TEST↙Objectfilename[test.obj]:↙Sourcelisting[NUL.LST]:TEST↙(输入列表文件名,缺省扩展名为.lst)Cross-reference[NUL.CRF]:↙47868+421247Bytessymbolspacefree0WarningErrors0SevereErrors列表文件是一个文本文件,可用任何一个文本编辑器查看。汇编程序中,至少要有一条END语句,否则即使程序中有很多错误,汇编也只给出无END语句错误信息,且显示警告性错误总数,严重性错误总数均为0,用户不要被此值误导。例将带有两处错误的源程序test.asm的最后一条语句endstart去掉,对test.asm进行汇编得如下结果。D:\MASMTEST;↙Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.Endoffileencounteredoninputfile无END语句错误信息Endoffileencounteredoninputfile49968+421181Bytessymbolspacefree0WarningErrors0SevereErrors二、连接程序在DOS系统下使用得较普遍的连接程序是LINK.exe。连接程序的主要功能(1)找到要连接的所有目标模块,并确定各目标模块的相对段值;(2)确定各目标模块中的浮动地址及外部符号地址;(3)产生可再定位的装入模块,即可执行文件(后缀名为.exe);(4)产生映像文件(后缀名为.map)连接程序的使用将DOS下所有相关路径设好,使用汇编程序的完整格式为:LINK[/option][Object(.obj)],[Runfile(.exe)],[Mapfile(.map)],[Library(.lib)[;]↙命令LINK后跟若干参数,这些参数需用空格或逗号等分隔符分开。放在[]中的参数是可选参数,表示可以不紧跟在命令LINK后输入,可在命令执行后,按给出的提示输入;也可不输入,而使用命令的缺省值作为参数。放在()中的扩展名为缺省时的默认值。/option命令的动作选项,由符号“/”引导。利用命令LINK/HELP可查看所有动作选项及其说明。Object(.obj)指定目标文件名,缺省的扩展名为.obj,多个目标文件之间用加号“+”分隔。Runfile(.exe)指定可执行文件名,缺省的文件名与第一个目标文件名相同,缺省的扩展名为.exe。Mapfile(.map)指定映像文件名,缺省的扩展名为.map。缺省情况是不生成映像文件。Library(.lib)指定库文件名,缺省的扩展名为.lib。多个库文件之间用加号“+”分隔。缺省情况是不使用库文件。命令可用分号结束,表示其后各项参数按缺省值处理。命令中除目标文件参数Object(.obj)必须输入外,其它参数均设有缺省值,可不用输入。下面通过实例来介绍连接程序的使用。将TEST.obj文件连接成可执行文件。连接方法一:D:\LINK↙(命令尚未输入任何参数)Microsoft(R)OverlayLinkerVersion3.61(显示link.exe的版本信息)Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.ObjectModules[.OBJ]:TEST↙(输入目标文件名,缺省扩展名为.obj)RunFile[TEST.EXE]:↙(直接回车,[]为缺省的可执行文件名)ListFile[NUL.MAP]:↙(直接回车,不生成映像文件)Libraries[.LIB]:↙(直接回车,不使用库文件)LINK:warningL4021:nostacksegment(显示警告性错误)连接程序指出程序中无堆栈段,这是一个,该错误不影响可执行文件的生成。由于无严重性错误,连接成功,生成可执行文件。对于初学者,在程序中可以不设置堆栈段,使用的是系统分配的堆栈。方法一的输入较多,使连接速度受到影响。采用下面介绍的方法二,可获得与方法一同样的结果,即按缺省文件名生成可执行文件,不生成映像文件和不使用库文件。连接方法二:D:\LINKTEST;↙(命令中用分号缺省后面的输入)Microsoft(R)OverlayLinkerVersion3.61Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.LINK:warningL4021:nostacksegment若要形成映像文件,必须在汇编中输入映像文件名,否则将不生成该文件。D:\LINK↙(命令尚未输入任何参数)Microsoft(R)OverlayLinkerVersion3.61Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.ObjectModules[.OBJ]:TEST↙RunFile[TEST.EXE]:↙ListFile[NUL.MAP]:TEST↙(输入映像文件名,缺省扩展名为.map)Libraries[.LIB]:↙LINK:warningL4021:nostacksegment映像文件是一个文本文件,可用任何一个文本编辑器查看。映像文件中给出模块中每个段的其始地址,结束地址和长度,并给出程序入口地址,这些值都是相对值,只有加上可执行文件装入内存后的入口地址绝对值与映像文件给出的入口地址之差才是各段在内存中的绝对值。用DEBUG调用可执行文件后用R命令查看CS:IP的值,即是程序入口地址的绝对值。若要在程序中定义一个堆栈段,必须将该段的组合类型设为STACK类型,否则连接时仍给出无堆栈段的警告性错误。在TEST.asm源文件中增加如下的段定义:s_segsegmentpapastack(定义该组合类型为stack)dw100dup(?)s_segends重新汇编TEST.asm源文件,并进行连接,无堆栈段的警告性错误信息消失。DOS的装入和返回功能连接后产生的.exe文件是一个可执行文件,存储在磁盘上,要执行该程序,必须将其装入内存,并控制CPU的CS:IP指向程序的入口地址,CPU才开始执行程序。执行完程序后,还需利用DOS的返回功能结束程序的执行,返回命令接受状态。装入功能在DOS的提示符后输入可执行文件的文件名,按回车键,DOS系统即调用装入功能(又称EXEC系统功能),完成以下操作:确定内存可用部分,以便存放要执行的.exe文件。在可用内存的起点建立执行程序的程序段前缀PSP(programsegmentprefix),程序段前缀的大小为100H,即256个字节,需要注意的是程序段前缀最开始的两个字节是一条INT20H指令。装入可执行程序到内存可用区,并修改以下寄存器的值:DS和ES设置为程序段前缀所在内存的段值;SS和SP设置为由连接程序传过来的值;CS和IP设置为程序的入口地址,它是汇编语言程序中为操作END后跟的符号名对应的物理地址;由于CS:IP已指向程序的入口地址,从而CPU开始执行已装入内存中的程序。程序结束返回功能执行该程序后,若要返回DOS命令解释器的的等待命令接受状态,即在屏幕上出现DOS提示符,等待输入新的命令,需要在用户程序的最后安排完成此功能的程序段,通常是采用调用DOS系统功能完成。可以采用以下两种方法中的任一种:第一种:在要4CH处,安排调用4CH系统功能的指令。MOVAX,4C00HINT21H执行完4CH的功能调用,即返回DOS。第二种:调用程序结束中断功能(INT20H指令)20H中断例行程序是处理程序结束用的,但调用该功能时,要求当前的CS为.exe文件程序段前缀所在内存的段值。DOS推荐给用户的汇编程序标准框架:codeSEGMENTASSUMECS:codemainPROCFARstart:PUSHDS;入栈保护程序段前缀的首地址XORAX,AXPUSHAX...;程序主体部分...RET;取出程序段前缀的首地址给CS:IPmainENDPcodeENDSENDstart这一结构就是保证利用INT20H返回DOS,解释如下:程序装入内存后DS寄存器的初值被置为程序段前缀所在的段值,程序一开始就把当前DS寄存器内容压入堆栈,并把一个零值压入堆栈,实质是入栈保存程序段前缀的首地址。执行完程序主体部分,最后执行RET指令时,由于程序定义为一个远过程,故RET为远返回,将从堆栈中弹出两个字分别IP和CS。 此时CS和IP将指向程序段前缀的首地址。由于程序段前缀在 首地址处安排的是一条INT 20H指令,且CS的值是.exe文件程序段前缀所在内存的段值,从而执行INT 20H可以正确返回DOC系统。第三部分汇编语言软件开发工具汇编语言程序的开发过程汇编语言程序的开发过程如图所示。这个过程主要由编辑、编译、链接几个步骤构成。1、源程序的编辑编辑过程就是调用编辑程序把源程序输人内存,生成一个扩展名为ASM的文本源文件并存人磁盘。如对原有的ASM文件进行修改,则在盘上还生成一个扩展名为BAK的备份文件,它是修改前的ASM文件自动改名形成的。DOS提供的EDIT.EXE或其他全屏幕编辑软件都能完成编辑任务。2、源程序的编译编译也称汇编。就是利用汇编器(如MASM或TASM)对源程序进行翻译,生成扩展名为OBJ的目标文件。在编译过程中,若汇编器检查到源程序中有语法错误,则不生成目标代码文件,并给出错误信息。根据用户需要,汇编器还可生成列表文件(LST文件)和交叉参考文件(XRF文件)。3、目标程序的链接链接的过程是:利用链接程序(如LINK或TLINK)将用户目标程序和库文件进行链接、定位,生成扩展名为EXE的可执行文件。链接时,如果在目标文件或库中找不到所需的链接信息,则链接程序会发出错误信息,而不生成可执行文件。根据用户需要,链接程序还可生成内存分配文件(MAP文件)。4、调试可执行程序有时,用户生成的EXE文件运行后,并没有按照设计的意图运行。这就需要对程序进行调试,称为找“臭虫”。根据具体情况,调试的过程也不尽相同。一般地,可利用调试工具(各版本DOS所带的DEBUC或Borland公司的TurboDebugger)对生成的可执行文件进行调试,找出错误。再对源程序进行修改,即重复地进行编辑、编译、链接、调试,直到生成完全正确的可执行文件为止。5、COM文件的生成按照COM文件的汇编格式设计的源程序,在生成EXE文件后9才可转换成COM,{文件。使用本章提供的TLINK.EXE在TLINK命令后加选项“/t”(注意:是小写字母)可直接生成COM文件。二、TurboAssemblerBorland公司开发了3个版本的汇编程序(TurboAssembler):TASM.EXE,TASMX.EXE和TASM32.EXB。使用哪个版本则取决于需要,如果编译的模块不是很大时,用TASM编译比用其他两个速度要快。本节介绍TASM.EXE(4.1版本)的使用方法,并且假设它已拷贝到了C盘根目录下。运行TASM.EXE的时候,必须有命令行参数,TASM通过命令行参数(而不是通过人机会话)获得汇编信息。因此,在DOS环境下运行TASM.EXE时,完整的命令行格式如下:1、句法分析在TASM之后,依次有5个命令行参数,用方括号括起来的是可选项参数。①Source是必须键人的待汇编的文件名,扩展名可以省略(如果省略扩展名,TASM将自动认为它的扩展名是ASM),文件名前面可以有路径。②可选项object是程序员指定的汇编后生成的目标文件名;可选项listing是程序员指定的汇编后生成的列表文件名;可选项xref是程序员指定的汇编后生成的交叉弓!用文件的文件名。这些文件名之间用“,”间隔。键人这些文件名的时候,可以自带扩展名。如果没有扩展名,则文件名必须按上述命令行的顺序键入(缺选的文件名用空格代替)。此时,TASM自动为目标文件生成扩展名OBJ,自动为列表文件生成扩展名LST,自动为交叉引用文件生成扩展名XRF。⑤如果不键入可选项object,汇编后自动生成与源文件同名的OBJ文件。④如果不键入可选项xref,汇编后不生成交叉引用文件。⑤如果不键入可选项listing,而且Opt1On选项中也没有“/1”,汇编后不生成列表文件。2、一次汇编多个文件TASM允许一次汇编多个文件,此时,待汇编的文件可以是用“+”连接的单个文件名,也可以是用DOS通配符“*”和“?”表示的源文件,例如:C:>TASMFILE1+FILE2C:>TASMFILE*.ASM3、汇编器参数optionTASM提供了若千个汇编参数,这些参数为汇编器提供汇编信息。每一个参数都以“/”开头,参数可以连用,也可以单独使用,参数可以紧跟在TASM之后键入(然后空一格再键人源文件名),也可以在命令行末尾键人。在DOS环境下键入:C:>TASM|MORE可以分页显示这些参数的功能。本节仅介绍其中的几个参数:/c————允许在列表文件中产生“交叉引用信息”。交叉引用信息就是源文件中定义标号名、变量名的语句行在列表文件中的语句编号。/d————为源文件中的变量赋值。例:TASh4TEST/dMAX=10/dMIN=2该命令给源程序TEST.ASM中的变量MAX赋10,给变量MIN赋2,然后再对源程序TEST.ASM进行汇编。/h————显示帮助信息屏。/?————与/h功能相同。/l————产生列表文件。列表文件和源文件同名,其扩展名为.LST。/ml———告知TurboAssembler按大小写分别对待所有的符号名。在通常情况下大小写字母是等价的,如符号名ABCdef,abcdef和ABCDEF被认为是同一个符号。但用了/rnl选项之后,这3个符号被区别对待。该选项不影响指令助记符、指令和操作符等关键字大小写的混合输人。/n————表明用户不需要列表文件末尾的常规符号表。当命令行上显式地指明列表文件,或使用/l可选项要求生成列表文件时,再用/n才能有效,否则/n将无效。例:TASM/1/nTEST1/q————删除链接时用不到的。OBJ记录,如版权信息和与文件有关的记录。这样,生成的OBJ文件就更小一些/t————压缩成功汇编的信息量。例:TASM/tTEST1当TBST1没有任何错误被成功汇编时,不显示任何提示信息即返回。/z—一——汇编后不仅能显示错误语句所在的行号和原因,而且能显示有错误的语句行。/zi———生成合调试信息的目标文件。用户在汇编源程序时,可根据需要选择不同的选项。例如,假设TASM.EXE和待汇编的源程序TEST.ASM都在C盘根目录下,键入:C:>TASMTEST仅生成TEST.OBJ文件(不含调试信息);键入:C:>TASMTEST/L生成TEST.OBJ文件(不含调试信息)和TEST.LST艾件.三、TurboLinkTLINK是TurboAssembler自带的一个链接程序,TLINK.EXE有两个支撑文件,它们是RTM.EXE和DPMI16BI.OVL。组织汇编语言系统文件时,应把这3个文件拷贝在一个目录下,我们假设它们已拷贝到C盘根目录下。运行TLINK.EXE的时候,必须有命令行参数,TLINK通过命令行参数(而不是人机会话)获得链接信息。在DOS环境下运行TLINK.EXE时,完整的命令行格式如下:C:>TLINKobjfiles[,exefile][,mapfile][,libfiles]1、句法分析命令行中的文件名有顺序要求:①objfiles是必须键入的待链接的目标文件名,可以自带扩展名,否则TLINK自动认为目标文件的扩展名是OBJ。两个以上的目标文件名(例如模块化程序中的主模块和子模块)需用“+”连接。②exefile是用户指定的键接后生成的可执行文件名,如果该项缺省,TLINK自动生成与目标文件同名的可执行文件(EXE)。③mapfile是用户指定的链接后生成的映像文件名,如果该项缺省,TLINK自动生成与可执行文件同名的映像文件(MAP)。eq\o\ac(○,4)libfiles是参与链接的库文件。2、TLINK链接参数TLINK提供了若干链接参数,每上个链接参数都以斜杠“/”开头,链接参数可以单独使用,也可以连用。链接参数可以放在命令行的任何位置,通常紧跟在TLINK之后,或者在命令行末尾键入。键入:C:>TLINK或者C:>TLINK/?或者C:>TLINK/H都可以显示参数的功能。本节仅介绍其中几个参数:/3————源文件中有32位寻址操作时,使用该参数链接。此外,为生成合调试信息的EXE文件,也要用此参数。/c————在公共符号和外部符号中区分大小写。/k———一删除NoStack警告信息。/x————不产生映像文件。/t————在极小存储模式中编译文件,使用该选项使TLINK生成.COM文件而不是.EXE文件。/v————在可执行文件中包含调试信息。用户根据需要可选择适当的选项,对相应的目标模块进行链接。例如:假设C盘上有TEST.OBJ文件,键入:C:>TLINKTEST生成TEST.EXE和TEST.MAP文件;键入:C:>TLINKTEST/x仅生成TEST.EXE文件;键入:C∶>TLINKTEST/x/t仅生成TEST.COM。条件是TEST.ASM必须是按COM格式编程的。四、TurboDebugger在汇编语言程序设计的过程中,程序的调试是较重要的一个步骤。Borland公司的TurboDebugger(简称TD)是一个较先进的源代码级和机器指令级的调试器,本节详细介绍它的使用方法。TurboDebugger的执行文件是TD,EXE,该文件还有一个支撑文件TDHELP.TDH,在组织汇编语言系统文件时,应将它们拷贝在一个目录下,本节假设已将它们拷贝到C盘根目录下。TD.EXE需在DOS3.1或更高版本下运行.键入下列命令行可以显示TD的参数说明。C:>TD—?用TD进行源代码调试时,必须有待调试的源文件,而且EXE文件中必须含有调试信息。事先应使用TASM.EXE(带汇编参数“/zi”)对源文件进行汇编;并用TLINK.EXE(带链接参数“/3/v”)对目标文件进行链接,从而生成含有调试信息的EXE文件。如果汇编和链接不使用上述参数,则生成的EXE文件不合有调试信息,对于不含有调试信息的EXE文件,只能进行机器指令级的调试。TD调入待调试文件时将给出以下信息:Programhasnosymbletable(一)TurboDebugger调试界面1、启动TD启动TD有3种方法:(1)键入:C:>TD若启动成功,则在屏幕上给出如图2所示的机器指令级调试界面,并叠加一个TD版本的说明框,按“Esc”键就可关闭该说明框。此时,代码显示区显示的是当前CS:IP处的若干指令,其他4个调试显示框的内容也都是当前CPU的信息,因此,这个界面又被称为“CPU窗口”。(2)键入:C:>TD无调试信息的待调试文件名若启动成功,调试界面叠加一个说明框,提示:程序没有符号表。按Esc键可关闭该说明框。此时,代码显示区显示的是待调试程序的语句行。(3)键入:C:>TD有调试信息的待调试文件名若启动成功,则中间的5个显示区会合成一个源代码显示区,显示待调试文件的语句行,此时的界面被称为“MODULE窗口”。2、退出TD要想退出TD,先按Esc键关闭所有的对话框,然后按组合键Alt+X就可退出TD。也可以选择File|Quit菜单选项退出TD,返回操作系统。3、多窗口界面机器指令级调试界面是一个多窗口界面。顶部为主菜单,底部为快捷键操作提示区,中间是5个显示调试区.利用“Tab”键可以使光条(或者是闪烁的光标)在5个显示调试区之间移动。当光条或光标移动到某个显示调试区时,称该区为“活动区”。快捷键提示区给出了当前用户可使用的热键及其功能。在不同的活动区域,键人Ctrl或A1t键又可显示通用于该活动区的快捷键。在选择主菜单项或者任何一个二级子菜单项的时候,快捷键提示区还能同步地显示该菜单项的功能。在活动区,用光标控制键、翻页键可以移动光条或光标的位置。然后键入Ctrl或Alt,选择其中的快捷键,即可对光标处的内容进行修改。(1)查看和修改代码区内容代码显示区显示的是以行为单位的机器指令的反汇编和以十六进制数表示的机器指令,每行行首是指令地址,该地址用段值和偏移量来表示。当代码显示区成为活动区时,可进行下列操作:①在该区出现一个光条,覆盖着某条指令,使用光标控制键和翻面键可调整所显示的代码区。②可直接指定要查看的内存区首地址。按组合社Ctr1+G就会弹出一个用于输人定位地址的对话框。用户键入“段寄存器:偏移地址”即可显示从该地址开始的内容。eq\o\ac(○,3)可以在当前代码区查找指定的指令。按组合键Ctrl+S会弹出一个用于输入欲查找指令的对话框。④可方便地修改代码区内的指令。直接按字符或数字键,就会弹出一个用于输人汇编格式指令的对话框,输人的指令被覆盖到光条所指示的存储单元中。⑤按组合键Alt+F10会弹出一个适用于代码显示区的操作菜单。其中的Assemble项就用于汇编指令。另外,I/O项可用于I/O端口的操作。(2)查看和修改内存数据区内容在该区可看到用十六进制数和对应的ASCII码字符两种形式显示内存区域的内容.当该区成为活动区时可进行下列操作:①按组合键Ctrl+D可弹出一个用于指定显示格式的菜单,供用户选择。②使用光标控制键可移动光标,通过翻页键可调整所显示的内存区域。③按组合键Ctrl+G可弹出一个用于输入定位地址的对话框,用户键入“段寄存器:偏移地址”可以指定需要显示的内存区首地址。④可以从当前光标指示的地址开始,向高地址方向搜索一个字节表,方法是:按组合键Ctrl+S弹出一个对话框,用户键入欲查我的字节表。⑤修改内存单元的内容也是方便的。按组合键Ctr1+C弹出输人数值的对话框。输入的单字节数或多字节数将依次存人光标所对应的存储单元,多字节数以空格或逗号作间隔。如果欲修改的内存单元不在当前显示范围内,应先改变显示范围。⑥按组合键Alt+F10会弹出一个适用于数据显示区的操作菜单,选择其中的相应项,也可实现上述有关功能。(3)查看和修改寄存器内容寄存器显示区显示了CPU内部各通用寄存器、段寄存器和IP的当前值。当该区成为活动区之后,可以进行下列操作:①以下两种方法可以进行16位通用寄存器和32位通用寄存器的切换·键人Alt+F10弹出一个操作菜单,选择其中的。“Registers32-bit”项;·键人Ctrl+R。②修改被光条覆盖的寄存器的内容·键人Ctrl+Z,被光条覆盖的寄存器清0;·键人Ctrl+I,被光条覆盖的寄存器内容加1;·键人Ctrl+D,被光条覆盖的寄存器内容减1;·键入Ctrl+C,弹出一个对话框,用户键人的有效数据将存入被光条所覆盖的寄存器。(4)查看和修改标志位状态当该区成为活动区时,使用光标控制键可移动光条。按Ctrl+T可翻转光条所在标志的状态,即0改为1,1改为0。(5)查看和修改堆栈内容尽管堆栈也是内存区域,但它又不同于普通数据区,所以,TD专门提供堆栈显示区来显示栈顶的部分内容。当该区成为活动区时,按组合键Ctrl+G弹出一个用于输入定位地址的对话框,供用户修改栈顶地址。在修改堆栈区的内容时,按组合键Ctrl+C弹出输入数值的对话框,输人的有效数值将存人被光标覆盖的堆栈单元。(二)TurboDebugger功能TD的主菜单条有9个主菜单项(其中一个给出帮助信息),共70多个功能。任何时刻只要按下F10键就能激活主菜单条,随后按左右光标控制键即可选择。当光条覆盖一菜单项后中按四车键就可弹出相应热二级菜单,再按上下光标键和回车键可选择某一项功能。1、FileFile项的二级菜单提供了与文件有关的操作,如:Open:装入一个待调试的程序。选中该选项时,屏幕上出现一个对话框,要求用户输入文件名,用户可键入当前目录下的任何一个可执行文件。也可以按Tab键选择对话框中的Browse按钮,再按回车键,TD会将当前目录下的所有EXE文件在列表框中列出,按Tab键将光条移至该框中,按上下箭头键就可选择要装入的文件。Changdir:改变文件路径。若待装入的文件不在当前路径下,选择此项先改变文件路径,然后用File|Open选项装入文件。Cetinfo:显示被调试程序的有关信息。包括:文件名、内存使用情况、DOS版本、当前日期和时间、文件被中止的原因、设置的断点是硬件断点还是软件断点等。Osshell:临时回到DOS命令行下。该选项可以让用户进行DOS下的操作,按EXIT命令可以返回TD。Quit:退出TurboDebugger调试程序。Alt+X是快捷键。2、EditEdit项的二级菜单提供了对当前窗口的代码进行编辑的功能,例如:Copy:将当前活动窗口中光条覆盖的内容复制到裁剪板上。Past:从裁剪板上选定一内容粘贴到当前文本窗口的光条所在处。3、Viewview项的三级菜单提供了在当前窗口打开另一个新窗口的功能。当同时打开多个窗口时,可按F6键进行窗口之间的切换。按Alt+F3键能将当前活动窗口关掉。例如:Breakpoints:设置一个断点。F2是快捷键,按F2设置,再按F2清除断点。Watches:打开一个Watches窗口,该窗口显示了用户在程序中使用DataAddWatch功能时的变量或表达式的值。Variables:打开一个变量窗口,里面会显示被调用程序使用的符号表及它们的值。若是变量,则显示其值及类型;若是标号,则给出相应的地址及类型;同时也能显示程序中的全局符号名和它们的值。Module:显示当前源文件的模式。F3是快捷键。File:选择该项时,屏幕上显示一对话框,要求用户输入文件名,当用户输入文件名后,该文件内容被调出显示。该选项允许用户同时打开几个磁盘文件,以进行比较。CPU:打开一个CPU窗口。该窗口就是机器指令级调试界面的5个可调试区域的组合,如图16.2所示。Dump:显示CPU窗口中的数据区。Registers:显示CPU窗口中的寄存器区和标志寄存器区的内容。Another:该选项中包含了3个已经叙述过的选项:Module,Dump,File。4、RunRun选项包含了与运行程序有关的所有选项。例如:Run(快捷键F9):从当前指令开始连续执行程序,直到断点处或是遇到中断组合键一Ctrl+Break。GotoCursor(快捷键F4):程序运行至当前光标处暂停。Traceinto(快捷键F7):单步执行指令。但执行CALL和INTn指令时,有所不同:执行CALL指令时,能够“跟踪子程序”,其含义是:进入子程序第1条指令后就暂停,等待用户的下一步操作。执行INTn指令时,“不跟踪子程序”,其含义是:进入n型服务程序之后,随即自动地连续执行服务程序的若干指令,直至返回INTn的后继指令,因此宏观上看不到跟踪效果。SteρOver(快捷键F8):单步执行指令。执行CALL指令时不跟踪子程序,执行INTn指令时也不跟踪服务程序。Instructiontrace(快捷键Alt+F7):单步执行指令。执行CALL或INTn指令时都能跟踪子程序。Programreset(快捷键Ctrl+F2):重新装入当前文件。5、BreakpointsBreakpoints选项提供了与断点有关的一些功能。例如:Toggle(快捷键F2):在当前光标或光条处设置断点。At(快捷键Alt+F2):在用户指定的位置设置断点。Deletea11:清除所有断点。6、DataData选项对程序中所涉及的变量和内存区域进行检查,并允许对表达式进行计算。如:Evaluate/modify(快捷键Ctrl+F4):求表达式的值并显示结果。打开的窗口分为3部分,第1个框要求用户输人语句行的标号或变量名,按回车键后第2个框即显示标号的地址值或变量单元的内容。7、Options○pt1Ons选项是用户用来设置显示、宏汇编、当前程序用的语言、配置等功能用的。如:Language:设置表达式语言,有C,Pasca1,Assembler可供选择。Disp1ayoptions:设置屏幕显示的尺寸和字符大小。Pathforsource:为搜寻的源文件说明路径。8、WindowWindow选项提供了对窗口本身的操作。例如:Zoom(快捷键F5):放大或缩小窗口。按F5键放大,再按一次F5键缩小。Next(快捷键F6):将下一个窗口弹到前面。Nextpane(快捷键Tab)∶将下一个窗口为活动窗曰。Close(快捷键Alt+F3):关闭当前窗口。Undoclose(快捷键Alt+F6):将最后一次关闭的窗口恢复。Userscreen(快捷键Alt+F5):临时返回DOS屏幕,查看屏幕输出指令的运行结果。9、HelpHelp提供了有关如何使用TD的帮助功能。用户可选择该选项,也可利用TD提供的在线帮助来调试程序.(三)TurboDebugger应用举例【例16.4.1】显示5行HELLO。;FILENAh4E:PIELLO.ASM.486DATASECMENTUSE18MESGDB′HELLO′DB0,0,0;eq\o\ac(○,1)DATAENDSCODESEGMENTUSE16ASSUME/CS:CODE,DS:DATABDG:MOVAX,DATAMOVDS,AXMOVES,AX;②MOVCX,5LL1:MOVMESG+5,0DH;③MOVMESG+6,0AH;④MOVMESG+7,'$′

温馨提示

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

最新文档

评论

0/150

提交评论