《汇编语言程序设计》实验指导书.docx
- 文档编号:5986456
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:23
- 大小:346.54KB
《汇编语言程序设计》实验指导书.docx
《《汇编语言程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》实验指导书.docx(23页珍藏版)》请在冰豆网上搜索。
《汇编语言程序设计》实验指导书
汇编语言程序设计实验指导书
(适用于计算机科学与技术专业)
信息科学与工程学院
信息技术实验中心
汇编语言上机环境及基本操作
实验目的
1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
实验内容
1.汇编语言源程序的建立
本例中给出的程序是实现字符串的显示,源程序如下:
DATASEGMENT
S1DB’HelloWorld’,0D,0A,’$’
DATAENDS
STACKSEGMENTPARASTACK
DB64DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAH,09H
MOVDX,OFFSETS1
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
键入以下命令:
C:
\>EDITABC.ASM
此时屏幕的显示状态如图1所示。
图1用EDIT编辑ABC.ASM程序窗口
程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件
一般情况下,MASM汇编程序的主要功能有以下3点:
(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,
输入命令:
C:
\>MASMABC.ASM
其操作过程如图2所示。
图2MASM宏汇编程序工作窗口
汇编过程的错误分警告错误(WarningErrors)和严重错误(SevereErrors)两种。
其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。
这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。
3.用连接程序生成可执行程序文件
经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE),输入如下命令:
C:
\>LINKABC.OBJ
连接过程如图3所示。
图3LINK连接程序工作窗口
上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。
连接以后,便可以产生可执行程序文件(.EXE文件)。
4.程序的执行
当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。
如:
C:
\>ABC
本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果。
我们可以采用调试程序DEBUG来进行检查,相关内容请参见实验二。
三、实例分析
下面通过一个汇编语言源程序的实际例子,来了解汇编语言源程序的建立、汇编、连接、运行的完整过程。
给出的程序是从键盘输入10个字符,然后以与键入相反的顺序将10个字符输出到显示屏幕上。
设定源程序名为STR.ASM。
1.用EDIT建立汇编语言源程序
在DOS状态下,调用EDIT编辑程序建立文件名为STR.ASM的汇编源程序,如图4所示。
STACKSEGMENTPARASTACK'STACK'
DW10DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVCX,10
MOVSP,20
LP1:
MOVAH,01H
INT21H
MOVAH,0
PUSHAX
LOOPLP1
MOVCX,10
LP2:
POPAX
MOVDL,AL
MOVAH,00H
INT21H
LOOPLP2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.用MASM汇编生成目标文件
源程序文件建立完毕后,调用宏汇编程序MASM对STR.ASM进行汇编,如图5所示。
图5用MASM汇编生成目标文件
3.用LINK进行连接生成可执行文件
汇编完毕,程序正确,则可调用LINK进行连接,以生成可执行文件STR.EXE,连接过程如图6所示。
图6用LINK连接生成可执行文件
4.程序的运行
在DOS状态下,直接键入可执行的程序文件名STR,然后从键盘输入“0123456789”10个数字,输入回车键后,计算机将10个数字倒序排列输出,即“9876543210”。
再次键入可执行的程序文件名STR,从键盘输入“abcdefghIj”10个字符,输入回车键后,计算机将10个字符倒序排列输出,即“jihgfedcba”。
运行过程及其结果如图7所示。
图7程序的运行状态及结果
实验一DEBUG调试程序的应用
实验目的:
1..学习使用DEBUG软件
2..利用DEBUG调试8088汇编程序
实验要求
1.实验内容,自行设计本实验的程序;
2.独立分析实验结果;
3.学会调试、测试程序。
实验仪器设计
计算机一台,masm软件
考核形式
1.实验预习回答提问占20%;
2.实验操作能力及实验纪律占40%;
3.报告占40%。
实验报告要求
1.写出算法原理;
2.写出程序清单及注释;
3.写出设计过程及结果;
4.写出故障诊断与排除及实验体会;
5.实验报告书写认真,不得抄袭,如有雷同,按不及格处理。
DEBUG的使用
1.直接启动DEBUG程序
如DEBUG.COM在C盘的根目录下,启动的方法是:
C:
\>DEBUG
_
这时屏幕上会出现“_”提示符,等待键入DEBUG命令。
2.启动DEBUG程序的同时装入被调试文件
命令格式如下:
C:
\>DEBUG[d:
][PATH]filename[.EXT]
[d:
][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。
例如:
BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。
C:
\>DEBUGA:
\BCDSUN.EXE↙
DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。
3.退出DEBUG
在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。
4.在DEBUG环境下建立和汇编程序
在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。
比如,在DEBUG下运行如下程序:
MOVDL,33H;字符3的ASCII码送DL
MOVAH,2;使用DOS的2号功能调用
INT21H;进入功能调用,输出‘3’
INT20H;BIOS中断服务,程序正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。
如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。
其中涉及DOS和BIOS功能调用。
因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。
DOS功能调用就是为诸如此类的目的设置的。
DOS功能调用要求在进入INT21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。
也就是说INT21H的2号功能调用是输出DL寄存器中的字符。
INT20H是BIOS中断服务,这一软中断用来正常结束程序。
运行步骤:
(1)进入DEBUG
设C盘上有DEBUG.COM程序,进入DOS环境后键人DEBUG
C:
\>DEBUG
随后屏幕显示:
_
“_”号是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
现在用A命令输入程序如下:
(2)输入程序并汇编
_A100
169C:
0100MOVDL,33
169C:
0102MOVAH,2
169C:
0104INT2l
169C:
0106INT20
169C:
0108
至此程序已输入完毕,并汇编成机器指令。
现在用G命令运行程序如下:
(3)运行程序
_G
3
Programterminatednormally
如果现在想分析一下该程序的指令,可以用反汇编命令U作如下操作:
(4)反汇编
_U100,108
169C:
0100B233MOVDL,33
169C:
0102B402MOVAH,02
169C:
0104CD21INT21
169C:
0106CD20INT20
169C:
0108
(5)将机器指令程序送到起始地址为200H的若干单元
_E200B2,33,B4,02,CD,21,CD,20
(6)执行机器指令程序
_G=200
3
Programterminatednormally
三、常用DEBUG命令
DEBUG命令是在命令提示符“_”下由键盘键入的。
每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键(ENTER)。
命令及参数的输入可以是大小写的结合。
Crtl+Break键可中止命令的执行。
Crtl+NumLock键可暂停屏幕卷动,按任一键继续。
所用的操作数均为十六进制数,不必写H。
1.汇编命令A
格式:
(1)A<段寄存器名>:
<偏移地址>
(2)A<段地址>:
<偏移地址>
(3)A<偏移地址>
(4)A
功能:
汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。
键人该命令后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。
每当输入一行语句后按“ENTER”键,输入的语句有效。
若输入的语句中有错,DEBUG会显示“^Error”,要求用户重新输入,直到显示下一地址时用户直接键入回车键返回到提示符“_”。
其中
(1)用指定段寄存器内容作段地址;(3)用CS内容作段地址;(4)以CS:
100作地址。
以后命令中提及的各种‘地址’形式,均指
(1)、
(2)、(3)中A命令后的地址形式。
2.比较命令C
格式:
C<源地址范围>,<目标地址>
其中<范围>是由<起始地址><终止地址>指出的一片连续单元,或由<起始地址>L<长度>指定的。
功能:
从<源地址范围>的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的内容,直至源终止地址为止。
遇有不一致时,以<源地址><源内容><目标内容><目标地址>的形式显示失配单元及内容。
3.显示内存单元命令D
格式:
(1)D<地址>
(2)D<地址范围>
(3)D
其中
(1)以CS为段寄存器;(3)显示CS:
100为起始地址的一片内存单元内容。
功能:
该命令将显示一片内存单元的内容,左边显示行首字节的段地址:
偏移地址,中间是以十六进制形式显示的指定范围的内存单元内容,右边是与十六进制数相对应字节的ASCII码字符,对不可见字符以‘·’代替。
4.修改内存单元命令E
格式:
(1)E<地址><单元内容>
(2)E<地址><单元内容表>
其中<单元内容>是一个十六进制数,或是用引号’(或”)括起来的字符串;<单元内容表>是以逗号分隔的十六进制数,或是用’或”括起来的字符串,或者是二者的组合。
功能:
(1)将指定内容写入指定单元后显示下一地址,以代替原来内容。
可连续键入修改内容,直至新地址出现后键入回车
(2)将<单元内容表>逐一写入由<地址>开始的一片单元中,该功能可以将由指定地址开始的连续内存单元中的内容,修改为单元内容表中的内容。
例如:
_EDS:
30F8,AB,”AB”
该命令执行后,从DS:
30到DS:
33的连续4个存储单元底内容将被修改为F8H,ABH,41H,42H。
5.填充内存命令F
格式:
F<范围><单元内容表>
功能:
将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
例如:
F05BC:
200L10B2,‘XYZ’,3C
该命令将由地址05BC:
200开始的10H(16)个存储单元顺序填充“B2,58,59,5A,3C,B2,58,59,5A,3C,B2,58,59,5A,3C,B2”
6.连续执行命令G
格式:
(1)G
(2)G=<地址>
(3)G=<地址>,<断点>
其中
(2)、(3)中的“=”是不可缺省的。
功能:
●默认程序从CS:
IP开始执行。
●程序从当前的指定偏移地址开始执行。
●从指定地址开始执行,到断点自动停止并显示当前所有寄存器、状态标志位的内容和下一条要执行的指令。
DEBUG调试程序最多允许设置10个断点。
7.跟踪命令T
格式:
T[=<地址>][<条数>]
功能:
如果键入T命令后直接按“ENTER”键,则默认从CS:
IP开始执行程序,且每执行一条指令后要停下来,显示所有寄存器、状态标志位的内容和下一条要执行的指令。
用户也可以指定程序开始执行的起始地址。
<条数>的缺省值是一条,也可以由<条数>指定执行若干条命令后停下来。
例如:
T
该命令执行当前指令并显示所有寄存器、状态标志位的内容和下一条要执行的指令。
又例如:
T10
该命令从当前指令开始执行10H条指令后停下来,所有寄存器、状态标志位的内容和下一条要执行的指令。
8.反汇编命令U
格式:
(1)U<地址>
(2)U<地址范围>
功能:
反汇编命令是将机器指令翻译成符号形式的汇编语言指令。
该命令将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。
注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。
地址及范围的缺省值是上次U指令后下一地址的值。
这样可以连续反汇编。
9.执行过程命令P
格式:
P
功能:
执行一条指令或一个过程(子程序),然后显示各寄存器的状态。
说明:
该命令主要用于调试程序。
它与跟踪命令T的作用类似,T命令是跟踪一条或多条指令,而P命令是执行一条指令(包括带重复前缀的数据串操作指令)或一个完整的过程(子程序)。
例如:
设有如下指令序列
:
MOVAH,02H
INT21H
:
当要执行INT21H这条指令时,若用T命令进行跟踪,则进入INT21H程序(DOS功能调用)后,需要数十次T命令才能返回当前程序;若采用P命令进行调试,则只执行INT20H一条指令,执行完立即返回,给调试者的感觉好象是执行了一条普通指令一样。
因此,当读者以后遇到CALL、INTn指令或带重复前缀的数据串操作指令时,若不想观察相应过程的详细执行过程,就可以用P命令。
10.定义待装入文件命令N
格式:
N[d:
][PATH]filename[.EXT]
功能:
N命令一般和L命令联合使用,为L命令定义指定路径的待装入文件。
11.装入文件命令L
格式:
L<地址><盘号><起始逻辑扇区><所读扇区个数n>
其中<地址>的缺省值为CS:
100。
逻辑扇区可由物理扇区号换算得到,以双面双密度盘为例:
物理扇区是按0面0道1区,0面0道2区,…….0面0道9区,0面1道1区,……0面39道9区,1面0道1区,……l面39道9区排列。
而逻辑扇区与物理扇区号的对应关系为物理扇区0面0道1扇区至9扇区,逻辑扇区号为0~8;物理扇区1面0道1扇区至9扇区,逻辑扇区号为9~11H;物理扇区0面1道l扇区至9扇区,逻辑扇区号为12~1AH……这样每道先0面后1面一直排下去。
其中<盘号>为0、1或2,0表示A盘,1表示B盘,2表示硬盘。
功能:
将<盘号>指定的盘上,从<起始逻辑扇区>起,共n个逻辑扇区上的所有字节顺序读入指定内存地址的一片连续单元。
当L后的参数缺省时,必须在L之前由N命令指定(或进入DEBUG时一并指出)所读盘文件名。
此时L执行后将该文件装入内存。
例如:
_NEXAMPLE
_L
将当前盘上的EXAMPLE文件装入CS:
100起始的一片内存单元。
12.内存单元搬家命令M
格式:
M<源地址范围><目标起始地址>
其中源及目标地址若仅输入偏移量,则隐含相对DS。
功能:
把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。
例如:
MCS:
100110600
该命令把由CS:
100起到CS:
110止共17个字节搬至DS:
600至DS:
610的一片单元。
13.写盘命令W
格式:
W<地址><盘号><起始逻辑扇区><所写逻辑扇区数n>
功能:
该命令是将内存<地址>起始的一片单元内容写入指定扇区。
只有W而没有参数时,与N命令配合使用使用户完成写盘操作。
用户可用N命令先定义被调试的文件,再将被调试文件的字节长度值送BX、CX(BX寄存器存放字节长度值的高位,CX寄存器存放字节长度值的低位),最后用写盘命令W将被调试文件存入磁盘。
例如:
欲将D1.COM文件写入磁盘,设文件长度为40字节,可进行如下操作。
_ND1.COM
_RCX
CXxxxx
:
0040
_RBX
BXxxxx
:
0000
_W
Writing00040bytes
14.显示命令R
格式:
(1)R
(2)R<寄存器名>
功能:
显示当前所有寄存器内容、状态标志及将要执行的下一指令的地址(即CS:
IP)、机器指令代码及汇编语句形式。
其中对状态标志寄存器FLAG以状态标志位的形式显示,详见表2-1。
表2-1状态标志显示形式
状态标志位
状态
显示形式
溢出标志OF
有/无
OV/NV
方向标志DF
减/增
DN/UP
中断标志IF
开/关
EI/DI
符号标志SF
负/正
NG/PL
零标志ZF
零/非零
ZR/NZ
奇偶标志PF
偶/奇
PE/PO
进位标志CF
有/无
CY/NC
辅助进位标志AF
有/无
AC/NA
键入该命令后将显示指定寄存器名及其内容,“:
”后可以键入修改内容。
键入修改内容后按“ENTER”键有效。
若不需修改原来内容,直接按“ENTER”即可。
例如:
RAX
15.端口输出命令O
格式:
O<端口地址><字节>
功能:
将该<字节>由指定<端口地址>输出。
例如:
O2F4F
该命令将4FH从2FH口输出。
16.搜索指定内存命令S
格式:
S<地址范围><表>
功能:
在指定范围搜索表中内容,找到后显示表中元素所在地址
例如:
S1001104l
屏幕显示:
04BA:
0104
04BA:
010D
表示在100H~110H之间的一片存储单元中,104H和10DH两个单元有41H。
又如:
SCS:
100L10‘AB’
表示在当前代码段位移100H至110H处搜索连续3个字节内容为41H、42H(分别对应A、B的ASCII码)的单元。
18.端口输入命令I
格式:
I<端口地址>
功能:
将从指定端口输入的内容显示出来。
19.结束DEBUG返回DOS命令Q
格式:
Q
功能:
返回DOS提示符下。
实验二顺序结构程序设计
实验目的
1.学习数据传送指令和算术运算指令的用法;
2.能够编写简单的汇编语言程序,并上机调试;
3.掌握无符数和带符号数比较大小转移指令的区别。
实验要求
1.实验内容,自行设计本实验的程序;
2.独立分析实验结果;
3.学会调试、测试程序。
实验仪器设计
计算机一台,masm软件
考核形式
1.实验预习回答提问占20%;
2.实验操作能力及实验纪律占40%;
3.报告占40%。
实验报告要求
1.写出算法原理;
2.写出程序清单及注释;
3.写出设计过程及结果;
4.写出故障诊断与排除及实验体会;
5.实验报告书写认真,不得抄袭,如有雷同,按不及格处理。
二、实验内容
1.从键盘上输入0-9之间的任意一个数字,计算其平方值,并将结果在屏幕上显示出来。
(1)以十六进制形式显示;
(2)以十进制形式显示。
2.从键盘上接收两个一位十六进制数据,求其和,并以十进制形式显示出来。
实验三分支结构程序设计
实验目的
1.掌握条件转移指令的使用方法;
2.掌握掌握指令对标志寄存器中各标志位的影响情况;
3.初步掌握利用设置断点调试程序的方法。
实验要求
1.实验内容,自行设计本实验的程序;
2.独立分析实验结果;
3.学会调试、测试程序。
实验仪器设计
计算机一台,masm软件
考核形式
1.实验预习回答提问占20%;
2.实验操作能力及实验纪律占40%;
3.报告占40%。
实验报告要求
1.写出算法原理;
2.写出程序清单及注释;
3.写出设计过程及结果;
4.写出故障诊断与排除及实验体会;
5.实验报告书写认真,不得抄袭,如有雷同,按不及格处理。
实验内容
1.从键盘输入任一字符,若为大写字母则转为小写字母输出,若为小写字母则原样输出,若为非英文字母,则输出“*”。
2.在数据区中定义三个带符号字节变量,编写程序将其中的最大数找出送到MAX单元中。
3.已知DATA单元开始存放三个带符号数,判断三个数是否同号,若同时为正,显示“+”,同时为负,显示“-”,否则显示“n”。
4.从键盘上接收三个一位十进制数,先出其中大于平均值的数据显示出来。
编程思路
该题目要求掌握多分支程序设计方法。
为了实现指定功能,应从以下几个方面考虑:
(1)确定编程的算法思想。
(2)确定带符号数比较大小转移应选择哪一组条件转移指令。
实验四循环结构程序设计
实验目的
1.掌握循环结构程序设计的方法及执行过程;
2.掌握数学运算指令及循环程序的调试方法
实验要求
1.验内容,自行设计本实验的程序;
2.独立分析实验结果;
3.学会调试、测试程序。
实验仪器设计
计算机一台,masm软件
考核形式
1.实验预习回答提问占20%;
2.实验操作能力及实验纪律占40%;
3.报告占40%。
实验报告要求
1.写出算法原理;
2.写出程序清单及注释;
3.写出设计过程及结果;
4.写出故障诊断与排除及实验体会;
5.实验报告书写认真,不得抄袭,如有雷同,按不及格处理。
实验内容
1.编写程序实现将数据段内OP1单元开始的10个字节的无符号数与OP2开始的10个字节的无符号数相加,结果存到OP1开始的11个单元里。
可以使用字节的无符号数相加也可以字为单位进行运算。
2.有一长度为10的字符串,统计其中“a”的个数,并显示出来。
3.将10个无序的无符号数按从小到大的顺序排序。
实验五子程序设计
目的与要求
1.掌握子程序调用和返回指令的用法及执行过程
2.掌握在子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 汇编语言 程序设计 实验 指导书