汇编语言程序设计实验手册专科范文.docx

上传人:b****6 文档编号:7750398 上传时间:2023-01-26 格式:DOCX 页数:26 大小:100.87KB
下载 相关 举报
汇编语言程序设计实验手册专科范文.docx_第1页
第1页 / 共26页
汇编语言程序设计实验手册专科范文.docx_第2页
第2页 / 共26页
汇编语言程序设计实验手册专科范文.docx_第3页
第3页 / 共26页
汇编语言程序设计实验手册专科范文.docx_第4页
第4页 / 共26页
汇编语言程序设计实验手册专科范文.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计实验手册专科范文.docx

《汇编语言程序设计实验手册专科范文.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验手册专科范文.docx(26页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计实验手册专科范文.docx

汇编语言程序设计实验手册专科范文

《汇编语言程序设计》

实验指导手册

编写:

熊书兴陶国武

南昌理工学院计算机系

2007-4

《汇编语言程序设计》

实验指导手册

《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节。

本指导手册依照我系各类计算机专科专业教学大纲,根据人民邮电出版社的《汇编语言程序设计》(梁发寅著)教材编写而成。

本指导手册共计有编有10个实验,在实际实验过程中可以按照实际教学进度情况加以增删。

每个实验都应做到:

1.做好上机实验的准备工作:

应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。

2.编写源程序:

按照实验题目的要求,应考者要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。

3.完成实验报告:

做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。

实验报告的内容为:

实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。

实验一汇编语言上机环境

(一)实验目的

熟悉汇编语言上机环境

掌握汇编语言上机过程与步骤

(二)实验器材与实验准备

实验器材:

硬件:

微机一台

软件:

DOS或WIN98/2000/XP

MASM.EXE和LINK.EXE

实验准备:

cs1segment

assumecs:

cs1,ds:

cs1

start:

pushcs

popds

movah,0

int10h

leadx,str0

movah,9

int21h

movah,4ch

int21h

str0db'hello','$'

cs1ends

endstart

(三)实验内容和要求

1.建立汇编源程序文件

2.逐步汇编,连接生成可执行文件

3.运行生成的可执行文件

(四)实验步骤:

1.在记事本中编辑原文件

2.将MASM.EXE和LINK.EXE以及原文件拷贝在同一目录下

3.汇编原文件

4.连接目标文件

5.执行可执行文件

(五)实验结果分析

在生成可执行文件过程中,一共生成了多少个相关的文件,它们的作用分别是什么?

实验二DEBUG的使用

(一)实验目的

1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程

序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

(二)实验设备

硬件环境:

IBM-PC及其兼容机软件环境:

操作系统DOS3.0版本以上

调试程序DEBUG.COM

(三)实验内容和要求

实验内容:

1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和

“006BE5C4H”分别送入起始地址为DS:

0200H和DS:

0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:

0200H单元和DS:

0204H单元中的数据相加,并将运算结果存放在DS:

0208H单元中。

实验要求:

本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

(四)预习要求

1、复习DOS启动方式和DOS有关命令的使用;

2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、

R、T、U命令的书写格式及功能;

3、复习寻址方式和相关的数据传送指令及算术运算指令。

(五)实验步骤

1、启动DOS操作系统

2、运行DEBUG.COM程序(若当前盘为C)

C>DEBUG↙

–;“(–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG

命令)

3、用“A”命令编辑和汇编源程序

–A↙

186E:

0100MOVAX,[0200]

186E:

0103MOVBX,[0202]

186E:

0107ADDAX,[0204]

186E:

010BADCBX,[0206]

186E:

010FMOV[0208],AX↙

186E:

0112MOV[020A],BX↙

186E:

0116↙

4、用“U”命令反汇编验证源程序

–UCS:

0100↙

186E:

0100A10002MOVAX,[0200]

186E:

01038B1E0202MOVBX,[0202]

186E:

0107ADDAX,[0204]

186E:

010B131E0602ADCBX,[0206]

186E:

010FA30802MOV[0208],AX

186E:

0112891E0A02MOV[020A],BX

186E:

0116

注意:

检查源程序是否有错误,若有则返回到第3步用“A地址”命令进行修改,直到程序无错误。

DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。

在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。

在DEBUG下,大小写不敏感。

5、程序未执行前,用“R”命令观察,相关寄存器的内容。

–R↙

如:

(AX)=,(BX)=,(SI)=,

(DI)=,(CS)=,(IP)=。

6、在程序未执行前,用“D”命令观察DS:

0200H,DS:

0204H、DS:

0208H

单元的内容

–D20020B↙

7、用“G”命令运行源程序

–G=1100116↙

8、再用“D”命令观察DS:

0200H~DS:

020BH字节单元中的内容

–D20020B↙

9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。

注意:

D命令显示内存数据,注意观察多字节数据在内存中的存放方式。

指令执行的时候,IP寄存器随着变化,注意观察。

(六)实验结果分析

1、程序运行结果:

(AX)=,(BX)=

DS:

0208H四字节单元的内容:

2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。

(参考

 

 

下列程序流程图)

 

开始

 

SI←200H

 

DI←204H

 

BX←208H

 

AX←(SI)

DX←(SI)+2

 

AX←(AX)+(DI)

DX←(DX)+((DI)+2)

 

(BX)←(AX)

((BX)+2)←(DX)

 

结束

 

3、附加题目:

1.从DS:

0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:

540,1,-1,1080,0,试求w=(v-(x*y+z-540))/x

2.完成BX中1的个数的统计。

3.用串操作指令将DS:

0000开始20个字节初始化为:

0CCH。

并将这20

个字节的内容复制到其后的20个字节里。

实验三顺序程序设计

(一)实验目的

1、学习算术运算(加、减、乘、除)和扩展指令的用法;

2、掌握顺序程序结构和设计方法;

3、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

(二)实验设备

硬件环境:

IBM-PC及其兼容机软件环境:

操作系统DOS3.0以上

编辑程序EDIT或其它编辑程序汇编程序MASM.EXE6.1X连接程序LINK.EXE

调试程序DEBUG.COM

(三)实验内容和要求

实验内容:

X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:

①计算表达式值(V–(X*Y+Z-720))/X;

②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

要求:

①编写出完整的汇编语言源程序,根据题目的需要建立相应的逻辑段(如程序段、数据段)。

②可选用任何一种编辑程序在磁盘上建立一个源文件(扩展名为.ASM)。

③用宏汇编程序MASM对源文件进行汇编,生成目标文件(扩展名为.OBJ)。

④用连接程序LINK对目标文件进行连接,生成可执行程序.EXE文件。

⑤用DEBUG调试程序对源程序进行动态调试。

(四)预习要求

1、复习掌握8086指令系统相关指令,按实验内容和要求预先编写好源程序;

2、熟悉在宏汇编程序MASM环境下,对源程序进行编辑、汇编、连接、运行。

3、进一步熟练用DEBUG对源程序进行动态调试,掌握一些常用的调试命令和方法。

(五)实验步骤

1、启动DOS操作系统;

2、调用某种编辑程序,在磁盘上建立扩展名为ASM的源程序;

3、在DOS提示下,打入MASM调入宏汇编程序,用以对源程序进行汇编。

 

 

设在磁盘上已建立了一个EXAMPLE.ASM源程序,操作如下所示:

C:

>MASM↙

Microsoft(R)MacroAssemblerVersion5.00

Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Sourcefilename[.ASM]:

EXAMPLE↙

Objectfilename[EXAMPLE.OBJ]:

Sourcelisting[NUL.LST]:

EXAMPLE↙Crossreference[NUL.CRF]:

EXAMPLE↙WarningSevere

ErrorsErrors

00

C:

汇编程序MASM需要和用户进行上述相关信息交互,以便进行汇编、生成相应的文件。

(a)提示用户输入需要汇编的源程序名;

(b)提示用户输入要建立的目标文件名,若默认括弧内的目标文件名,则可直接按回车;

(c)询问用户是否要建立汇编列表文件,若要,则打入文件名,否则按回车;

(d)询问用户是否要建立交叉索引文件,若要,则打入文件名,否则按回车。

注意:

仅当屏幕上显示无错误时(警告错误为“0”,严重错误为“0”),才可进行下一步骤连接,否则要根据提供源程序的错误行号和错误性质,重新对源程序进行修改、编辑和汇编。

4、在DOS提示符下,打入LINK调用连接程序,以便对目标文件进行连

接。

产生可执行EXE文件。

操作如下所示:

C:

>LINK

Microsoft(R)OverlayLinkerVersion3.60

Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.ObjectModules[.OBJ]:

EXAMPLE↙

RunFile[EXAMPLE.EXE]:

ListFile[NUL.MAP]:

Libraries[.LIB]:

Warning:

NoSTACKsegmentTherewas1errordetected.C:

连接程序Link需要和用户进行上述相关信息交互,以便连接和生成相应的文件。

(a)提示用户输入需要连接的目标模块名;

(b)提示用户输入要建立的可执行文件名,若默认括弧内的可执行文件名,

则直接按回车;

(c)询问用户是否要建立地址分配文件,若要,则打入文件名,否则按回车;

(d)询问用户是否用到库文件,如果用户自己建立了库文件,则键入库文件名,否则按回车。

连接程序在连接过程发现有错,则会显示出错信息,用户应重新调用编辑程序对源程序进行修改,然后重新汇编、连接、直至无错。

但连接程序给出的无堆栈段的警告性错误并不影响程序的执行,所以,到此为止,连接过程已经结束,生成了有效的可执行程序。

5、在DOS提示符下,直接输入EXE文件名,运行程序。

C:

>EXAMPLE↙注意:

此时可能屏幕上没有任何显示,因为你没有让结果显示在屏幕上,但是你的计算结果必然在内存中。

所以应该采用DEBUG进行动态调试。

6、调用DEBUG程序对EXE文件进行动态调整,其方法和步骤与实验一相同。

C:

>DEBUGEXAMPLE.EXE

再可以用U,D,T,G等命令进行调试,其方法和步骤与实验一相同。

(六)实验结果分析

1、程序运行结果:

SUM1单元:

;SUM2单元:

2、若在X、Y、Z、V字单元中存放的均为无符号数,对相关十六位二进制数进行扩展,采用什么方法可以实现?

(七)编程提示

(a)执行16位IMUL指令运算结果乘积在DX、AX中。

(b)相加或相减的二个数长度一定要相同,注意使用CWD扩展指令将(AX)

→DX、AX。

(c)使用16位IDIV指令一定要将被除数放在DX、AX中。

实验四分支程序设计

(1)

(一)实验目的

1、掌握多路分支IF…ElseIF…Else程序结构和设计方法。

2、学会使用地址表和转移表法写多路分支程序。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。

假设学生成绩在[90,100]区间为优秀,在[80,90)区间为良好,在[70,80)区间为一般,在[60,70)区间为及格,在[0,60)区间为不及格,要求统计出不及格,及格,一般,良好和优秀的人数,分别送入Notpassed,Passed,Good,Better和Best字节单元。

1.用普通的跳转语句实现上述功能。

2.用地址表法和转移表实现。

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、确认不及格,及格,一般,良好和优秀的人数总和是否为100。

(七)编程提示

a)用普通的跳转语句实现上述功能时,区分不及格,及格,一般,良好和优秀5个区间,是一个5分支的结构,至少需要4条跳转指令。

