《汇编语言程序设计的实验环境及上机步骤(共29页).doc》由会员分享,可在线阅读,更多相关《汇编语言程序设计的实验环境及上机步骤(共29页).doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上汇编语言程序设计的实验环境及上机步骤一、 实验环境汇编语言程序设计的实验环境如下:1. 硬件环境微型计算机(Intel x86系列CPU)一台2. 软件环境n Windows98/2000/XP操作系统n 任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)n 汇编程序(MASM.EXE或TASM.EXE)n 连接程序(LINK.EXE或TLINK.EXE)n 调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE
2、。二、 上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。1确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”“文件夹”,并把新建的文件夹命名为ASM。请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。2建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。下面的例子说明了用
3、EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。在Windows中点击桌面左下角的“开始”按钮选择“运行”在弹出的窗口中输入“EDIT.COM C:ASMHELLO.ASM”,屏幕上出现EDIT的编辑窗口,如图1所示。 图1 文本编辑器EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。紧接着标题行下面的是菜单行,窗口最下面一行是提示行。菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。如果键入EDIT命令时
4、已带上了源程序文件名(C:ASMHELLO.ASM),在编辑窗口上部就会显示该文件名。如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。编辑窗口用于输入源程序。EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。EDIT中的编辑键和功能键符合Windows的标准,这里不再赘述。源程序输入完毕后,用Alt-F打开File菜单,用其中的Save功能将文件存盘。如果在键入EDIT命令时未给出源程序文件名,则这时会弹出一个“Save as”窗
5、口,在这个窗口中输入你想要保存的源程序的路径和文件名(本例中为C:ASMHELLO.ASM)。 注意,汇编语言源程序文件的扩展名最好起名为.ASM,这样能给后面的汇编和连接操作带来很大的方便。3用MASM.EXE汇编源程序产生OBJ目标文件源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。具体操作如下: 方法一:在Windows中操作用资源管理器打开源程序目录C:ASM,把HELLO.ASM拖到MASM.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作选择“开始”“程序”“附件”“命令提示符”,打开DOS命令提示符窗口,然后用C
6、D命令转到源程序目录下,接着输入MASM命令:I:C: C:CD ASMC:ASMMASM HELLO.ASM操作时的屏幕显示如图2所示。 图2 在DOS命令提示符窗口中进行汇编不管用以上二个方法中的哪个方法,进入MASM程序后,都会提示让你输入目标文件名(Object filename),并在方括号中显示默认的目标文件名,建议输入目标文件的完整路径名,如:C:ASMHELLO.OBJ回车。后面的两个提示为可选项,直接按回车。注意,若打开MASM程序时未给出源程序名,则MASM程序会首先提示让你输入源程序文件名(Source filename),此时输入源程序文件名HELLO.ASM并回车,然
7、后进行的操作与上面完全相同。 图3 有错误的汇编过程例子如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件(名字与源文件名相同,只是扩展名不同)。如果源文件有错误,MASM会指出错误的行号和错误的原因。图3是在汇编过程中检查出两个错误的例子。在这个例子中,可以看到源程序的错误类型有两类: 警告错误(Warning Errors)。警告错误不影响程序的运行,但可能会得出错误的结果。此例中无警告错误。 严重错误(Severe Errors)。对于严重错误,MASM将无法生成OBJ文件。此例中有两个严重错误。在错误信息中,园括号里的数字为有错误的行号(在此例中,两个错误分别出现在第
8、6行和第9行),后面给出了错误类型及具体错误原因。如果出现了严重错误,你必须重新进入EDIT编辑器,根据错误的行号和错误原因来改正源程序中的错误,直到汇编没有错为止。 注意,汇编程序只能指出程序的语法错误,而无法指出程序逻辑的错误。4用LINK.EXE产生EXE可执行文件在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。具体操作如下: 方法一:在Windows中操作用资源管理器打开源程序目录C:ASM,把HELLO.OBJ拖到LINK.EXE程序图标上。 方法二:
9、在DOS命令提示符窗口中操作选择“开始”“程序”“附件”“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入LINK命令:I:C: C:CD ASMC:ASMLINK HELLO.OBJ操作时的屏幕显示如图4所示。 图4 把OBJ文件连接成可执行文件不管用以上二个方法中的哪个方法,进入LINK程序后,都会提示让你输入可执行文件名(Run file),并在方括号中显示默认的可执行文件名,建议输入可执行文件的完整路径名,如:C:ASMHELLO.EXE回车。后面的两个提示为可选项,直接按回车。注意,若打开LINK程序时未给出OBJ文件名,则LINK程序会首先提示让你输
10、入OBJ文件名(Object Modules),此时输入OBJ文件名HELLO.OBJ并回车,然后进行的操作与上面完全相同。如果没有错误,LINK就会建立一个HELLO.EXE文件。如果OBJ文件有错误,LINK会指出错误的原因。对于无堆栈警告(Warning:NO STACK segment)信息,可以不予理睬,它不影响程序的执行。如链接时有其它错误。须检查修改源程序,重新汇编、连接,直到正确。5执行程序建立了HELLO.EXE文件后,就可以直接在DOS下运行此程序,如下所示:C:HELLO回车C:程序运行结束后,返回DOS。如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。如果程
11、序不显示结果,我们如何知道程序是否正确呢?例如,这里的HELLO.EXE程序并未显示出结果,所以我们不知道程序执行的结果是否正确。这时,我们就要使用TD.EXE调试工具来查看运行结果。此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE。实验一 数据传送一、 实验目的1 熟悉8086指令系统的数据传送指令及8086的寻址方式。2 利用Turbo Debugger调试工具来调试汇编语言程序。二、 实验预习要求1 复习8086指令系统中的数据传送类指令和8086的寻址方式。2 预习Turbo Debugger的使用方法(见附录二):a) 如何启动Turbo De
12、bugger;b) 如何在各窗口之间切换;c) 如何查看或修改寄存器、状态标志和存储单元的内容;d) 如何输入程序段;e) 如何单步运行程序段和用设置断点的方法运行程序段。3 按照题目要求预先编写好实验中的程序段。三、 实验任务1通过下述程序段的输入和执行来熟悉Turbo Debugger的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下: MOV BL,08H MOV CL,BL MOV AX,03FFH MOV BX,AX MOV DS:0020H,BX 2用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下: MOV
13、AX,0102H MOV BX,0304H MOV CX,0506H MOV DX,0708H PUSH AX PUSH BX PUSH CX PUSH DX 出栈程序段请自行编写(用不同的出栈顺序)。3. 指出下列指令的错误并加以改正,上机验证之。(1) MOV BX,SI(2) MOV AH,BX(3) MOV AX,SIDI(4) MOV BYTE PTRBX,2000H(5) MOV CS,AX(6) MOV DS,2000H4. 设置各寄存器及存储单元的内容如下: (BX)0010H,(SI)0001H(10010H)12H,(10011H)34H,(10012H)56H,(1001
14、3H)78H(10120H)0ABH,(10121H)0CDH,(10122H)0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。 (1) MOV AX,1200H (2) MOV AX,BX (3) MOV AX,0120H (4) MOV AX,BX (5) MOV AX,0110HBX (6) MOV AX,BXSI (7) MOV AX,0110HBXSI5. 将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。6. 设AX寄存器中的内容为1111H,
15、BX寄存器中的内容为2222H,DS:0010H单元中的内容为3333H。将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:0010H单元中的内容进行交换。试编写程序段,并上机验证结果。7. 设(DS)1000H,(ES)2000H,有关存储器的内容如图1.5所示。要求将DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。DS:1000H0FFH0EEH0DDH0CCH ES:2000H图1.5 第7题图实验二 算术逻辑运算及移位操作一、 实验目的1熟悉算术逻辑运算指令和移位指令的功能。2了解标志寄存器各标志位的意义和指令执行对它的影响。二、
16、 实验预习要求1复习8086指令系统中的算术逻辑类指令和移位指令。2按照题目要求在实验前编写好实验中的程序段。三、 实验任务1 实验程序段及结果表格如表1.2: 表1.2标志位CFZFSFOFPFAF程序段1:MOV AX, 1018HMOV SI, 230AHADD AX, SIADD AL, 30HMOV DX, 3FFHADD AX,BXMOV 20H, 1000HADD 20H, AXPUSH AXPOP BX000000程序段2:MOV AX, 0A0AHADD AX, 0FFFFHMOV CX, 0FF00HADC AX, CXSUB AX, AXINC AXOR CX, 0FFH
17、AND CX, 0F0FHMOV 10H, CX000000程序段3: MOV BL, 25HMOV BYTE PTR10H, 4MOV AL, 10HMUL BL000000程序段4:MOV WORD PTR10H,80HMOV BL, 4MOV AX, 10HDIV BL000000程序段5:MOV AX, 0DEC AXADD AX, 3FFFHADD AX, AXNOT AXSUB AX, 3OR AX, 0FBFDHAND AX, 0AFCFHSHL AX,1RCL AX,10000002用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、0
18、4H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。写出完成此功能的程序段并上机验证结果。3写出完成下述功能的程序段。上机验证你写出的程序段,程序运行的最后结果(AX)?(1) 传送15H到AL寄存器;(2) 再将AL的内容乘以2;(3) 接着传送15H到BL寄存器;(4) 最后把AL的内容乘以BL的内容。4写出完成下述功能的程序段。上机验证你写出的程序段,程序运行后的商?(1) 传送数据2058H到DS:1000H单元中,数据12H到DS:1002H单元中;(2) 把DS:1000H单元中的数据传送到AX寄存器;(3) 把AX寄存
19、器的内容算术右移二位;(4) 再把AX寄存器的内容除以DS:1002H字节单元中的数;(5) 最后把商存入字节单元DS:1003H中。5下面的程序段用来清除数据段中从偏移地址0010H开始的12个字存储单元的内容(即将零送到这些存储单元中去)。(1) 将第4条比较指令语句填写完整(划线处)。 MOV SI,0010H NEXT: MOV WORD PTRSI,0 ADD SI,2 CMP SI, JNE NEXT HLT(2) 假定要按高地址到低地址的顺序进行清除操作(高地址从0020H开始),则上述程序段应如何修改?上机验证以上两个程序段并检查存储单元的内容是否按要求进行了改变。6 输入并运
20、行表1.3中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。表1.3程序段字单元(1A00H)=字单元(1A02H)=MOV 1A00H, 0AA55HMOV 1A02H, 2AD5HSHL WORD PTR1A02H,1 CMP 1A00H, 8000HCMCRCL WORD PTR1A02H,1RCL WORD PTR1A00H,1实验三 串操作一、 实验目的1熟悉串操作指令的功能。2了解串操作指令的使用方法。二、 实验预习要求1复习8086指令系统中的串操作类指令。2按照题目要求在实验前编写好实验中的程序段。三、 实验任务1 输入以下程序段并运行之,回答后面的问
21、题。 CLDMOV DI,1000HMOV AX,55AAHMOV CX,10HREP STOSW上述程序段执行后:(1) 从DS:1000H开始的16个字单元的内容是什么?(2) (DI)= ?(CX)= ?,并解释其原因。2 在上题的基础上,再输入以下程序段并运行之,回答后面的问题。MOV SI,1000HMOV DI,2000HMOV CX,20HREP MOVSB程序段执行后:(1) 从DS:2000H开始的16个字单元的内容是什么?(2) (SI)= ?(DI)= ?(CX)= ?,并分析之。3 在以上两题的基础上,再输入以下三个程序段并依次运行之。程序段1:MOV SI,1000H
22、MOV DI,2000HMOV CX,10HREPZ CMPSW程序段1执行后:(1) ZF=? 根据ZF的状态,你认为两个串是否比较完了?(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。程序段2:MOV 2008H,4455HMOV SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段2执行后:(1) ZF=? 根据ZF的状态,你认为两个串是否比较完了?(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。程序段3:MOV AX,4455HMOV DI,2000HMOV CX,10HREPNZ SCASW程序段3执行后:(1) ZF=? 根
23、据ZF的状态,你认为在串中是否找到了数据4455H?(2)(SI)= ?(DI)= ?(CX)= ?,并分析之。4 从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。实验四 字符及字符串的输入和输出一、 实验目的1熟悉如何进行字符及字符串的输入输出。2掌握简单的DOS系统功能调用。二、 实验预习要求1复习系统功能调用的1、2、9、10号功能。2按照题目要求预先编写好实验中的程序段。三、
24、实验任务1 输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上按“5”键。MOV AH,1INT 21H(1) 运行结束后,(AL)=?它是哪一个键的ASCII码?(2) 重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5”键,观察运行结果有何变化?2 在DS:1000H开始的内存区域设置如下键盘缓冲区:DS:1000H 5,0,0,0,0,0,0然后输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、回车这六个键。LEA DX,1000HMOV AH,0AHINT 21H程序段运行完后,检查DS:
25、1000H开始的内存区域:(1) DS:1001H单元的内容是什么?它表示了什么含义?(2) 从DS:1002H开始的内存区域中的内容是什么?其中是否有字符“1”的ASCII码?为什么?3 输入以下程序段并运行之。MOV DL,AMOV AH,2INT 21H(1) 观察屏幕上的输出,是否显示了“A”字符?(2) 分别用“#”、“X”、“Y”、“$”、“?”代替程序段中的“A”字符,观察屏幕上的输出有何变化。(3) 分别用0DH、0AH代替程序段中的“A”字符,观察屏幕上的输出有何变化。(4) 用07H代替程序段中的“A”字符,观察屏幕上有无输出?计算机内的扬声器是否发出“哔”的声音?4 要在
26、屏幕上显示一个字符串“Hello, world”,写出该字符串变量的定义语句和显示这个字符串的程序段。上机验证之。5 按6行16列的格式顺序显示ASCII码为20H到7FH之间的所有字符,即每16个字符为一行,共6行。每行中相邻的两个字符之间用空格字符分隔开。试编写程序段并上机运行验证。提示:程序段包括两层循环,内循环次数为16,每次内循环显示一个字符和一个空格字符;外循环次数为6,每个外循环显示一行字符并显示一个回车符(0DH)和一个换行符(0AH)。实验五 直线程序设计一、 实验目的1、学习8086汇编语言程序的基本结构和程序设计的基本方法。2、熟悉在PC机上建立、汇编、链接、调试和运行8
27、086汇编语言程序的全过程。二、 实验预习要求1、 认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。2、 复习BCD码运算的调整指令。3、根据本实验的编程提示和程序框架预先编写汇编语言源程序。4、有兴趣的同学请自行编写出后面的实验习题。三、 直线程序简介直线程序是控制流仅有一个走向的程序,它主要用于解决一些无需进行判断分支,也无需循环简单的简单问题。四、 实验内容设a、b、c、d四个数分别以压缩的BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d),然后把结果显示在屏幕上。改变a,b,c,d内容,然后重新汇编、连接并运行程序,检
28、查其结果与手工计算是否相符。下面是几组实验用的数据: 1、a09,b16,c04,d17 2、a38,b41,c29,d34 3、a70,b23,c42,d41 4、a63,b73,c62,d50五、 调试提示源程序编制完后,先静态检查,无误后,对源程序进行汇编连接,生成可执行文件。先将程序在DOS下运行,如正确,则改变a,b,c,d的值反复验证,如不正确,则将程序调入TD中进行调试。六、 实验习题若改变a, b, c, d的值如下:1、a90,b34,c33,d442、a12,b19,c25,d33观察结果,改进程序使结果正确。实验六 分支及循环程序设计一、 实验目的1、 学习提示信息的显示
29、及键盘输入字符的方法。2、 掌握分支程序和循环程序的设计方法。二、 实验预习要求1、 复习比较指令、转移指令、循环指令的用法。2、根据编程提示,编出汇编语言源程序。3、有兴趣的同学请编写出实验习题中的程序。三、 分支程序和循环程序简介1、 分支程序是根据不同条件执行不同处理过程的程序。分支程序的结构有两种:种是二分支,种是多分支。它们的共同特点是在满足某一条件时,将执行多个分支中的某分支。2、 循环程序四、 实验内容在屏幕上显示提示信息“Please input 10 numbers:”,提示用户输入10个数(数的范围在099之间),然后从键盘上读入这10个数。接着对这10个数从小到大进行排序
30、,并统计059、6079、8099的数各有多少。最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。显示格式如下:Sorted numbers: xx,xx,xx,xx,xx,xx,xx,xx,xx,xx0-59: xx60-79: xx80-99: xx五、 实验习题1 从键盘输入任意一个字符串,统计其中不同字符出现的次数(不分大小写),并把结果显示在屏幕上。2 从键盘分别输入两个字符串,若第二个字符串包含在第一个字符串中则显示MATCH,否则显示NO MATCH。TD.EXE简要使用说明TD. EXE(简称TD)是一个具有窗口界面的程序调试器。利用TD,用户能够调试已有的可
31、执行程序(后缀为EXE);用户也可以在TD中直接输入程序指令,编写简单的程序(在这种情况下,用户每输入一条指令,TD就立即将输入的指令汇编成机器指令代码)。作为入门指导,下面简单介绍一下TD的使用方法,更详细深入的使用说明请参考相关资料。一、如何启动TD1 在DOS窗口中启动TD 仅启动TD而不载入要调试的程序 转到TD.EXE所在目录(假定为C:ASM),在DOS提示符下键入以下命令(用户只需输入带下划线的部分,表示回车键,下同): C:ASMTD 用这种方法启动TD,TD会显示一个版权对话框,这时按回车键即可关掉该对话框。 启动TD并同时载入要调试的程序 转到TD.EXE所在目录,在DOS
32、提示符下键入以下命令(假定要调试的程序名为HELLO.EXE): C:ASMTD HELLO.EXE 若建立可执行文件时未生成符号名表,TD启动后会显示“Program has no symbol table”的提示窗口,这时按回车键即可关掉该窗口。2 在Windows中启动TD 仅启动TD而不载入要调试的程序 双击TD.EXE文件名,Windows就会打开一个DOS窗口并启动TD。启动TD后会显示一个版权对话框,这时按回车键即可关掉该对话框。 启动TD并同时载入要调试的程序 把要调试的可执行文件拖到TD.EXE文件名上,Windows就会打开一个DOS窗口并启动TD,然后TD会把该可执行文件
33、自动载入内存供用户调试。 若建立可执行文件时未生成符号名表,TD启动后会显示“Program has no symbol table”的提示窗口,这时按回车键即可关掉该窗口。二、TD中的数制 TD支持各种进位记数制,但通常情况下屏幕上显示的机器指令码、内存地址及内容、寄存器的内容等均按十六进制显示(数值后省略“H”)。在TD的很多操作中,需要用户输入一些数据、地址等,在输入时应遵循计算机中数的记数制标识规范。例如: 二进制数后面加“B”或“b”,如b等; 十六进制数后面加“H”或“h”,如38h、0a5h、0ffh等。 如果在输入的数后面没有用记数制标识字母来标识其记数制,TD默认该数为十六进
34、制数。但应注意,如果十六进制数的第一个数字为“a”“f”,则前面应加0,以区别于符号和名字。 TD允许在常数前面加上正负号。例如,十进制数的-12可以输入为-12d,十六进制数的-5a可以输入为-5ah,TD自动会把输入的带正负号的数转换为十六进制补码数。只有一个例外,当数据区的显示格式为字节,若要修改存储单元的内容则不允许用带有正负号的数,而只能按手工转换成补码后再输入。 本实验指导书中所有的实验在输入程序或数据时,若没有特别说明,都可按十六进制数进行输入,若程序中需要输入负数,可按上述规则进行输入。三、TD的用户界面1 CPU窗口 TD启动后呈现的是一个具有窗口形式的用户界面,见图B.1,
35、它称为CPU窗口。CPU窗口显示了CPU和内存的整个状态。利用CPU窗口可以: 在代码区内使用嵌入汇编,输入指令或对程序进行临时性修改。 存取数据区中任何数据结构下的字节,并以多种格式显示或改变它们。 检查和改变寄存器(包括标志寄存器)的内容。代码区数据区寄存器区堆栈区标志区功能键提示条全局菜单 图B.1 TD的CPU窗口界面 CPU窗口分为五个区域:代码区、寄存器区、标志区、数据区和堆栈区。 在五个区域中,光标所在区域称为当前区域,用户可以使用Tab键或Shift-Tab键切换当前区域,也可以在相应区中单击鼠标左键选中某区为当前区。光标在各个区域中显示形式稍有不同,在代码区、寄存器区、标志区
36、和堆栈区呈现为一个反白条,在存储器区为下划线形状。 在图B.1中,CPU窗口上边框的左边显示的是处理器的类型(8086、80286、80386、80486等,对于80486以上的CPU均显示为80486)。上边框的中间靠右处显示了当前指令所访问的内存单元的地址及内容。再往右的“1”表示此CPU窗口是第一个CPU窗口,TD允许同时打开多个CPU窗口。 CPU窗口中的代码区用于显示指令地址、指令的机器代码以及相应的汇编指令;寄存器区用于显示CPU寄存器当前的内容;标志区用于显示CPU的8个标志位当前的状态;数据区用于显示用户指定的一块内存区的数据(十六进制);堆栈区用于显示堆栈当前的内容。 在代码
37、区和堆栈区分别显示有一个特殊标志(4),称为箭标。代码区中的箭标指示出当前程序指令的位置(CS:IP),堆栈区中的箭标指示出当前堆栈指针位置(SS:SP)。2 全局菜单介绍 CPU窗口的上面为TD的全局菜单条,可用“ALT键+菜单项首字符”打开菜单项对应的下拉子菜单。在子菜单中用“”、“”键选择所需的功能,按回车键即可执行选择的功能。为简化操作,某些常用的子菜单项后标出了对应的快捷键。下面简单介绍一下常用的菜单命令,详细的说明情查阅相关资料。(1) File菜单:文件操作Open 载入可执行程序文件准备调试Change dir 改变当前目录Get info 显示被调试程序的信息DOS shel
38、l 执行DOS命令解释器(用EXIT命令退回到TD)Quit 退出TD(Alt-X)(2)Copy 复制当前光标所在内存单元的内容到粘贴板(Shift-F3)Paste 把粘贴板的内容粘贴到当前光标所在内存单元(Shift-F4)(3)Breakpoints 断点信息Stack 堆栈段内容Watches 被监视对象信息Variables 变量信息Module 模块信息File 文件内容CPU 打开一个新的CPU窗口Dump 数据段内容Registers 寄存器内容(4)Run 从CS:IP开始运行程序直到程序结束(F9)Go to cursor 从CS:IP开始运行程序到光标处(F4)Trac
39、e into 单步跟踪执行(对CALL指令将跟踪进入子程序)(F7)Step over 单步跟踪执行(对CALL指令将执行完子程序才停下)(F8)Execute to 执行到指定位置(Alt-F9)Until return 执行当前子程序直到退出(Alt-F8)(5)Toggle 在当前光标处设置/清除断点(F2)At 在指定地址处设置断点(Alt-F2)Delete all 清除所有断点(6)Inspector 打开观察器以查看指定的变量或表达式Evaluate/Modify 计算和显示表达式的值Add watch 增加一个新的表达式到观察器窗口(7)Display options 设置屏幕
40、显示的外观Path for source 指定源文件查找目录Save options 保存当前选项(8)Zoom 放大/还原当前窗口(F5)Next 转到下一窗口(F6)Next Pane 转到当前窗口的下一区域(Tab)Size/Move 改变窗口大小/移动窗口(Ctrl-F5)Close 关闭当前窗口(Alt-F3)User screen 查看用户程序的显示(Alt-F5) 3 功能键提示条 菜单中的很多命令都可以使用功能键来简化操作。功能键分为三组:F1F10功能键,Alt-F1Alt-F10功能键以及Ctrl功能键(Ctrl功能键实际上就是代码区的局部菜单)。CPU窗口下面的提示条中显
41、示了这三组功能键对应的功能。通常情况下提示条中显示的是F1F10功能键的功能。按住Alt不放,提示条中将显示Alt-F1Alt-F10功能键的功能。按住Ctrl不放,提示条中将显示各Ctrl功能键的功能。表B.1列出了各功能键对应的功能。表B.1键功能键功能键功能F1帮助Alt-F1帮助Ctrl-G定位到指定地址F2设/清断点Alt-F2设置断点Ctrl-O定位到CS:IPF3查看模块Alt-F3关闭窗口Ctrl-F定位到指令目的地址F4运行到光标Alt-F4Undo跟踪Ctrl-C定位到调用者F5放大窗口Alt-F5用户屏幕Ctrl-P定位到前一个地址F6下一窗口Alt-F6Undo关窗Ctrl-S查找指定的指令F7跟踪进入Alt-F7指令跟踪Ctrl-V查看源代码F8单步跟踪Alt-F8跟踪到返回Ctrl-M选择代码显示方式F9执行程序Alt-F9执行到某处Ctrl-N更新CS:IP