《数据库原理》.docx
- 文档编号:9800920
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:29
- 大小:27.04KB
《数据库原理》.docx
《《数据库原理》.docx》由会员分享,可在线阅读,更多相关《《数据库原理》.docx(29页珍藏版)》请在冰点文库上搜索。
《数据库原理》
《汇编语言程序设计》
实验指导书
目录
实验一:
汇编环境与DEBUG调试2
实验二:
8086汇编语言顺序程序设计8
实验三:
8086汇编语言分支程序设计11
实验四:
8086汇编语言循环程序设计13
实验五:
8086汇编语言子程序程序设计15
实验六:
段的组合与定位17
实验七:
8086汇编语言中断程序设计19
实验八:
磁盘文件系统设计21
实验一:
汇编环境与DEBUG调试
目的与要求
熟悉汇编环境与汇编源程序的调试,重点掌握常用DEBUG命令的用法
实验内容
1、熟悉汇编的编程环境
2、DEBUG调试
3、内存操作:
4、程序文件操作
实验步骤:
一、熟悉汇编的编程环境
1.汇编语言源程序的建立:
可以使用任何文本编辑器建立汇编源程序文件,如:
TC、EDIT等。
但建立的文件扩展名建议为.asm,下面的源程序功能用于在屏幕上输出字符串“hello,world!
”,我们通过此源程序的运行过程了解汇编的编程环境。
DATASEGMENT
BUFDB“hello,world!
$”
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEA DX,BUF
MOVAX,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
在DOS提示符下键入以下编辑器命令,如:
C:
\MASM>EDIT 或TC
然后在编辑器的窗口中通过键盘输入以上源程序。
并保存为文件abc.asm.后返回到DOS提示符下。
2.将源程序文件汇编成目标程序文件:
汇编功能可以使用Microsoft的MASM进行,微软的汇编程序有多个版本,但使用方法大致相同,本实验将使用MASM 5.0进行汇编。
一般情况下,MASM汇编程序的主要功能有以下3点:
(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,可以采用宏汇编程序MASM对源程序文件进行汇编,方法是在DOS提示符下键入键入以下命令:
C:
\MASM>MASM abc;
此命令行后的;用于屏蔽MASM的参数选择提问,而使用其默认的参数,对于大多数汇编源程序,MASM的默认参数选项是足够的,因此在此实验中将不介绍其参数选项的功能,有兴趣的同学可以去掉最后的分号进行汇编,并了解其细节。
汇编源程序若有错误,则汇编程序会给出错误信息,并在每条信息前有一数字N,此数字标识源程序中第N行检测到错误。
汇编过程的错误分警告错误(WarningErrors)和严重错误(SevereErrors)两种。
其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。
这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。
汇编成功后,将得到一个新的文件abc.obj,此文件称为目标程序文件。
3.用连接程序生成可执行程序文件:
经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE)。
连接过程使用以下命令进行:
C:
\MASM>LINK abc;
此命令行后的;功能同上面的MASM。
此命令运行成功后,就会得到最终的可执行文件abc.exe。
如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。
连接以后,便可以产生可执行程序文件(.EXE文件)。
4.程序的执行
当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。
C:
\MASM>abc
运行此命令后,我们会在屏幕上看到程序的输出结果:
hello,world!
。
如果此时我们看到的结果同程序预期的结果不一致,就说明程序存在逻辑错误,这时就必须使用相应的调试程序进行调试,常用的调试程序有DEBUG与TurboDebugger等,此实验中,将只介绍DEBUG常用命令的使用方法。
二、DEBUG调试
DEBUG的命令格式:
DEBUG[drive:
][path][filename][.ext][param...]
其中:
drive:
是DEBUG将要调试的文件所在的磁盘驱动器。
path:
是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。
filename[.ext]是DEBUG将要调试的文件名。
param是将被调试的程序(或文件)的命令行参数。
注:
1、如果DEBUG命令行含有文件名,段寄存器DS和ES指向PSP。
寄存器BX和CX含有程序长度。
2、在DEBUG中所有输入与显示的数值数据均为十六进制数,且其后不加H。
如果要调试上面的程序ABC.EXE,可在DOS提示符下输入:
C:
\MASM>DEBUGABC.EXE
-
此时的-为DEBUG的命令提示符,在此符号后可能输入许多DEBUG的调试命令。
DEBUG所有的命令都是单字符命令,格式为:
命令名[参数]。
在此实验中,重点介绍以下命令的功能与使用:
1.显示存储单元的命令D,格式为:
-D[address]或-D[range]
例如,按指定范围显示存储单元内容的方法为:
-D100120
067C:
0100C7D70D0A32333334-D5C5B4C63010420C....2334....0.B……….
067C:
01100341424344454647-48494A4B4C4D4E4F.ABCDEFGHIJKLMNO
067C:
012041 A
说明:
左边是用十六进制表示的存储单元地址,0100至0120是DEBUG要显示的存储单元段内偏移地址,而067C是当前数据段的段首址。
中间是每个字节存储单元的内容。
右边表示每个字节可以显示的字符,“.”表示是不可显示的字符。
D命令一行显示16个字节单元的内容,前8个字节与后8个字节之间用-连接。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的80个字节的内容。
如果完全没有指定地址,则显示上一个D命令的最后一个单元的内容。
如:
-D 显示下一片单元的内容
-D ES:
1010 显示从ES段内偏移地址1010H开始的单元内容
-D 10L20 显示DS段内从偏移地址10H开始的连接20H个字节单元的内容
2.修改存储单元内容的命令E:
E命令有两种格式如下:
第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
命令格式为:
-Eaddress[list]
例如,-EDS:
100F3'XYZ'8D
其中F3,‘X’,‘Y’,‘Z’和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS:
0100到0104的原先的容。
第二种格式则是采用逐个单元相继修改的方法。
命令格式为:
-Eaddress
例如,-ECS:
100
则可能显示为:
18E4:
010089.
如果需要把该单元的内容修改为78,则可以直接键入78,再按空格键可接着显示下一个单元的内容,这样可以不断修改相继单元的内容,直到Enter键结束该命令为止。
若要反向修改单元内容,则按减号-。
3.检查和修改寄存器内容的命令R:
R命令有三种格式:
1)显示CPU内所有寄存器内容和标志位状态,其格式为:
-R
AX=0000BX=0000CX=010ADX=0000SP=FFFEBP=0000SI=0000DI=0000
DS=18E4ES=18E4SS=18E4CS=18E4IP=0100NVUPDIPLNZNAPONC
18E4:
0100C70604023801MOVWORDPTR[0204],0138DS:
0204=0000
其中:
第一行显示8086内通用寄存器的内容,第二行显示段寄存器及标志寄存器的内容,第三行显示当前IP指向的将要被CPU执行的指令地址在18E4:
100处,其机器码为C70604023801,对应的汇编指令为MOVWORDPTR[0204],0138
2)显示和修改某个寄存器内容,其格式为:
-Rregister_name
例如,键入
-Rax
系统将响应如下:
AXF1F4
:
即AX寄存器的当前内容为F1F4,如不修改则按Enter键,否则,键入欲修改的内容如:
-Rbx
BX0369
:
059F
则把BX寄存器的当前内容修改为059F。
3)显示和修改标志位状态,命令格式为:
-RF
系统将响应,如:
OVDNEINGZRACPECY-
此时如不修改其内容可按Enter键,否则,建入欲修改的内容,如:
OVDNEINGZRACPECY-PONZDINV
即可,键入的顺序是任意的。
4.运行命令G:
G命令格式为:
-G[=address1][address2[address3...]]
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:
IP开始运行。
后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
5、跟踪命令T:
T命令有两种格式:
1)逐条指令跟踪
-T[=address]
从指定地址起执行一条指令后停下来,显示所有寄存器内空及标志位的值。
如未指定则从当前的CS:
IP开始执行。
2)多条指令跟踪
-T[=address][value]
从指定地址起执行n条指令后停下来,n由value指定。
6、汇编命令A:
A命令的格式为:
-A[address]
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
7、反汇编命令U:
U命令有两种格式:
1)从指定地址开始,反汇编32个字节,其格式为:
-U[address]
例如:
-U100
18E4:
0100C70604023801MOVWORDPTR[0204],0138
18E4:
0106C70606020002MOVWORDPTR[0206],0200
18E4:
010CC70608020202MOVWORDPTR[0208],0202
18E4:
0112BB0402MOVBX,0204
18E4:
0115E80200CALL011A
18E4:
0118CD20INT20
18E4:
011A50PUSHAX
18E4:
011B51PUSHCX
18E4:
011C56PUSHSI
18E4:
011D57PUSHDI
18E4:
011E8B37MOVSI,[BX]
如果地址被省略则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
2)对指定范围内的存储单元进行反汇编,格式为:
-U[range]
例如:
-U10010C
18E4:
0100C70604023801MOVWORDPTR[0204],0138
18E4:
0106C70606020002MOVWORDPTR[0206],0200
18E4:
010CC70608020202MOVWORDPTR[0208],0202
8.命名命令N:
N的格式为:
-Nfilespecs
命令把文件标识符filespecs格式化在文件控制块中,以便在其后用L或W命令把文件装入或存盘。
filespecs的格式可以是:
[d:
][path]filename[.ext]
例如:
-Nmyprog
9.装入命令L:
L命令的功能有两种,此实验只介绍其中一种功能:
装入指定文件。
其格式为:
-L[address]
此命令装入已在N命令中所指定的文件。
如未指定地址,则装入CS:
0100开始的存储区中。
10.写命令W:
W命令的功能有两种,此实验只介绍其中一种功能:
把数据写入指定的文件中。
其格式为:
-W[writeaddress]
此命令执行前要求先利用R命令在BX、CX(CX为低字,BX为高字)中存入程序段的长度(字节数),可以利用RBX和RCX命令。
此命令把指定的存储区中的数据写入由N命令所指定的文件中。
如未指定地址则数据从CS:
0100开始。
要写入文件的字节数应先放入BX和CX中。
11.退出DEBUG命令Q:
格式为:
-Q
它退出DEBUG,返回DOS。
本命令无存盘功能,如需存盘应先使用W命令。
三、内存操作:
1.进入DEBUG,执行命令:
-eds:
041"abc"4243后,可以修改数据段内的几个字节单元?
如何用D命令查看这些单元的内容?
这些内容对应的ASCII字符是什么?
2.可用什么命令查看从ds:
0开始的连续100个字节单元的内容?
3.若要将ds:
10,ds:
12,ds:
14三个存储单元的内容修改为41,则应怎样操作?
四、程序文件操作
1.进入DEBUG,输入A命令汇编以下语句:
-A
1479:
0100movdl,41
1479:
0102movah,2
1479:
0104int21
1479:
0106int20
1479:
0108
2.若要将上面的程序保存到当前路径中,并以命名,则应进行哪些操作,请详细给出每一步的命令行:
3.退出DEBUG回到DOS,输入disp回车后,此命令的运行结果是什么?
4.请用DEBUG命令查出上面四条语句对应的机器指令码:
5.此时cs:
0101地址的内容是什么?
可用什么命令将其修改为61?
6.运行命令:
-WCS:
100后,回到DOS下输入disp回车后,此时运行的结果是什么?
思考:
试编写同样功能的C语言程序,比较其编译后的EXE文件与的大小各是多少字节?
实验二:
8086汇编语言顺序程序设计
实验目的:
熟悉顺序程序设计过程。
实验内容:
1、掌握顺序程序设计方法。
2、学习数据传送及算术和逻辑运算指令的用法。
3、熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程。
实验步骤:
一.编程实现以下功能:
将两个32位十进制数相加,被加数和加数存放在DATA段内的N1与N2两个变量中,要求将相加结果送入N3变量中。
源程序如下所示,使用编辑器建立源程序文件LAB2.ASM。
DATA SEGMENT
N1 DD 12345678H
N2 DD 87654321H
N3 DD ?
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,WORD PTR N1
MOV DX,WORD PTR N1+2
MOV CX,WORD PTR N2
MOV BX,WORD PTR N2+2
ADD AX,CX
ADC DX,BX
MOV WORD PTR N3,AX
MOV WORD PTR N3+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START
使用相应的文本编辑器建立文件LAB2.asm,内容如上所示。
二.生成可执行文件:
1.汇编:
C:
\masm>masmlab2;
2.连接:
C:
\masm>linklab2;
三.运行及调试:
1.运行:
C:
\masm>debuglab2.exe
-U0 ;通过反汇编查找程序的断点
1425:
0000B82414MOVAX,1424
1425:
00038ED8MOVDS,AX
1425:
0005A10000MOVAX,[0000]
1425:
00088B160200MOVDX,[0002]
1425:
000C8B0E0400MOVCX,[0004]
1425:
00108B1E0600MOVBX,[0006]
1425:
001403C1ADDAX,CX
1425:
001613D3ADCDX,BX
1425:
0018A30800MOV[0008],AX
1425:
001B89160A00MOV[000A],DX
1425:
001FB44CMOVAH,4C;找到程序的断点为001FH
-T=02;加载数据段
-D0 ;查看原始数据是否正确,下划线上的数据就是N1与N2的值
1424:
00007856341221436587-0000000000000000xV4.!
Ce.........
1424:
0010B824148ED8A10000-8B1602008B0E0400.$..............
1424:
00208B1E060003C113D3-A3080089160A00B4................
-G=01F;运行程序至断点1F处
AX=9999BX=8765CX=4321DX=9999SP=0000BP=0000SI=0000DI=0000
DS=1424ES=1414SS=1424CS=1425IP=001FNVUPEINGNZNAPENC
1425:
001FB44CMOVAH,4C
-D0 ;查看程序运行结果,下划线上的数据就是相加的和
1424:
00007856341221436587-9999999900000000xV4.!
Ce.........
1424:
0010B824148ED8A10000-8B1602008B0E0400.$..............
1424:
00208B1E060003C113D3-A3080089160A00B4................
2.调试:
若要判断此程序对于其它32位数相加是否正确,则需要使用DEBUG进行程序调试。
例:
判断234B8074H+658A1D61H是否正确的方法如下:
-L ;重新加载可执行文件
-T=0 2 ;加载程序的数据段,以便修改N1与N2的值
-D0 ;查看数据段的内容
1424:
00007856341221436587-0000000000000000xV4.!
Ce.........
1424:
0010B824148ED8A10000-8B1602008B0E0400.$..............
1424:
00208B1E060003C113D3-A3080089160A00B4................
-E0 ;修改N1为234B8074H,N2为658A1D61H
1424:
000078.7456.8034.4B12.23 21.6143.1D65.8A87.65
-G 1F ;带断点运行,此处不能使用G=0 1F
AX=9DD5BX=658ACX=1D61DX=88D5SP=0000BP=0000SI=0000DI=0000
DS=1424ES=1414SS=1424CS=1425IP=001FOVUPEINGNZACPONC
1425:
001FB44CMOVAH,4C
-D0 ;查看运行结果,下划线上的数据就是相加的和
1424:
000074804B23611D8A65-D59DD58800000000t.K#a..e........
1424:
0010B824148ED8A10000-8B1602008B0E0400.$..............
1424:
00208B1E060003C113D3-A3080089160A00B4................
思考:
以上程序为什么不能在DOS提示符下运行,而一定要在DEBUG中通过命令查看结果?
实验三:
8086汇编语言分支程序设计
实验目的:
熟悉分支程序的调试方法。
实验内容:
编写一个程序,显示AL寄存器中的两位十六进制数
实验步骤:
一.编程实现在显示器上输出AL中的内容:
源程序如下所示,编辑下面的源程序到文件lab3.asm中:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH ;此处假设为3EH
MOVBL,AL
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H;显示高位ASCII码
MOVDL,BL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H;显示低位ASCII码
MOVAH,4CH
INT21H
CODEENDS;返回DOS
ENDSTART
使用相应的文本编辑器建立文件LAB3.asm,内容如上所示。
二.生成可执行文件:
1.汇编:
C:
\masm>masmlab3;
2.连接:
C:
\masm>linklab3;
三.运行及调试:
1.运行:
C:
\masm>debuglab3.exe
-U0 ;通过反汇编查找程序的断点
-T=02;加载数据段
-D0 ;查看原始数据是否正确
-G=0 XX;运行程序至断点XX处
-R ;查看程序运行结果
以上命令执行的细节可参照实验二中的说明。
2.调试:
修改AL的内容,判断此程序是否能正确显示其中的内容的方法。
例:
修改AL内容为9AH:
-L ;重新加载可执行文件
-A0 ;重新修改MOV AL,3EH指令
361E:
0000 MOV AL,9A
361E:
0002
-G=0 xx;带断点运行
-R ;查看程序运行结果
思考:
除了使用A命令修改程序代码外,还可以用什么方法修改AL中的内容?
实验四:
8086汇编语言循环程序设计
实验目
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库原理 数据库 原理