b)注意无符号数和有符号数使用跳转指令的区别。

c)用地址表和转移表法实现时,必须找出分数与地址表和转移表的偏移的对应关系。

实验五分支程序设计

(2)

(一)实验目的

1、熟悉与转移地址有关寻址方式的使用。

2、掌握多路分支程序的结构和设计方法。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容

有一个管理软件可接受7个键盘命(分别为1、2、3、……、7),根据键入的命令分别转向PROCA、PROCB、……、PROCG标号处执行,分别显示星期一——星期天的英文字符串。

(要求用地址表法完成具有上述功能的多路分支程序的设计。

其它要求同实验二

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、若改用转移表法来实现多路分支,程序如何修改?

2、若采用二路分支判别条件的方法来实现多路分支,程序的缺点是什么?

(七)编程提示

(a)在数据段建立地址表

Datasegment

TABDWPROCADWPROCBDWPROCC

DWPROCGDataEnd

(b)程序流程图

 

开始

 

输入键盘符→AL

 

N‘1’≤(AL)≤‘7’

Y

(AL)-30H⇒AL

(AL)*2→AX

地址表的首地址→BX

(BX)+(AX)→BX

 

转入对应程序段显示星期英文名

 

结束

实验六循环程序设计

(1)

(一)实验目的

1、掌握多重循环程序的结构和设计方法。

2、弄清直接排序的算法。

3、弄清冒泡排序方法。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。

设计程序完成如下功能:

①采用直接排序法对数组进行由小到大排序;

②采用冒泡排序方式对数组进行由大到小排序;

③将最高和最低的分数分别存放在MIN和MAX单元中。

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、对数据进行排序对查找有什么意义?

(七)编程提示

(a)采用冒泡排序算法进行排序程序流程图

 

开始

 

数组首地址→BX

数组长度100-1→CH

 

(BX)→SI,(CH)→CL,((SI))→AL

 

(AL)≤((SI)+1)Y

N

(AL)((SI)+1)

 

(SI)+1→SI,(CL)-1→CL

 

N(CL)=0

Y

(AL)→(BX)

 

(BX)+1→BX,(CH)-1→CH

 

N(CH)=0

Y

结束

实验七循环程序设计

(2)

(一)实验目的

1、学习循环控制指令的用法。

2、弄清简单查找和复杂查找如折半查找等的编程方法。

3、掌握循环程序的结构和设计方法。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。

设计程序完成如下功能:

①根据用户输入的一个2位十进制数,作为查找对象,在该数组中查找,若找到则显示“Y”,若没找到则显示“N”。

②根据用户输入的一个2位十六进制数,作为查找对象,在该数组中查找,若找到则显示“Y”,若没找到则显示“N”。

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、若在数据区Score内能够找到输入的数据,则在屏幕上显示“Found,”否则显示“Notfound”,程序如何修改?

2、如果分数已经从小到大进行了排序,采用折半查找应如何进行?

(七)编程提示

(a)在数据段定义100个无符号字节数。

(b)程序流程图

 

开始

 

调用DOS1号功能将数的

十位字符→AL

 

N‘0’≤(AL)≤‘9’

 

(AL)→AH

 

调用DOS21号功能将数

的个位字符→AL

 

N

‘0’≤(AL)≤‘9’

Y

(AH)∧0FH→AH

(AL)∧0FH→AL

(AH)*10+(AL)→AL

 

数组的首地址→BX

数组的长度100→CX

 

(AL)=?

((BX))Y

N

(BX)+1→BX

(CX)-1→CX

N(CX)?

=0

Y

‘N’→DL

 

‘Y’→DL

 

调用DOS2号功能输出显示字符

 

结束

实验八子程序设计

(1)

(一)实验目的

1、掌握子程序的设计方法和调用方式

2、深刻认识堆栈在子程序设计中所起的作用

3、掌握子程序调试的技巧。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

内存中有一字节型无符号数缓冲区Data,长度为100。

将Data缓冲区显示到屏幕上,分别用二进制,十进制和十六进制。

要求:

1.编写子程序将一个字节数用二进制进行显示,参数用内存数传递;

2.编写子程序将一个字节数用十进制进行显示,参数用寄存器数传递;

3.编写子程序将一个字节数用十六进制进行显示,参数用堆栈传递;

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、理解3种参数传递方式各有什么特点

2、绘制一般子程序的结构。

(七)编程提示

(a)二进制显示可采用移位并判断该位的方式进行。

(b)十进制数采用除以10取商的方式。

(c)十六进制数可利用二进制转换位十六进制的方法进行。

(d)注意去掉最高位的“0”。

实验九子程序设计

(2)

(一)实验目的

1、掌握子程序的设计方法和调用方式

2、深刻认识堆栈在子程序设计中所起的作用

3、掌握子程序调试的技巧。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

已知某密码由英文字母A、B、C……Z组成且以ASCII码形式存放在以

CIPHER为首地址的存储区中,试统计各字母在此密码中出现的次数并依次存入

以CHAR为首地址的26个字节中,最后将字母出现的次数以十六进制形式显示出来(设出现的次数≤255),显示格式为:

AXXHBXXH

ZXXH

要求:

将“8位二进制数转换成十六进制数并显示出来”的功能用子程序完成。

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、叙述调用子程序和子程序返回对堆栈的操作过程。

2、绘制一般子程序的结构。

(七)编程提示

(e)主程序流程图

开始

 

26→CX,‘A’→DL,0→SI

 

0→AL,0→BX

 

(CIPHER[BX])=(DL)N

Y

(AL)+1→AL

 

(BX)+1→BX

 

N

字符串结尾吗?

Y

(AL)→CHAR[SI],(SI)+1→SI

 

调用DISP子程序显示一行信息

 

(DL)+1→DL

(CX)-1→CX

 

N(CX)=0

 

Y

结束

 

 

(b)子程序DISP流程图

开始

 

调用DOS2号功能显示DL的内容

调用DOS9功能显示字符串“…”

 

(AL)→DL

DL的内容逻辑右移4位

(DL)+30H→DL

 

(DL)≤39HY

N

(DL)+7→DL

 

调用DOS2号功能显示DL的内容

 

(AL)→DL

(DL)∧0FH→DL

(DL)+30H→DL

 

(DL)≤39HY

N

(DL)+7→DL

 

调用DOS2号功能显示DL的内容

调用DOS2号功能回车、换行

 

结束

 

实验十中断程序设计

(一)实验目的

1、中断服务子程序的编写。

2、BIOS和DOS中断调用。

(二)实验设备

硬件环境:

IBM-PC及其兼容机软件环境:

操作系统DOS3.0以上

编辑程序EDIT或其它编辑程序汇编程序MASM.EXE6.1X连接程序LINK.EXE

调试程序DEBUG.COM

(三)实验内容和要求

实验内容:

1.编写一个完成的程序,用于输入一个小写字母,输出大写字母。

2.编写一个完成的程序,接收一个字符串,将它输出时全部以大写的方式输出。

要求:

分别用BIOS和DOS中断调用来实现

(四)实验准备

同实验二,并且分析BIOS和DOS中断调用的功能和区别

(五)实验步骤

(略)

(六)实验结果分析

利用实验中源程序中的输出方法,分析BIOS和DOS中断调用的功能和区别

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1