汇编语言源程序的编辑与调试过程.docx
《汇编语言源程序的编辑与调试过程.docx》由会员分享,可在线阅读,更多相关《汇编语言源程序的编辑与调试过程.docx(21页珍藏版)》请在冰豆网上搜索。
汇编语言源程序的编辑与调试过程
汇编语言源程序的编辑与调试过程
1.怎样在TD环境下载入被调试程序?
2.在TD环境下如何编辑汇编指令?
3.在TD环境下如何查看/修改数据段的数据?
4.在TD环境下如何修改寄存器内容?
5.在TD环境下修改某个标志位内容,怎样操作?
6.指定程序的起始执行地址怎样操作?
7.在TD环境下怎样单步跟踪程序的执行?
8.在TD环境中,若只执行程序的某一部分指令,怎样处理?
9.被调试程序的显示输出看不见怎么办?
10.用MASM编译时产生警告错误会影响结果吗?
11.在WIN2000和WINDOWSXP环境中可以使用命令行方式的EDIT编辑器和调试程序DEBUG吗?
为什么点击该程序时会出现:
IncorrectDOSversion的错误信息?
12.若使用DEBUG调试运行程序,如何装入程序?
13.在汇编语言源程序中怎样加入中文注释?
14.用记事本工具编辑源程序,主名为123_ABCDEF.ASM,为什么编译程序MASM报告找不到该文件?
15.用记事本工具编辑源程序,取名为123.ASM,为什么编译程序MASM报告找不到该文件?
16.已在程序中设有如下定义:
STACK SEGMENT/DB 200 DUP(0)/STACK ENDS/为什么LINK仍然警告:
no stack segment?
17.使用DEBUG调试程序,如何设置断点?
18.用TD调试一个显示字符串的程序,当单步运行至:
/MOV AL,09/INT 21H/语句后,程序似乎变得冗长难耐,是什么原因?
1.怎样在TD环境下载入被调试程序?
答:
方法1:
转到TD.EXE所在目录,在DOS提示符下键入以下命令:
C:
\ASM>TD↙
进入TD后,按Alt-F键打开File菜单,选择Open,在文件对话框中输入要调试的程序名,按回车。
方法2:
转到TD.EXE所在目录,在DOS提示符下键入以下命令(假定要调试的程序名为HELLO.EXE):
C:
\ASM>TD HELLO.EXE↙
方法3:
在Windows操作系统中,打开TD.EXE所在目录,把要调试的程序图标拖放到TD的图标上。
[返回]
2.在TD环境下如何输入编辑汇编指令?
答
(1)用Tab键选择代码区为当前区域;
(2)用方向键把光标移到期望的地址处,如果是输入一个新的程序段,建议把光标移到CS:
0100H处;
(3)打开指令编辑窗口,有两种方法:
一是在光标处直接键入汇编指令,在输入汇编指令的同时屏幕上就会自动弹出指令的临时编辑窗口。
二是用Alt-F10键激活代码区局部菜单,选择其中的汇编命令,屏幕上也会自动弹出指令的临时编辑窗口。
(4)在临时编辑窗口中输入/编辑指令,每输入完一条指令,按回车,输入的指令即可出现在光标处(替换掉原来的指令),同时光标自动下移一行,以便输入下一条指令。
[返回]
3. 在TD环境下如何查看/修改数据段的数据?
答:
(1)用Tab键选择数据区为当前区域;
(2)使用局部菜单中的“Goto”命令并结合使用方向键把光标移到期望的地址单元处(注意数据区的光标是一个下划线),数据区就从该地址处显示内存单元的内容。
(3)若要修改该地址处的内容,则需打开数据编辑窗口。
有两种方法:
一是在光标处直接键输入数据,在输入数据的同时屏幕上就会自动弹出数据编辑窗口。
二是用Alt-F10键激活数据区局部菜单,选择其中的“Change”命令,屏幕上也会弹出数据编辑窗口。
(4)在数据编辑窗口中输入所需的数据,输入完后,按回车,输入的数据就会替代光标处的原始数据。
[返回]
4. 在TD环境下如何修改寄存器内容?
答:
(1)用Tab键选择寄存器区为当前区域;
(2)用方向键把光标移到要修改的寄存器上;
(3)打开编辑输入窗口。
有两种方法:
一是在光标处直接键入所需的值,在键入的同时屏幕上就会自动弹出编辑输入窗口。
二是用Alt-F10键激活寄存器区局部菜单,选择其中的“Change”命令,屏幕上也会弹出编辑输入窗口。
(4)在编辑输入框中键入所需的值,然后回车,这个新的值就会取代原来该寄存器的内容。
[返回]
5. 在TD环境下修改某个标志位内容,怎样操作?
答:
(1)用Tab键选择标志区为当前区域;
(2)用方向键把光标移到要修改的标志位上;
(3)按回车键或空格键即可使标志位的值在0、1之间变化。
[返回]
6. 指定程序的起始执行地址怎样操作?
答:
方法一:
(1)用Tab键选择代码区为当前区域;
(2)用Alt-F10键激活代码区局部菜单,选择局部菜单中的“NewCS:
IP”命令。
方法二:
(1)用Tab键选择寄存器区为当前区域;
(2)用方向键把光标移到CS寄存器上,输入程序起始地址的段地址。
(3)用方向键把光标移到IP寄存器上,输入程序起始地址的偏移量。
[返回]
7. 在TD环境下怎样单步跟踪程序的执行?
答:
(1)用上述第6条中的方法首先指定程序的起始执行地址;
(2)按F7或F8键,每次将只执行一条指令。
注:
若当前执行的指令是CALL指令,则F7将跟踪进入被调用的子程序,而F8则把CALL指令及其调用的子程序当作一条完整的指令,要执行完子程序才停在CALL指令的下一条指令上。
[返回]
8. 在TD环境中,若只执行程序的某一部分指令,怎样处理?
答:
方法一:
用设置断点的方法。
(1)用上述第6条中的方法首先指定程序的起始执行地址;
(2)用方向键把光标移到要执行的程序段的最后一条指令的下一条指令的起始处(注意,不能移到最后一条指令上,否则最后一条指令将不会被执行),按F2设置断点。
也可按Alt-F2键,然后在弹出的输入窗口中输入断点地址。
(3)按F9键执行,程序将会停在所设置的断点处。
方法二:
用“运行程序到光标处”的方法。
(1)用上述第6条中的方法首先指定程序的起始执行地址;
(2)用方向键把光标移到要执行的程序段的最后一条指令的下一条指令上(注意,同方法一)。
(3)按F4键执行程序,程序将会执行到光标处停下。
方法三:
用“执行到指定位置”的方法。
(1)用上述第6条中的方法首先指定程序的起始执行地址;
(2)按Alt-F9,在弹出的输入窗口中输入要停止的地址(即要在哪条指令起始处暂停,就输入哪条指令的地址),按回车,程序将会执行到指定位置处暂停。
[返回]
9. 被调试程序的显示输出看不见怎么办?
答:
在TD环境下按Alt-F5键。
[返回]
10. 用MASM编译时产生警告错误会影响结果吗?
答:
会。
警告错误是指仍然生成目标代码,并非是指目标代码是正确的。
[返回]
11. 在WIN2000和WINDOWSXP环境中可以使用命令行方式的EDIT编辑器和调试程序DEBUG吗?
为什么点击该程序时会出现:
IncorrectDOSversion的错误信息?
答:
EDIT和DEBUG属于系统命令程序文件,运行前要核对版本号,WIN98/2000/XP有各自配套的系统命令文件,使用上述两个软件时必须注意版本匹配。
WIN98的命令文件放置在WINDOWS(或WIN98)文件夹下的COMMAND子文件夹中;WIN2000/XP的系统命令文件路径一般为:
WINDOWS\SYSTEM32或WINNT\SYSTEM32。
[返回]
12. 若使用DEBUG调试运行程序,如何装入程序?
答:
在命令行界面输入:
DEBUG ABX.EXE或双击DEBUG图标,之后在DEBUG窗口中输入:
n ABC.EXE/L100两条命令;运行程序即被载入。
[返回]
13. 在汇编语言源程序中怎样加入中文注释?
答:
用记事本或C++编辑器编辑源程序。
但须注意中英文切换,源程序中必须使用英文标点符号。
[返回]
14. 用记事本工具编辑源程序,主名为123_ABCDEF.ASM,为什么编译程序MASM报告找不到该文件?
答:
MASM遵循MS-DOS的命名原则,即文件主名最长为8个字符,上述文件主名超过了规定。
[返回]
15. 用记事本工具编辑源程序,取名为123.ASM,为什么编译程序MASM报告找不到该文件?
答:
出现此种情况,往往123.ASM并非文件名的全部,其最后的扩展名仍是.TXT,解决的办法是:
点击“我的电脑”或“资源管理器”在“查看”或“工具”菜单中选择“文件夹选项”,选择“查看”选项卡,将其中的“隐藏已知文件类型的扩展名”选项取消,可显示全部文件名,再为文件重新命名。
[返回]
16. 已在程序中设有如下定义:
STACK SEGMENT/DB 200 DUP(0)/STACK ENDS/为什么LINK仍然警告:
no stack segment?
答:
将段定义修改为:
STACK SEGMENT STACK;后面的STACK项是组合类型,即不再出现警告信息。
[返回]
17. 使用DEBUG调试程序,如何设置断点?
答:
例如,在DEBUG命令窗口中输入:
G=100,0150;表示从代码段偏移地址100H执行到150H处中断,届时可通过各寄存器及存储器察看程序的中间结果。
[返回]
18. 用TD调试一个显示字符串的程序,当单步运行至:
/MOV AL,09/INT 21H/语句后,程序似乎变得冗长难耐,是什么原因?
答:
在INT 21H处单步运行,即进入了DOS系统调用中断程序服务程序,其中包含了从0~62H个功能子程序,用参数AH区分。
9号功能只是其中一个分支,内中还要有输入输出底层处理。
运行至此,应该将TD窗口的光标置于INT下一条语句前,按F4键,即以光标所在处为断点,就可自动执行完该调用程序。
[返回]
实验一熟悉PC机的使用和调试汇编程序的方法
一.实验目的:
1.掌握汇编程序由编辑、编译、链接到调试的全过程。
2.通过汇编调试工具加深对机器指令执行过程的了解。
二.实验要求:
1. 了解PC机的系统类型和基本配置,熟悉PC机DOS下的基本操作命令。
2. 掌握使用PE2(或使用SIDEKICH(SK),edit)等编辑器对汇编语言源程序(扩展名.ASM)的编辑操作。
3. 学会用宏汇编程序MASM(或TASM)对汇编语言源程序进行汇编和使用连接程序LINK(或TLINK)对.OBJ文件链接生成.EXE文件。
4. 学会用汇编调试工具软件TD(或DEBUG)对.EXE文件进行调试及执行程序的方法。
5. 利用TD(或DEBUG)加深对机器指令的了解。
6. 了解汇编帮助软件NG的使用方法。
三.实验仪器:
PC机
四.实验步骤:
1.开机:
开机后有两种状态,即进入DOS操作系统或WINDOWS操作系统,下面分别介绍进入后实验步骤:
DOS操作系统:
打开机器上的开关,这时屏幕上显示">"提示符即进入DOS工作状态。
要求:
每个同学使用自己的学号或其它有特征的字符串建立自己的子目录,建立方法见<>。
开机后,若出现系统崩溃(称"死机")现象,一般使用热启动(CTRL-ALT-DEL键)或复位键重新启动。
WINDOWS操作系统
开机后进入WINDOWS环境,选择MS-DOS方式的图标,连击鼠标的左键,会进入DOS环境,一般地进入的工作目录是D:
\USER,(如果工作目录不是D:
\USER,可以通过对MS-DOS方式的属性修改完成,具体方法是,在WINDOWS环境下,光标移至MS-DOS方式图标,击右键,会弹出一菜单,选择属性栏,下图所示:
然后选择程序,会显示如下窗口:
注意:
将工作目录修改为D:
\USER.
2.NG(汇编帮助软件)和SK(编辑软件)的启动。
NG的启动:
在DOS提示符下键入NG,将NG驻留到内存,用户可以随时调出(具体使用方法见<>。
SK的启动(若使用SK编辑器):
在DOS提示符下键入SK,将SK驻留到内存,用户可随时调出(具体使用方法见<>),该软件适合较短程序的编辑和调试。
3.编辑、编译、链接和调试汇编语言程序过程。
A建立汇编语言程序
一使用PE2建立汇编语言程序
在DOS提示符下使用PE2编辑器输入用户汇编语言程序(扩展名为.ASM)。
>PE2文件名.ASM(回车)
二使用SK建立汇编语言程序
使用SK2热键启动SK
编辑命令见《PE2的使用方法》和《SK的使用方法》。
三使用EDIT建立汇编程序
>edit文件名.asm(回车)
B汇编程序生成目标程序
经过编辑命令建立的汇编语言源程序使用汇编程序编译成目标程序。
一使用MASM宏汇编进行编译
>MASM文件名
在汇编程序调入后,先显示版本号,然后出现第一行提示,
Objectfilename[源文件名.OBJ]:
;默认该文件名回车。
SourceListing[NUL.LST]:
源文件名或其他;输入文件名建立可打印文件。
CrossReference[NUL.CRF]:
源文件名或其他;回车。
WarningErrors
severeErrors
如果汇编过程中发现源程序有错误,由以上两种错误类型分别列出。
此时可分析错误原因,返回编辑程序修改源程序。
汇编程序出错信息见《汇编程序出错信息表》,注意出错的类型及出错的源文件对应行。
若不需要产生.LST和.CRF文件,可在>下加";"
>MASM文件名;
二使用TASM进行编译
例如:
编译A.ASM文件。
>TASMA
TurboAssemblerVersion2.5Copyright(c)1988,1991BorlandInternational
Assemblingfile:
a.ASM
Errormessages:
None
Warningmessages:
None
Passes:
1
Remainingmemory:
162k
可按要求填加必要的选择。
例如若需要在TD中跟踪源文件调试,可使用/zi选择(应注意选择项英文的大小写):
>TASM/ziA
若要生成列表文件,可用如下操作:
>TASMA,,A.LST
TASM的选择项如下(可用/H显示):
Syntax:
TASM[options]source[,object][,listing][,xref]
/a,/sAlphabeticorSource-codesegmentordering
/cGeneratecross-referenceinlisting
/dSYM[=VAL]DefinesymbolSYM=0,or=valueVAL
/e,/rEmulatedorRealfloating-pointinstructions
/h,/?
Displaythishelpscreen
/iPATHSearchPATHforincludefiles
/jCMDJaminanassemblerdirectiveCMD(eg./jIDEAL)
/kh#Hashtablecapacity#symbols
/l,/laGeneratelisting:
l=normallisting,la=expandedlisting
/ml,/mx,/muCasesensitivityonsymbols:
ml=all,mx=globals,mu=none
/mv#Setmaximumvalidlengthforsymbols
/m#Allow#multiplepassestoresolveforwardreferences
/nSuppresssymboltablesinlisting
/o,/opGenerateoverlayobjectcode,PharLap-style32-bitfixups
/pCheckforcodesegmentoverridesinprotectedmode
/qSuppressOBJrecordsnotneededforlinking
/tSuppressmessagesifsuccessfulassembly
/w0,/w1,/w2Setwarninglevel:
w0=none,w1=w2=warningson
/w-xxx,/w+xxxDisable(-)orenable(+)warningxxx
/xIncludefalseconditionalsinlisting
/zDisplaysourcelinewitherrormessage
/zi,/zdDebuginfo:
zi=full,zd=linenumbersonly
4.链接程序生成可执行文件
由汇编后建立的目标码文件,必须经过链接后才能生成可执行的命令文件。
一使用LINK完成连接
>LINK文件名;回车后调入链接程序,此时屏幕显示。
RunFile[文件名.EXE]:
;回车默认该文件名。
ListFile[NUL.MAP]:
;
Libraries[.LIB]:
;回车。
Warning:
;提示错误。
如果有错误,返回编辑程序重新修改源程序。
若要生成.COM文件,则用EXE2BIN实现:
>EXE2BINA.EXEA.COM
二使用TLINK完成连接
例如:
链接A文件。
>TLINKA
TurboLinkVersion4.0Copyright(c)1991BorlandInternational
可按要求填加必要的选择。
例如若需要在Debug中跟踪源文件调试,应使用/V选择(应注意选择项英文的大小写):
>TLINK/vA
若要生成COM文件,可使用/T