8086汇编语言程序设计实验指导书x.docx
- 文档编号:30215417
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:58
- 大小:54.81KB
8086汇编语言程序设计实验指导书x.docx
《8086汇编语言程序设计实验指导书x.docx》由会员分享,可在线阅读,更多相关《8086汇编语言程序设计实验指导书x.docx(58页珍藏版)》请在冰豆网上搜索。
8086汇编语言程序设计实验指导书x
8086汇编语言程序设计
实
验
指
导
书
计算机科学与技术学院计算机科学与技术系
二〇一一年九月
第一部分实验方法
1.1实验目的与要求
一、实验目的
学习汇编语言程序设计的基本方法和技能,进一步加深对8086汇编语言程序设计的理解,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,为后继课程——接口技术打下坚实的程序设计基础。
二、实验要求
1.上机前要做好充分的准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。
2.上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法及实验仪器。
在程序的调试过程中,有意识地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。
为了更好地进行上机管理,要求用硬盘储存程序,并建立和使用子目录,以避免文件被别人删除。
有关目录及文件操作的DOS命令见附录1。
此外,为了便于统一管理硬盘中的文件,要求实验者按以下形式命名实验文件:
字母学号_序号.ASM
其中,字母取a~z中的一个字母,按实验项目序号从a至z排列,序号是指每次实验中所编写的程序的序号。
例如:
学号为850431学生的第二次实验中的第1个程序所对应的文件名应为b850431_1.ASM。
3.每个实验完成后,应写出实验报告。
实验报告的要求如下:
1设计说明:
用来说明设计的内容。
它包括:
程序名、功能、原理及算法说明、程序及数据结构、主要符号名的说明等。
2调试说明:
便于学生总结经验提高编程及调试能力。
它包括:
调试情况,如上机时遇到的问题及解决办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会等。
3程序框图。
4程序清单。
1.2实验方法
一、用编辑程序建立ASM文件
用文字处理软件编辑源程序。
常用编辑软件有:
EDIT.EXE、记事本、WORD等。
无论采用何种编辑工具,生成的文件必须是纯文本文件,且文件扩展名为.ASM。
下列程序完成两个字节数相加,并将和存于SUM变量中。
用编辑软件建立以ABC.ASM为文件名的源程序文件。
DATASEGMENT
BUFDB47H,6AH;数据定义
SUMDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;段寄存器定义
MOVAL,BUF;数据处理部分从此开始,直到返回DOS
ADDAL,BUF+1
MOVSUM,AL
MOVAH,4CH;返回DOS
INT21H
CODEENDS
ENDSTART
二、用汇编程序汇编源文件,生成目标文件(.OBJ)
当源程序建立以后,用汇编程序MASM对ABC.ASM源程序文件进行汇编,操作步骤如下:
(以下划线部分为用户键盘输入,“↙”代表回车,未划线部分为屏幕显示,小字部分为说明)。
C:
\MASM>MASMABC.ASM↙
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCrop1981-1985,1987,Allrightsreserved
Objectfilename[ABC.OBJ]输入目标文件名,若采用括号[]中的名字,按↙
Sourcelisting[NUL.LST]若需要列表文件,输入文件名,按↙;如果不需要,直接按↙
Cross-reference[NUL.CRF]若需要交叉索引文件,输入文件名;如不需要,直接按↙
49758+451602Bytessymbolspacefree
0WarningErrors
0SevereErrors
回答上述问题后,汇编程序就对源程序进行汇编。
若汇编中发现源程序有语法错误,则列出错误语句所在行、错误代码及错误性质说明。
错误分为:
警告错误(WarningErrors)和严重错误(SevereErrors)两种。
警告错误指汇编程序认为的一般性错误;严重错误指汇编程序认为无法进行正确汇编的错误,给出其错误个数,错误性质。
这时,就要对错误进行分析,找出问题和原因,然后再调用编辑程序对源程序进行修改。
修改后重新汇编,直到无错误为止。
除了用上述方法分步回答问题外,还可以用命令行的形式按顺序对相应提示予以回答,其格式是:
MASM源文件名,目标文件名,列表文件名,交叉引用文件名;
其中文件名都不必给出扩展名,汇编程序会按照缺省情况使用或产生。
若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。
例如以下命令经汇编后在当前目录下产生ABC.OBJ文件,不产生LST文件和CRF文件。
C:
\MASM>MASMABC;↙
三、用连接程序LINK目标文件,生成执行文件EXE
C:
\MASM>LINKABC↙
Microsoft(R)8086ObjectLinkerVersion5.00
Copyright(C)MicrosoftCrop1981-1985,1987,Allrightsreserved
RunFile[ABC.EXE]输入可执行文件名,若采用括号[]中的名字,按↙
ListFile[NUL.MAP]若需要映象文件,输入文件名,按↙;如果不需要,按↙
Libraries[NUL.LIB]若需要库文件,输入文件名,按↙;如果不需要库文件,按↙
Warning:
nostacksegment
上述给出的警告信息,表示用户程序没有定义堆栈段。
该警告不影响可执行程序的生成和正常运行,因为运行时会自动使用系统提供的缺省堆栈。
回答上述问题后,连接程序开始连接,若连接过程中有错,则显示错误信息。
此时,按错误提示,修改源程序,然后,回到第二步。
直至汇编无错误,连接无错误(错误NoStackSegment除外),在当前目录下产生可执行文件(.EXE),进入第四步。
同样也可以用命令行的形式按顺序对相应提示予以回答,其格式是:
LINK目标文件名,可执行文件名,内存映象文件名,库文件名;
其中不必给出扩展名,连接程序会按照缺省情况使用。
若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。
例如以下命令行对ABC.OBJ文件连接后在当前目录下产生ABC.EXE文件,其余文件均不需要。
C:
\MASM>LINKABC;↙
从6.0版以后,Microsoft公司把MASM和LINK的功能由一个ML.EXE程序完成,只需一个命令就可以把源程序汇编并连接生成.EXE文件。
而不再需要分两步操作。
ML.EXE常用格式为:
ML[/F1][/Fm][/Fr][/c]源文件
其中,源文件名的扩展名(.asm)不能省,[]中的F必须大写,l,m,r,c必须小写,各可选项含义如下:
/F1:
产生.lst列表文件,缺省时不产生。
/Fm:
产生.map内存映象文件,缺省时不产生。
/Fr:
产生.sbr交叉参考文件,缺省时不产生。
/c:
只产生,obj目标文件,不产生.exe可执行文件。
缺省时只产生.exe文件。
例:
ML/FlABC.ASM
以上命令会对已存在的ABC.ASM文件汇编且连接,并在当前目录下生成一个列表文件ABC.LST和一个可执行文件ABC.EXE.
四、运行程序
设连接生成的执行文件为ABC.EXE,运行程序只需在DOS提示符下键入文件名即可,如:
C:
\MASM>ABC↙
若程序能够运行但不能得到预期结果,则需要静态或动态查错。
静态查错即检查源程序,并对源程序进行修改,然后再汇编、连接、运行。
如果静态检查无法发现错误,则需动态查错。
五、程序调试及结果查看
这里使用DEBUG程序进行调试,DEBUG是一种使用广泛的强有力的汇编语言程序或二进制文件的调试工具。
设ABC.ASM经汇编及连接后,产生ABC.EXE文件,对它的调试操作如下:
1.把程序装入内存,并显示程序清单
C:
\MASM>DEBUGABC.EXE↙
-
此时,DEBUG已将执行程序装入内存,可键入DEBUG的有关命令调试程序。
-U↙用反汇编命令U列出程序清单
13E3:
0000B8E213MOVAX,13E2
13E3:
00038ED8MOVDS,AX
13E3:
0005A00000MOVAL,[0000]
13E3:
000802060100ADDAL,[0001]
13E3:
000CA20200MOV[0002],AL
13E3:
000FB44CMOVAH,4CH
13E3:
0011CD21INT21
……
2.查看数据段内容或查看寄存器内容
-DDS:
0000↙查看数据段内容
13E2:
0000476A000000000000-0000000000000000Gj..............
……
可见0000、0001单元内容为数据段定义的内容,分别为47H、6AH。
DEBUG状态下,缺省数制为十六进制数。
-R↙查看寄存器内容
AX=13E2BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D2ES=13D2SS=13E2CS=13E3IP=0003NVUPEIPLNZNAPONC
若查看指定寄存器内容,在R命令后跟上寄存器名,例:
-RAX↙查看寄存器AX的内容
AX13E2
:
↙ 若需修改AX的值,则键入新值;若无需更改,按回车。
3.连续运行程序,查看结果
-G↙或-G=00013↙运行程序,0为运行起始地址,0013为断点地址
-DDS:
0000↙查看内存结果
13E2:
0000476AB100000000000000000000000000Gj..............
……
可见0002单元中内容已变为0000和0001两单元内容之和。
4.如果连续得不到正确结果,需分步跟踪运行
-T=0000↙0000这所需要运行指令的地址
AX=13E2BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D2ES=13D2SS=13E2CS=13E3IP=0003NVUPEIPLNZNAPONC
13E3:
00038ED8MOVDS,AX
显示单步执行后寄存器和标志状态之后,停在下一条指令开始处。
-T↙顺序运行下一条指令
……
5.退出DEBUG
-Q↙
第二部分实验内容
实验1简单汇编语言程序设计
一、实验目的与要求
1.熟悉汇编语言运行、调试环境及方法。
2.掌握简单汇编语言程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容
根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。
试编写汇编程序,完成
。
2.试编写一个程序,测试某数是否是奇数。
如该数是奇数,则把DL的第0位置1,否则将该位置0。
三、实验报告要求
1.程序算法流程图。
2.源程序清单。
3.程序运行结果。
4.调试过程中遇到的问题和解决的方法。
实验2分支及循环程序设计
一、实验目的与要求
1.熟悉汇编语言运行、调试环境及方法。
2.掌握分支程序和循环程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容
根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.键入一数,判断该数是否在3 2.试编程统计数据区中正数、零和负数的个数。 3.编程求无符号数字节序列中最大值和最小值。 4.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 6.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。 参考加密方法是: 每个数乘以2。 (说明: 本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。 实验3子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。 请编程完成此功能。 数据缓冲区参考数据定义如下: EXAMSCOREDB01;学号 DB89,76,54,77,99;单科成绩 DW? ;该学生的总分 DB02;学号 DB79,88,64,97,92;单科成绩 DW? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。 实验4综合程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序接收用户从键盘键入的月份数,在终端上显示该月的英文缩写名。 当用户按下ESC键时,程序退出,返回DOS。 参考程序执行过程如下: month? 5↙ MAY month? 9↙ SEP month? 2.按15行×16列的表格形式显示ASCII码为10H~FFH的所有字符。 每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码为0)分隔。 3.在第2题程序的基础上进行修改。 将显示表格的行、列数由固定的15行16列改为由用户从键盘输入。 然后,按用户输入的行列值进行显示。 4.编写汇编程序将内存数据区保存的若干个带符号16位数据按从大到小的顺序排列后,以十进制真值的形式在屏幕上显示。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。 附录 附录1常用DOS命令 1.显示目录命令DIR 该命令用来列出指定盘、指定目录或指定文件的目录。 命令格式有一下三种: DIR[<盘符>][/P][/W] DIR[<目录路径名>][/P][/W] DIR[<文件路径名>][/P][/W] 其中/P表示分页显示;/W表示紧缩格式显示,即一行显示多个文件。 []中内容为任选项;<>中内容必须输入。 文件路径名为: [<盘符>][<路径>]<文件名> 目录路径名为: [<盘符>]<路径> 文件名中可用通配符“*”和“? ”,“*”代表任意一串字符,“? ”代表任意一个字符。 例如: 若要显示D盘MASM目录下的所有扩展名为ASM文件的DOS命令为: DIRD: \MASM\*.ASM 2.文件改名命令REN 该命令用来更改文件名,格式为: REN<旧文件路径名><新文件名> 旧文件路径名定义同第一点中的文件路径名,文件名中可用通配符“*”和“? ”。 例如: 若要将D盘MASM目录下的test.lst文件改名为test.asm,其DOS命令为: REND: \MASM\TEST.LSTTEST.ASM 3.文件复制命令COPY 该命令将一个或多个文件复制成副本,格式为: COPY<文件路径名><文件路径名> 文件路径名定义同第一点中的文件路径名,文件名中可用通配符“*”和“? ”。 例如: 若要将D盘MASM目录下的所有扩展名为ASM的文件复制到C盘的EXAMPLE目录下,其DOS命令为: COPYD: \MASM\*.ASMC: \EXAMPLE 若要将当前目录下的TEST.ASM文件复制成TEST1.ASM,其DOS命令为: COPYTEST.ASMTEST1.ASM 4.文件删除命令DEL 该命令将一个或多个文件删除,格式为: DEL<文件路径名> 文件路径名定义同第一点中的文件路径名,文件名中可用通配符“*”和“? ”。 例如: 若要将D盘MASM目录下的所有扩展名为ASM的文件删除,其DOS命令为: DELD: \MASM\*.ASM 5.建立子目录命令MD 该命令用于建立子目录,格式为: MD<目录路径名> 目录路径名定义同第一点中的目录路径名。 例如: MDSUBDIR1 MD\SUBDIR1\SUBDIR2 MD\USER1 其中第一条命令在当前目录下建一个名为SUBDIR1的子目录;第二条命令在子目录SUBDIR1中建立SUBDIR2子目录;第三条命令表示在根目录中建立USER1子目录。 6.删除子目录命令RD 该命令用于删除一个空目录,但不允许删除根目录和当前目录,格式为: RD<目录路径名> 目录路径名定义同第一点中的目录路径名。 例如: 若要删除根目录下的USER1子目录,其DOS命令为: RD\USER1 在删除USER1子目录前,子目录USER1必须为空,且USER1不是当前目录。 7.改变当前目录命令CD 该命令用于显示或改变当前目录,格式为: CD[<目录路径名>] 目录路径名定义同第一点中的目录路径名。 例如: CD\USER1 CD\ CD.. CD 其中第一条命令是将根目录下的USER1子目录设为当前目录;第二条命令是将根目录设为当前目录;第三条命令是将当前目录的上一级目录设为当前目录(即退回到上一级目录)。 第四条命令为显示当前目录。 8.设置可执行文件的搜索路径命令PATH 用户在当前目录中工作时,时常会运行其它目录下的可执行文件(即扩展名为EXE或COM的文件),PATH命令可满足这一要求。 PATH命令用来指出,假如在当前目录中找不到可执行文件时应进一步去查找的目录。 格式为: PATH[<目录路径名>][;<目录路径名>…] 若命令不带参数,将显示当前设置的搜索路径。 例如将搜索路径设置为C盘的DOS目录以及D盘的MASM目录的DOS命令为: PATHC: \DOS;D: \MASM 附录2DEBUG主要命令 DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1.DEBUG程序的调用 在DOS的提示符下,可键入命令: C: >DEBUG[d: ][path][文件名][参数1][参数2] 其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。 2.DEBUG的主要命令 显示内存单元内容的命令D,格式为: -D[地址]或-D[范围] 例如,显示指定范围内存单元内容的方法为: -D1001FF 18E4: 01004706040238014706-0602000247060802G...8.G.....G... 18E4: 011002023B0402680200-4D20505156578B37..;..h..MPQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。 这里没有指定段地址,D命令自动显示DS段的内容。 修改内存单元内容的命令E,它有两种格式 1)用给定内容代替指定范围的单元内容,格式为: -E地址内容表 例如: -EDS: 100F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS: 100到DS: 104的内容。 2)逐个单元相继地修改,格式为: -E地址 例如: -EDS: 100 18E4: 010089.78 此命令是将0100单元内容89改为78。 78是程序员从键盘输入的。 程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。 检查和修改寄存器内容的命令R,它有三种方式 1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态 -R 该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。 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 系统响应如下: AXF130 : 表示AX当前内容为F130,此时若不对其作修改,可按“回车”键,否则,键入修改内容。 3)显示和修改标志寄存器内容 -RF 系统将给出响应,例如: OVDNEINGZRACPECY- 这时若不作修改可按“回车”,否则在“-”之后键入修改值,键入顺序任意,各标志位的取值如上表所示。 运行命令G,格式为: -G[=地址1][地址2[地址3…]] 其中,地址1指定了运行的起始地址,后面的均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容和下一条要执行的指令。 跟踪命令T,它有两种格式: 1)逐条指令跟踪,格式为: -T[=地址] 该命令从指定地址起执行一条指令后停下来,显示所有寄存器及标志位的内容,如未指定地址从当前的CS: IP开始执行。 2)多条指令跟踪,格式为: -T[=地址][值] 该命令从指定地址起执行n条指令后停下来,n由[值]确定。 汇编命令A,格式为: -A[地址] 该命令允许输入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。 必须注意: 输入的数字均默
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 汇编语言 程序设计 实验 指导书