汇编语言实验指导.docx
- 文档编号:8886688
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:33
- 大小:248.05KB
汇编语言实验指导.docx
《汇编语言实验指导.docx》由会员分享,可在线阅读,更多相关《汇编语言实验指导.docx(33页珍藏版)》请在冰点文库上搜索。
汇编语言实验指导
汇编语言实验习题指导
长春理工大学计算机科学与技术系
目录
实验须知1
实验一DEBUG调试程序的使用3
实验二用DEBUG程序调试程序功能段12
实验三数据串传送和查表程序19
实验四汇编语言上机过程及屏幕字符显示程序22
实验五条件转移指令27
实验六循环程序是设计30
实验七子程序设计33
实验须知
一、预习要求
1.实验前认真阅读实验教程中有关内容,明确实验目的和实验任务。
2.每次实验前应有预习报告,未预习者不允许参加实验。
预习报告中:
对程序设计实验,要求画出程序流程图,编好上机程序;
二、实验要求
1.实验是学习“汇编语言程序设计”这门课程的重要环节,实验课请勿迟到,缺席。
2.上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与实验相关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在程序的调试过程中,有意识地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。
3.程序调试完后,须由实验辅导教师在机器上检查运行结果。
4.每个实验完成后,结果写入预习报告,完成分析,上交实验教师。
三、报告要求
每次实验后,应递交一份实验报告,报告中应包括下列内容:
1.实验名称、实验人姓名、学号、班级、所用的设备号。
2.实验目的、任务。
3.各任务程序流程图、程序清单(应加适量注释)。
4.记录和分析实验结果。
5.据实验目的认真做小结。
实验一DEBUG调试程序的使用
一、实验目的
1.学习使用DEBUG程序的各种命令。
2.利用DEBUG学习了解计算机取指令、执行指令的工作过程。
3.掌握用DEBUG调试自编程序的方法。
二、实验准备
预备知识:
DEBUG的使用.在以后的所有实验中,都将用到DEBUG程序,首先学习一下他的主要用法。
(一)什么是debug?
Debug是DOS、WINDOWS都提供的实模式(8086方式)程序的调试工具。
使用它,可以调试CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序运行。
(二)我们用到的DEBUG功能
●用DEBUG的R命令查看、改变CPU中寄存器的内容;
●用DEBUG的D命令查看内存的内容;
●用DEBUG的E命令改写内存的内容;
●用DEBUG的U命令将内存中的机器指令翻译成汇编指令;
●用DEBUG的T命令执行一条机器指令;
●用DEBUG的A命令以汇编指令的格式在内存中写入一条机器指令;
DEBUG的命令比较多,有20多个,这是常用的6个。
(三)进入DEBUG
DEBUG是在DOS方式下使用的程序。
我们在进入DEBUG前,应先进入到DOS方式。
在WINDOWS下进入DOS方式的方法:
在【开始】菜单选择运行命令,如图1.1,打开【运行】框如图1.2输入COMMAND,点击确定按钮
图1.2在文本框中输入COMMAND命令
图1.1选择【运行】命令
进入DOS后运行DEBUG程序如图1-3
图1.3运行DEBUG程序
图1.4DEBUG编辑界面
启动成功,显示连接符“-”
(四)关于使用DEBUG命令的几点说明
(1)在提示符“-”下才能输入命令,在按“回车”后该命令才开始执行;
(2)命令是单个字母,命令和参数的大小写可混合输入;
(3)可用F1、F2、F3、INS、DEL、、等编辑键,编辑本行命令
(4)当命令出现语法错误时,将在出错位置显示“ERROR”
(5)可用ctrl+c或ctrl+break来终止当前命令的执行,还可以用ctrl+s来暂停屏幕显示(当连续不断地显示信息时)
(6)DEBUG使用的数以十六进制来表示;
(7)DEBUG中的命令不区分大小写;
(五)几个常用命令
1、R命令(Register)
格式1:
R
功能1:
显示所有寄存器中的内容.
图1.5用R命令显示寄存器的内容
格式2:
R寄存器名
功能2:
显示修改寄存器的内容
例如打入:
-RAX
系统将响应如下:
AX0000
:
表示AX当前内容为0000,此时若不对其作修改,可按ENTER键,否则,打入修改后内容。
如图1-6:
图1.6用R命令修改寄存器的内容
2、D命令
用DEBUG的D命令查看内存的内容;
功能:
显示内存单元内容
输入D命令,执行结果如图1.7
图1.7D命令执行结果
说明:
(1)XXXX:
YYYY-----前者是内存单元的段地址,后者是内存单元的偏移量;
(2)中间显示区域时内存单元内容(十六进制形式),每行显示16个字节的内容;
(3)右边以“字符”形式显示内存单元值。
格式一:
D起始位置
DEBUG从起始位置显示128个字节的内容。
输入命令D0C0B:
100
执行结果如图:
1.8
图1.8D0C0B:
100命令的执行结果
格式二:
D起始位置结束位置
DEBUG从起始位置一直显示到结束位置。
输入命令DDS:
10011F,执行结果如图1.9所示
图1.9命令DDS:
10011F执行结果
格式三:
D起始位置L长度
DEBUG从起始位置开始显示指定长度的内容。
输入命令DDS:
100L10
执行结果如图1.10
图1.10命令DDS:
100L1命令执行结果
3.E命令
用DEBUG的E命令改写内存的内容;
格式一:
E起始地址字节值表
功能:
用字节值表中的值替换从“起始地址”开始的内存单元内容
或E起始地址
输入命令:
E1AF5:
0100,连续输入12、34(空格)、56(空格)、(空格)、78(回车);在输入命令D1AF5:
0100,执行结果如下图1.11:
图1.11命令D1AF5:
0100,执行结果
格式二:
E起始地址
功能:
采用提问的方式一个一个地改写内存单元的内容
图1.12命令E1AF5:
0100执行结果
(4)A命令
功能:
输入汇编指令。
格式:
A起始地址
首先用A命令以汇编语言的形式输入程序,以D命令显示内存,从下图可以看到我们输入的是汇编指令,DEBUG把它们翻译成机器指令,以机器码写入内存。
图1.13用A命令写入程序
图1.14从一个预设的地址开始输入指令
(5)U命令
功能:
反汇编,显示机器码所对应的汇编指令
格式1:
U[地址]
功能1:
从指定地址开始反汇编
图1.15U命令执行结果
格式2:
U地址范围
功能2:
对指定的地址范围进行反汇编.
图1.16U100108命令执行结果
(6)T命令
格式:
T[=地址]
功能:
从指定地址起执行一条语句后停下来,显示所有寄存器的内容及标志位的值与下一条将要执行的指令
图1.17T命令执行结果
格式:
T[=地址][x]
功能:
从指定的地址开始跟踪x条指令
图1.18命令T=1002执行结果
(7)Q命令
功能:
退出DEBUG程序,返回DOS
图1.19Q命令执行结果
三、实验任务
1、参照实验准备,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,E命令的使用
2、按照以下步骤输入一系列的命令和指令,编写出简单的汇编语言指令,并完成指定任务。
debug
-e200
XXXX:
0200XX.10XX.20XX.30XX..40(将200H~203H内容改为10H~40H)
-e150
XXXX:
0150XX.00XX.01
-a100
XXXX:
0100MOVAX,CS(01)
XXXX:
0102MOVDS,AX(02)
XXXX:
0104MOVBX,100(03)
XXXX:
0107MOVAX,[150](04)
XXXX:
010AADDBX,,AX(05)
XXXX:
010CMOVAL,[BX](06)
XXXX:
010EADDAL,[BX+1](07)
XXXX:
0111MOVSI,2(08)
XXXX:
0114MOVAL,[BX+SI](09)
XXXX:
0116MOVAH,0(10)
XXXX:
0118MOVCH,0(11)
XXXX:
011AMOVCL,[BX+SI+1](12)
XXXX:
011DADDAX,CX(13)
XXXX:
011FINT20
(1)用D命令显示XXXX:
0200---XXXX:
0203单元内容
(2)指出以上汇编语言指令中源操作数使用的是什么寻址方式?
(3)用T命令单步跟踪,观察指令的执行结果,并记录
3、查看内存单元内容,pc机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图改变它
4、向内存从B8100H开始的单元中填写数据,如:
-eb810:
00000101020203030404
四、实验报告要求
把实验任务中要求的各项记录到预习报告上,完成预习报告,作为实验报告上交
五、实验小结
实验报告的最后一项,写出本次实验小结
实验二用DEBUG程序调试程序功能段
一、实验目的
1.继续学习使用DEBUG程序的各种命令。
2.利用DEBUG学习了解计算机取指令、执行指令的工作过程。
3.掌握8086/8088基本指令的使用方法和功能。
二、实验准备
1.DEBUG命令学习
1).G命令
格式:
G[=起始地址][断点地址]
功能:
从起始地址开始执行到断点地址,如不设断点地址,则程序一直执行到终止指令才停止。
图2.1命令G=100执行结果
2)。
P命令
功能:
执行汇编程序,单步跟踪。
与T命令不同的是:
P命令不会跟踪进入子程序或软中断。
其使用方式与T相同
图2.2P命令执行结果
从结果中可以看出P命令不会进入INT21H软中断
3)。
N命令
功能:
指定文件名。
为读/写文件做准备
D20020F
U10010C
NE:
\
RCX
:
110
第一、二条命令的作用是检查一下刚才编写的汇编指令,第三条命令的作用是设置存盘文件名为FIRST。
COM,第四条命令的作用是设置存盘文件大小为110H个字节,最后一条命令是将文件存盘。
执行结果如图
图2.3NE:
\执行结果
文件存盘后,在DOS环境下执行FIRST。
COM。
观看运行结果,如图2.4
图2.4文件FIRST。
COM文件执行结果
4)。
W命令
功能:
向磁盘写内容
见“N命令”
5)。
L命令
功能:
从磁盘将文件或扇区内容读入内存
注意:
使用该命令前,必须用N命令设定文件名
NE:
\
L
在文件读入内存后,可用U100命令查看调入程序的汇编代码,执行结果如图2.5
图2.5用L命令跳入程序
三、实验任务
1.按照下列给定步骤完成求累加和程序:
程序:
MOVBX,1000
MOVCX,10
MOVAL,0
LOP:
ADDAL,[BX]
INCBX
J:
LOOPLOP
INT3
步骤:
1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
2)用命令NAA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:
CX改为程序长度值(即最后一条指令后面的地址减去开始地址),用R命令把BX设为:
0000H,CX设为文件长度。
4)用命令W100将此程序存到AA命名的磁盘文件中。
5)用命令Q退出DEBUG。
6)用命令DEBUGAA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
7)用E命令在内存地址1000H处键入16个数字
8)用命令G=100J(J用实际地址代替),使程序运行并停在断点J上,检查
AX,BX的值是否符合你的预计值。
9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。
10)重复GJ与T,再检查AX是否正确。
(J为断点地址)
11)用G命令使程序运行到结束,检查AX值是否正确。
2.用命令A汇编下列指令,判断指令正误并说明原因。
(1)LEADI,[AX]
(2)MOVDS,2010
(3)PUSHAL
(4)OUT900,AL
(5)MOV[BX],0
3.利用T,P,G命令,执行下列指令段,注意它们的不同之处。
(6)MOVDI,300
MOVSI,400
MOVCX,3
CLD
REPMOVSB
INT3
(7)MOVAH,2
MOVDL,41
INT21
INT3
4.程序:
MOVDI,1000
MOVCX,8
MOVSI,2000
CLC
LOP:
MOVAL,[SI]
ADC[DI],AL
INCSI
INCDI
LOOPLOP
INT20
步骤:
1)用A命令键入此程序
2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?
),是否正确?
4)将INT20H指令改为INT3,有何区别?
若这条指令不加,行不行?
试
试。
5)请说明这个程序完成的功能是什么?
四、实验说明
1.初学者在使用DEBUG命令修改内存或执行程序时,由于多种原因,出现死机是较经常的现象,可按RESET复位按钮,重新启动系统。
2.用连续执行命令G执行程序时,注意给出执行的首地址,或查看当前CS和IP值是否为要执行程序段的首地址,并注意查看执行的指令流程中有无返回DEBUG功能的程序段,如指令INT20T或断点设置INT3,否则发出命令后,很容易出现死机,原因是如无程序段使系统返回命令接受状态,CPU将不断到内存取指令、执行指令,使作户失去对系统的控制,出现死机。
为避免这种情况,可在用户程序段的最后加上一条INT20H指令,或用断点方式执行。
避免出现死机。
3.关于任务2,在命令A下汇编各条指令,对于错误的指令,DEBUG指令出其错误位置,对于正确的指令,将其汇编到相应内存,据此可判断指令正误,而具体原因需自己分析。
4.关于任务3,用A命令汇编好后,用T,P,G命令分别执行,记录指令执行前后各寄存器(包括标志寄存器各标志位值)、堆栈指针及堆栈内容变化情况,以及与指令有关内存单元的内容,总结T和P执行某些指令的不同之处及适用场合。
5.DEBUG下不支持符号地址,如任务1中的标号LOP和J等,在命令A下输入程序时,不输入标号(如next:
),在用到标号的指令(如LOOP,JNZ等),在其后直接输入要跳转的目的地址。
6.对向前跳转的指令,输入程序的过程如下:
-A↙
1270:
0100MOVCX,10↙
1270:
0103MOVAL,0↙
1270:
0105MOVBX,1000↙
1270:
0108ADDAL,[BX]↙
1270:
010AINCBX↙
1270:
010BDECCX
1270:
010CJNZ0108↙
1270:
101EMOV[BX],AL↙
1270:
0110INT3
1270:
0112↙
用目的地址0108代替标号LOP在LOOP指令中的位置,而在输入ADDAL,[BX]这条指令时,不输入标号LOP.
对向后跳转的指令,由于目的地址尚未确定,可先随意输入一个地址,若是条件转移指令,注意跳转范围应在-128~127之间,待程序输入完毕,目的地址明确后,再用命令A修改跳转指令。
如下程序段,功能是比较AX和CX中的两符号数,将较大的数放在AX和BX中,较小的数放在CX中。
CMPAX,CX
JXcontinue
XCHGAX,CX
continue:
MOVBX,AX
用命令A输入程序的过程如下:
-A↙
1270:
0100CMPAX,CX↙
1270:
0102JG0102↙输入本条指令的地址0102代替标号continue
1270:
0104XCHGAX,CX↙
1270:
0106MOVBX,AX↙
1270:
0108↙
-A102↙修改跳转指令的目的地址
1270:
0102JG0106↙输入目的地址0106
1270:
0104↙
-U1270:
0100L0A↙用命令U查看程序,跳转正确
1270:
010039C8CMPAX,CX
1270:
01027F02JG0106
1270:
010487C1XCHGAX,CX
1270:
010689C3MOVBX,AX
五、问题思考
1.假设某内存单元的内容为CCH,试问该内容如看作一条指令、看作无符号数、看作带符号数,那将分别表示什么?
不查看教材中的指令系统代码,如何在DEBUG下知道CCH表示一条什么指令?
2.在指令MOV[BX],AX中,操作数[BX]的寻址方式是什么?
在DEBUG下执行完该指令后,如何查看执行结果?
3.可否随意在DEBUG提示符“-”后不带参数发出命令G?
什么情况下使用命令G时,可不用“=”给出执行的首地址?
4.分析出现死机的几种情况。
如何理解死机现象?
试从计算机的工作原理进行解释。
六、实验报告
1.分析任务2中各条指令错误原因。
2.说明命令T和P的差别。
3.回答问题思考。
4.针对实验目的认真做小结。
实验三数据串传送和查表程序
一、实验目的
1、堆栈。
堆栈指示器SP和堆栈操作指令PUSH。
POP。
2、段寄存器和物理地址计算。
3、查表法和查表指令XLAT。
4、数据串传送程序和数据串传送指令MOVS。
STOS及重复前辍REP。
5、循环指令ROL。
逻辑与指令AND和清方向位指令CLD。
6、伪操作指令DB。
二、实验准备
1.编写实验任务要求的程序
2.学习一下调试方法
利用查表方法把DX的内容(16进制数)转换成ASCII码:
1)、用A命令键入下列程序:
MOVBX,1000
MOVDI,2000
MOVCX,4
LOP:
PUSHCX
MOVCL,4
ROLDX,CL
POPCX
MOVAL,DL
ANDAL,OF
XLAT
CLD
STOSB
LOOPLOP
INT20
2)用A命令在1000H处键入下列ASCII码并用D命令检查之:
DB`0123456789ABCDEF'
用D命令检查时注意左边的ASCII码值和右边的字符。
3)用R命令给DX送一个四位的16进制数(例7F8E)。
4)用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)
5)用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。
可注意屏幕右边的ASCII字符与DX是否一致。
3.验证:
数据串搬家程序:
1)用A命令键入下列程序:
MOVSI,1000
MOVDI,1500
MOVCX,0F
LOP:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLOP
INT20
2)用A命令DB伪指令在1000H键入下列字符串:
‘IBM_PCCOMPUTER'
3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。
4.段寄存器概念及字符串传送指令练习:
1)用A命令键入下列程序:
MOVSI,0
MOVDI,0
MOVAX,1000
MOVDS,AX
MOVAX,1500
MOVES,AX
MOVCX,0F
CLD
REPMOVSB
INT20
2)用A命令DB伪指令在1000:
0000处键入字符串'IBM_PCCOMPUTER',并用D命检查之
3)用D命令检查0F00:
1000处内容,看是否一样。
为什么?
4)用G命令运行此程序,检查目的地址1500:
0000处内容。
并记下DS与ES值。
三、实验任务
1、把实验准备
(二)程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?
2、修改实验准备
(二)程序以做到把1000H开始的字符串搬到1002H
开始的地方去
3、编一程序段,求双字(DX,AX)的绝对值
4、将双字(DX,AX)左移4位。
四、实验报告要求
1、各项实验记录和思考题。
2、要求给出任务2中要求编写的程序的清单(修改后)和调试记录。
3、给出任务3,4的程序清单和调试记录
实验四汇编语言上机过程及屏幕字符显示程序
一、实验目的:
1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行
2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、利用^Break退出程序的方法及局限性。
4、汇编程序的编写
二、实验准备:
1.编写实验任务要求的两个程序,画出流程图,给出程序清单
2.学习汇编语言程序的上机过程
(1)建立汇编语言程序源文件。
可使用任何一个文本编辑器(如EDIT.com)编辑源文件,源文件,源文件的扩展名通常取为.asm。
图4.1用EDIT编辑源文件
图4.2EDIT环境下建立的文件
(2)汇编文件,形成目标模块。
MASMLT301A。
ASM
若文件有语法错误,据错误提示,返回
(1),修改源文件。
图4.3MASMLT301a.asm执行结果
可以看出文件有错,返回
(1),根据提示修改源文件11行,重新编译
图4.4MASM编译成功
编译成功。
则形成.OBJ目标文件
图4.5在目录下看到的目标文件
(3)连接目标模块,形成可执行文件。
LINKLT301A。
OBJ
图4.6LINKLT301a.obj命令执行结果
若有错,据错误提示,返回
(1),修改错误。
若无错,则形成.EXE可执行文件和.MAP映像文件。
(4)DOS下直接键入可执行文件名,即可执行该程序。
LT301A.EXE
图4.7运行结果
(5)如果运行结果不对,需调试程序,查找原因。
返回步骤
(1)查看源文件,查找错误,修改文件。
若无法通过查看源文件找出错误,可在DEBUG下调试.EXE文件,找出错误之处,再返回步骤
(1)。
3.利用INT2109H号功能调用显示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 指导