汇编语言实验指导书Word下载.docx
《汇编语言实验指导书Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言实验指导书Word下载.docx(75页珍藏版)》请在冰豆网上搜索。
path:
是DOS查找DEBUG文件的一个子目录串表示的路径。
若未指定,DOS将使用当前工作目录。
d:
是DEBUG将要调试的文件所在的磁盘驱动器。
p:
是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。
filename[.ext]是DEBUG将要调试的文件名。
param
是将被调试的程序(或文件)的命令行参数。
例如:
在DOS提示符下,可键入命令:
C>
debug
DEBUG所完成的初始化动作,假定文件名没有,启动DEBUG:
段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。
指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。
堆栈指针SP置为段末或COMMAND.COM暂驻部分的结束地址(其中较小的那个地址)。
其余通用寄存器均置为0,标志寄存器置为下述状态。
NV
UP
EI
PL
NE
NA
PO
NC
如果在DOS提示符下,可键入命令,包含文件名:
debugname.exe
段寄存器DS和ES指向PSP。
寄存器BX和CX含有程序长度。
2、DEBUG的主要命令
(1)汇编命令A,格式为:
-A[地址]
该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
-a
136B:
0100movax,100
0103movbx,200
0106movcx,300136B:
0109movdx,400
010C
-
(2)反汇编命令U,有两种格式:
1)-U[地址]
该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
-u
13C9:
00001EPUSHDS
00012BC0SUBAX,AX
000350PUSHAX
0004B8C313MOVAX,13C3
00078ED8MOVDS,AX
0009B8C613MOVAX,13C6
000C8EC0MOVES,AX
000E8D360000LEASI,[0000]
00128D3E0000LEADI,[0000]
0016FCCLD
0017B92800MOVCX,0028
001AF3REPZ
001BA4MOVSB
001CCBRETF
001D0000ADD[BX+SI],AL
001F0000ADD[BX+SI],AL
2)-U范围
该命令对指定范围的内存单元进行反汇编,
-u13c9:
000e001b
(3)运行命令G,格式为:
-G[=地址1][地址2[地址3。
。
]]
其中地址1规定了运行起始地址,后面的若干地址均为断点地址。
-g1c
AX=13C6BX=0000CX=0000DX=0000SP=FFFCBP=0000SI=0028DI=0028
DS=13C3ES=13C6SS=13C3CS=13C9IP=001CNVUPEIPLZRNAPENC
(4)追踪命令T,有两种格式:
1)逐条指令追踪:
-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
-t
AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC
2)多条指令追踪:
-T[=地址][值]
该命令从指定地址起执行n条命令后停下来,n由[值]确定。
-t3
DS=13B3ES=13B3SS=13C3CS=13C9IP=0003NVUPEIPLZRNAPENC
AX=0000BX=0000CX=007DDX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0004NVUPEIPLZRNAPENC
(5)显示内存单元内容的命令D,格式为:
-D[地址]或-D[范围]
-dds:
13C3:
00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00206161616161616161-0000000000000000aaaaaaaa........
00306161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00406161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00506161616161616161-0000000000000000aaaaaaaa........
00601E2BC050B8C3138E-D8B8C6138EC08D36.+.P...........6
007000008D3E0000FCB9-2800F3A4CB000000...>
....(.......
(6)修改内存单元内容的命令E,它有两种格式:
1)用给定的内容代替指定范围的单元内容:
-E地址内容表
例如:
-E2000:
0100F3“XYZ”8D
其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:
0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。
2)逐个单元相继地修改:
-E地址
例如:
-E100:
18E4:
010089.78
此命令是将原100号单元的内容89改为78。
78是程序员键入的。
(7)检查和修改寄存器内容的命令R,它有三种方式:
1)显示CPU内部所有寄存器内容和标志位状态;
格式为:
-R
R命令显示中标志位状态的含义如下表所示:
标志名
置位
复位
溢出Overflow(是/否)
OV
NV
方向Direction(减量/增量)
DN
UP
中断Interrupt(允许/屏蔽)
EI
DI
符号Sign(负/正)
NG
PL
零Zero(是/否)
ZR
NZ
辅助进位AuxiliaryCarry(是/否)
AC
NA
奇偶Parity(偶/奇)
PE
PO
进位Carry(是/否)
CY
NC
2)显示和修改某个指定寄存器内容,格式为:
-R寄存器名
例如打入:
-RAX
系统将响应如下:
AXFIF4
:
表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:
-RBX
BX0369
:
059F
则BX内容由0369改为059F
3)显示和修改标志位状态,命令格式为:
-RF
系统将给出响应,如
OVDNEINGZRACPECY-
这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。
如
OVDNEINGZRACPECY-PONZDINV
(8)命名命令N,格式为:
-N文件名
此命令将文件名格式化在CS:
5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。
(9)装入命令L,它有两种功能:
1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:
-L地址驱动器扇区号扇区数
2)装入指定文件,格式为:
-L[地址]
此命令装入已在CS:
5CH中格式化的文件控制块所指定的文件。
在用L命令前,BX和CX中应包含所读文件的字节数。
(10)写命令W,有两种格式:
1)把数据写入磁盘的指定扇区:
-W地址驱动器扇区号扇区数
2)把数据写入指定文件中:
-W[地址]
此命令把指定内存区域中的数据写入由CS:
5CH处的FCB所规定的文件中。
在用W命令前,BX和CX中应包含要写入文件的字节数。
(11)退出DEBUG命令Q,该命令格式为
Q
它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。
三.实验报告:
写出在DEBUG状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
实验二字符串传递实验
掌握字符串的传递过程
P146例4.30把40个字母a的字符串从源缓冲区传送到目的缓冲区
DOS命令行格式下,按F5键可以输出上次输入的命令
把DOS命令行格式下运行结果直接写入文件,用重定向符命令>
>
C:
\MASM58.ASMMORE>
G:
\MASM\RESULT\58.DOC
1、编译:
c:
\masm.asm
2、链接:
\link.obj
3、调试:
\debug.exe
4、运行:
\.exe
1)先用命令U反汇编整个程序,查看每条指令的物理地址,
C:
\masm430.asm
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50792+450136Bytessymbolspacefree0WarningErrors
0SevereErrors
\link430.obj
Microsoft(R)OverlayLinkerVersion3.60
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
RunFile[430.EXE]:
ListFile[NUL.MAP]:
Libraries[.LIB]:
LINK:
warningL4021:
nostacksegment
\debug430.exe
1)、先用命令U反汇编整个程序,查看每条指令的物理地址,其显示内容的含义为:
内存地址指令代码反汇编的程序代码
-u0B75:
0B75:
0004B86F0BMOVAX,0B6F;
数据段的首地址ds0b6f
0009B8720BMOVAX,0B72;
附加段的首地址es0b72
001CB402MOVAH,02;
为了在DOS格式下,程序运行完毕后可以看到运行结果,特地增加了一个输入语句
001ECD21INT21
0020CBRETF
2)、从上一步结果中找到数据段的首地址0B6F,附加段的首地址0B72,查看里面存储的数据,数据段从首地址0B6F开始40个字节中存储了40个字符a:
-d0b6f:
0000
0B6F:
00300000000000000000-0000000000000000................
00400000000000000000-0000000000000000................
00500000000000000000-0000000000000000................
00601E2BC050B86F0B8E-D8B8720B8EC08D36.+.P.o....r....6
007000008D3E0000FCB9-2800F3A4B402CD21...>
....(......!
-d0b72:
0000;
附加段从首地址0B72开始40个字节中存储了40个空字符
0B72:
00000000000000000000-0000000000000000................
00100000000000000000-0000000000000000................
00200000000000000000-0000000000000000................
00301E2BC050B86F0B8E-D8B8720B8EC08D36.+.P.o....r....6
004000008D3E0000FCB9-2800F3A4B402CD21...>
0050CB00000000000000-0000000000000000................
00606161616161616161-6161616161616161aaaaaaaaaaaaaaaa
00706161616161616161-6161616161616161aaaaaaaaaaaaaaaa
3)、从反汇编地址中找到把数据段的首地址0B6F传给寄存器AX的指令地址0B75:
0007,用G命令执行到地址0007,然后用T命令单步执行,看寄存器AX,DS,ES的内容的变化
-G0007
AX=0B6FBX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B5FES=0B5FSS=0B6FCS=0B75IP=0007NVUPEIPLZRNAPENC
-T
AX=0B6FBX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B5FSS=0B6FCS=0B75IP=0009NVUPEIPLZRNAPENC
0009B8720BMOVAX,0B72
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B5FSS=0B6FCS=0B75IP=000CNVUPEIPLZRNAPENC
DS=0B6FES=0B72SS=0B6FCS=0B75IP=000ENVUPEIPLZRNAPENC
000E8D360000LEASI,[0000]DS:
0000=6161
DS=0B6FES=0B72SS=0B6FCS=0B75IP=0012NVUPEIPLZRNAPENC
00128D3E0000LEADI,[0000]DS:
DS=0B6FES=0B72SS=0B6FCS=0B75IP=0016NVUPEIPLZRNAPENC
4)、让程序执行到传送准备工作完成后的地址0B75:
0016FCCLD,查看源偏移地址SI和目标偏移地址DI的值,以及移动次数存放的寄存器CX,然后用T命令单步执行,看寄存器源地址(DS:
DI)和目标地址(ES:
SI)的内容的变化
-g0016
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=0017NVUPEIPLZRNAPENC
AX=0B72BX=0000CX=0028DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC
AX=0B72BX=0000CX=0027DX=0000SP=FFFCBP=0000SI=0001DI=0001
AX=0B72BX=0000CX=0026DX=0000SP=FFFCBP=0000SI=0002DI=0002
AX=0B72BX=0000CX=0025DX=0000SP=FFFCBP=0000SI=0003DI=0003
DS=0B6FES=0