汇编语言实验指导书.docx
- 文档编号:18496253
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:101
- 大小:41.92KB
汇编语言实验指导书.docx
《汇编语言实验指导书.docx》由会员分享,可在线阅读,更多相关《汇编语言实验指导书.docx(101页珍藏版)》请在冰点文库上搜索。
汇编语言实验指导书
汇编语言实验指导书
王勇刘辉
上海电力学院计算机系
二00六年四月
目录
实验一DEBUG命令实验1
实验二字符串传递实验7
实验三循环程序实验15
实验四多重循环实验21
实验五分支程序实验28
实验六子程序参数传递实验34
实验七子程序嵌套实验37
实验八中断处理实验42
实验九BIOS中断实验46
实验十建立文件实验50
实验十一读文件实验55
实验十二综合性实验60
实验一DEBUG命令实验
一.实验目的:
掌握DEBUG的基本命令及其功能
二.实验内容:
DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1、DEBUG程序的启动
DEBUG的命令格式:
[drive:
][path]DEBUG[d:
][p][filename][.ext][param...]
其中:
drive:
是指定DEBUG文件的磁盘驱动器标识符,DEBUG是外部DOS命令,所以必须把它从磁盘读入内存。
若未指定,DOS将使用当前默认磁盘驱动器。
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提示符下,可键入命令,包含文件名:
C>debugname.exe
段寄存器DS和ES指向PSP。
寄存器BX和CX含有程序长度。
2、DEBUG的主要命令
(1)汇编命令A,格式为:
-A[地址]
该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
例如:
-a
136B:
0100movax,100
136B:
0103movbx,200
136B:
0106movcx,300136B:
0109movdx,400
136B:
010C
-
(2)反汇编命令U,有两种格式:
1)-U[地址]
该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
例如:
-u
13C9:
00001EPUSHDS
13C9:
00012BC0SUBAX,AX
13C9:
000350PUSHAX
13C9:
0004B8C313MOVAX,13C3
13C9:
00078ED8MOVDS,AX
13C9:
0009B8C613MOVAX,13C6
13C9:
000C8EC0MOVES,AX
13C9:
000E8D360000LEASI,[0000]
13C9:
00128D3E0000LEADI,[0000]
13C9:
0016FCCLD
13C9:
0017B92800MOVCX,0028
13C9:
001AF3REPZ
13C9:
001BA4MOVSB
13C9:
001CCBRETF
13C9:
001D0000ADD[BX+SI],AL
13C9:
001F0000ADD[BX+SI],AL
2)-U范围
该命令对指定范围的内存单元进行反汇编,
例如:
-u13c9:
000e001b
13C9:
000E8D360000LEASI,[0000]
13C9:
00128D3E0000LEADI,[0000]
13C9:
0016FCCLD
13C9:
0017B92800MOVCX,0028
13C9:
001AF3REPZ
13C9:
001BA4MOVSB
-
(3)运行命令G,格式为:
-G[=地址1][地址2[地址3。
。
。
]]
其中地址1规定了运行起始地址,后面的若干地址均为断点地址。
例如:
-g1c
AX=13C6BX=0000CX=0000DX=0000SP=FFFCBP=0000SI=0028DI=0028
DS=13C3ES=13C6SS=13C3CS=13C9IP=001CNVUPEIPLZRNAPENC
13C9:
001CCBRETF
-
(4)追踪命令T,有两种格式:
1)逐条指令追踪:
-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
-t
AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC
13C9:
00012BC0SUBAX,AX
-
2)多条指令追踪:
-T[=地址][值]
该命令从指定地址起执行n条命令后停下来,n由[值]确定。
-t3
AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC
13C9:
00012BC0SUBAX,AX
AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0003NVUPEIPLZRNAPENC
13C9:
000350PUSHAX
AX=0000BX=0000CX=007DDX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=13B3ES=13B3SS=13C3CS=13C9IP=0004NVUPEIPLZRNAPENC
13C9:
0004B8C313MOVAX,13C3
(5)显示内存单元内容的命令D,格式为:
-D[地址]或-D[范围]
-dds:
0
13C3:
00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa
13C3:
00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa
13C3:
00206161616161616161-0000000000000000aaaaaaaa........
13C3:
00306161616161616161-6161616161616161aaaaaaaaaaaaaaaa
13C3:
00406161616161616161-6161616161616161aaaaaaaaaaaaaaaa
13C3:
00506161616161616161-0000000000000000aaaaaaaa........
13C3:
00601E2BC050B8C3138E-D8B8C6138EC08D36.+.P...........6
13C3:
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、链接:
c:
\link.obj
3、调试:
c:
\debug.exe
4、运行:
c:
\.exe
1)先用命令U反汇编整个程序,查看每条指令的物理地址,
1、编译:
C:
\masm430.asm
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.
Sourcelisting[NUL.LST]:
Cross-reference[NUL.CRF]:
50792+450136Bytessymbolspacefree0WarningErrors
0SevereErrors
2、链接:
c:
\link430.obj
Microsoft(R)OverlayLinkerVersion3.60
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
RunFile[430.EXE]:
ListFile[NUL.MAP]:
Libraries[.LIB]:
LINK:
warningL4021:
nostacksegment
3、调试:
c:
\debug430.exe
1)、先用命令U反汇编整个程序,查看每条指令的物理地址,其显示内容的含义为:
内存地址指令代码反汇编的程序代码
-u0B75:
00001EPUSHDS
0B75:
00012BC0SUBAX,AX
0B75:
000350PUSHAX
0B75:
0004B86F0BMOVAX,0B6F;数据段的首地址ds0b6f
0B75:
00078ED8MOVDS,AX
0B75:
0009B8720BMOVAX,0B72;附加段的首地址es0b72
0B75:
000C8EC0MOVES,AX
0B75:
000E8D360000LEASI,[0000]
0B75:
00128D3E0000LEADI,[0000]
0B75:
0016FCCLD
0B75:
0017B92800MOVCX,0028
0B75:
001AF3REPZ
0B75:
001BA4MOVSB
0B75:
001CB402MOVAH,02;为了在DOS格式下,程序运行完毕后可以看到运行结果,特地增加了一个输入语句
0B75:
001ECD21INT21
-u
0B75:
0020CBRETF
2)、从上一步结果中找到数据段的首地址0B6F,附加段的首地址0B72,查看里面存储的数据,数据段从首地址0B6F开始40个字节中存储了40个字符a:
-d0b6f:
0000
0B6F:
00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa
0B6F:
00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa
0B6F:
00206161616161616161-0000000000000000aaaaaaaa........
0B6F:
00300000000000000000-0000000000000000................
0B6F:
00400000000000000000-0000000000000000................
0B6F:
00500000000000000000-0000000000000000................
0B6F:
00601E2BC050B86F0B8E-D8B8720B8EC08D36.+.P.o....r....6
0B6F:
007000008D3E0000FCB9-2800F3A4B402CD21...>....(......!
-d0b72:
0000;附加段从首地址0B72开始40个字节中存储了40个空字符
0B72:
00000000000000000000-0000000000000000................
0B72:
00100000000000000000-0000000000000000................
0B72:
00200000000000000000-0000000000000000................
0B72:
00301E2BC050B86F0B8E-D8B8720B8EC08D36.+.P.o....r....6
0B72:
004000008D3E0000FCB9-2800F3A4B402CD21...>....(......!
0B72:
0050CB00000000000000-0000000000000000................
0B72:
00606161616161616161-6161616161616161aaaaaaaaaaaaaaaa
0B72:
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
0B75:
00078ED8MOVDS,AX
-T
AX=0B6FBX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B5FSS=0B6FCS=0B75IP=0009NVUPEIPLZRNAPENC
0B75:
0009B8720BMOVAX,0B72
-T
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B5FSS=0B6FCS=0B75IP=000CNVUPEIPLZRNAPENC
0B75:
000C8EC0MOVES,AX
-T
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=000ENVUPEIPLZRNAPENC
0B75:
000E8D360000LEASI,[0000]DS:
0000=6161
-T
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=0012NVUPEIPLZRNAPENC
0B75:
00128D3E0000LEADI,[0000]DS:
0000=6161
-T
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=0016NVUPEIPLZRNAPENC
0B75:
0016FCCLD
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=0016NVUPEIPLZRNAPENC
0B75:
0016FCCLD
-t
AX=0B72BX=0000CX=0111DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=0017NVUPEIPLZRNAPENC
0B75:
0017B92800MOVCX,0028
-t
AX=0B72BX=0000CX=0028DX=0000SP=FFFCBP=0000SI=0000DI=0000
DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC
0B75:
001AF3REPZ
0B75:
001BA4MOVSB
-t
AX=0B72BX=0000CX=0027DX=0000SP=FFFCBP=0000SI=0001DI=0001
DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC
0B75:
001AF3REPZ
0B75:
001BA4MOVSB
-t
AX=0B72BX=0000CX=0026DX=0000SP=FFFCBP=0000SI=0002DI=0002
DS=0B6FES=0B72SS=0B6FCS=0B75IP=001ANVUPEIPLZRNAPENC
0B75:
001AF3REPZ
0B75:
001BA4MOVSB
-t
AX=0B72BX=0000CX=0025DX=0000SP=FFFCBP=0000SI=0003DI=0003
D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 指导书