汇编语言程序设计-实验指导书部分

更新时间:2024-04-25 22:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《汇编语言程序设计》实验指导书

汇编语言程序设计

实验指导书

浙江工业大学计算机学院

2015-3-1

1

《汇编语言程序设计》实验指导书

汇编语言程序设计实验指导书

《汇编语言程序设计》是一门实践性很强的课程,只有多上机操作,对汇编语言源程序进行编辑、汇编、连接、调试和运行全过程的训练,才能加深对本课程基本知识的理解,才能熟练地掌握程序设计的方法与技巧,才能学好本课程。

本实验指导书是完全按照《汇编语言程序设计》教学考试大纲中课内实践教学安排的要求编写的,为便于考生较好完成上机操作和实验报告,特此作出如下说明和要求:

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

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

(3)完成实验报告:做完上机实验,应考者要严格按照实验报告模板的格式要求写出实验报告。

2

《汇编语言程序设计》实验指导书

实验一 DEBUG的使用

(一)实验目的

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

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

(二)实验设备

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

软件环境:操作系统DOS3.0版本以上 调试程序DEBUG.COM

(三)实验内容和要求

实验内容:

1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为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:0100 MOV AX,[0200]↙ 186E:0103 MOV BX,[0202]↙ 186E:0107 ADD AX,[0204]↙ 186E:010B ADC BX,[0206]↙ 186E:010F MOV [0208],AX↙ 186E:0112 MOV [020A],BX↙

3

《汇编语言程序设计》实验指导书

186E:0116 ↙

4、用“U”命令反汇编验证源程序 –U CS:0100↙

186E:0100 A10002 MOV AX,[0200] 186E:0103 8B1E0202 MOV BX,[0202] 186E:0107 03060402 ADD AX,[0204] 186E:010B 131E0602 ADC BX,[0206] 186E:010F A30802 MOV [0208],AX 186E:0112 891E0A02 MOV [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单元的内容

–D 200 20B ↙

7、用“G”命令运行源程序 –G =110 0116 ↙

8、再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容 –D 200 20B↙

9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存

器内容的变化,并与预计的结果相比较。 注意:

? D命令显示内存数据,注意观察多字节数据在内存中的存放方式。 ? 指令执行的时候,IP寄存器随着变化,注意观察。

(六)实验结果分析

1、程序运行结果:(AX)= ,(BX)= DS:0208H四字节单元的内容: 2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。(参考

4

《汇编语言程序设计》实验指导书

下列程序流程图)

开始

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个字节里。

5

《汇编语言程序设计》实验指导书

实验二 顺序程序设计

(一)实验目的

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

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

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

(二)实验设备

硬件环境:IBM-PC及其兼容机 软件环境:操作系统DOS3.0以上

编辑程序 EDIT或其它编辑程序 汇编程序 MASM.EXE 6.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调入宏汇编程序,用以对源程序进行汇编。

6

《汇编语言程序设计》实验指导书

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

C:>MASM↙

Microsoft (R) Macro Assembler Version 5.00

Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. Source filename [.ASM]:EXAMPLE↙ Object filename [EXAMPLE.OBJ]: ↙ Source listing [NUL.LST]:EXAMPLE↙ Cross reference [NUL.CRF]:EXAMPLE↙ Warning Severe Errors Errors 0 0 C:>

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

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

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

(c)询问用户是否要建立汇编列表文件,若要,则打入文件名,否则按回车; (d)询问用户是否要建立交叉索引文件,若要,则打入文件名,否则按回车。 注意:

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

4、在DOS提示符下,打入LINK调用连接程序,以便对目标文件进行连接。产生可执行EXE文件。操作如下所示:

C:> LINK

Microsoft (R) Overlay Linker Version 3.60

Copyright (C) Microsoft Corp 1983-1987. All rights reserved. Object Modules [.OBJ]: EXAMPLE↙ Run File [EXAMPLE.EXE]: ↙ List File [NUL.MAP]: ↙ Libraries [.LIB]: ↙

Warning: No STACK segment There was 1 error detected. C:>

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

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

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

7

《汇编语言程序设计》实验指导书

则直接按回车;

(c)询问用户是否要建立地址分配文件,若要,则打入文件名,否则按回车; (d)询问用户是否用到库文件,如果用户自己建立了库文件,则键入库文件名,否则按回车。

连接程序在连接过程发现有错,则会显示出错信息,用户应重新调用编辑程序对源程序进行修改,然后重新汇编、连接、直至无错。但连接程序给出的无堆栈段的警告性错误并不影响程序的执行,所以,到此为止,连接过程已经结束,生成了有效的可执行程序。

5、在DOS提示符下,直接输入EXE文件名,运行程序。 C:>EXAMPLE ↙ 注意:

此时可能屏幕上没有任何显示,因为你没有让结果显示在屏幕上,但是你的计算结果必然在内存中。所以应该采用DEBUG进行动态调试。

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

C:>DEBUG EXAMPLE.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中。

8

《汇编语言程序设计》实验指导书

(一)实验目的

实验三 分支程序设计(1)

1、掌握多路分支IF…Else IF…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) 用地址表和转移表法实现时,必须找出分数与地址表和转移表的偏移的

对应关系。

9

《汇编语言程序设计》实验指导书

实验四 分支程序设计(2)

(一)实验目的

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

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

(二)实验设备

同实验二

(三)实验内容和要求

实验内容

有一个管理软件可接受7个键盘命(分别为1、2、3、??、7),根据键入的命令分别转向PROCA、PROCB、??、PROCG标号处执行,分别显示星期一——星期天的英文字符串。(要求用地址表法完成具有上述功能的多路分支程序的设计。)

其它要求同实验二

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

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

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

(七)编程提示

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

TAB DW PROCA DW PROCB DW PROCC ?

DW PROCG Data End (b)程序流程图

10

《汇编语言程序设计》实验指导书

N

开始 输入键盘符→AL ‘1’≤(AL)≤‘7’ Y (AL)-30H?AL (AL)*2→AX 地址表的首地址→BX (BX)+(AX)→BX 转入对应程序段显示星期英文名 结束 11

《汇编语言程序设计》实验指导书

实验五 循环程序设计(1)

(一)实验目的

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

2、弄清直接排序的算法。 3、弄清冒泡排序方法。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。设计程序完成如下功能:

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

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

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

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

(七)编程提示

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

12

《汇编语言程序设计》实验指导书

开始 (BX)→SI,(CH)→CL,((SI))→AL Y (AL)≤((SI)+1) N (AL)?( (SI)+1) CL)-1→CL (SI)+1→SI,(N (CL)=0 Y BX) (AL)→( (BX)+1→BX,(CH)-1→CH N (CH)=0 Y 结束 数组首地址→BX 数组长度100-1→CH 13

《汇编语言程序设计》实验指导书

实验六 循环程序设计(2)

(一)实验目的

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

2、弄清简单查找和复杂查找如折半查找等的编程方法。 3、掌握循环程序的结构和设计方法。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。设计程序完成如下功能:

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

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

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

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

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

(七)编程提示

(a)在数据段定义100个无符号字节数。 (b)程序流程图

14

《汇编语言程序设计》实验指导书

N 开始 调用DOS1号功能将数的十位字符→AL ‘0’≤(AL)≤‘9’

N (AL)→AH 调用DOS 21号功能将数的个位字符→AL

‘0’≤(AL)≤‘9’ Y (AH)∧0FH→AH

(AL)∧0FH→AL (AH)*10+(AL)→AL 数组的首地址→BX

数组的长度100→CX

( Y (AL) = ? (BX)) N (BX)+1→BX

(CX)-1→CX

N ? (CX)= 0 Y ‘N’→DL

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

‘Y’→DL 结束15

《汇编语言程序设计》实验指导书

实验七 子程序设计(1)

(一)实验目的

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

2、深刻认识堆栈在子程序设计中所起的作用 3、掌握子程序调试的技巧。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

内存中有一字节型无符号数缓冲区Data,长度为100。将Data缓冲区显示到屏幕上,分别用二进制,十进制和十六进制。要求:

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

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、理解3种参数传递方式各有什么特点 2、绘制一般子程序的结构。

(七)编程提示

(a) 二进制显示可采用移位并判断该位的方式进行。 (b) 十进制数采用除以10取商的方式。

(c) 十六进制数可利用二进制转换位十六进制的方法进行。 (d) 注意去掉最高位的“0”。

16

《汇编语言程序设计》实验指导书

实验八 子程序设计(2)

(一)实验目的

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

2、深刻认识堆栈在子程序设计中所起的作用 3、掌握子程序调试的技巧。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

已知某密码由英文字母A、B、C??Z组成且以ASCII码形式存放在以CIPHER为首地址的存储区中,试统计各字母在此密码中出现的次数并依次存入以CHAR为首地址的26个字节中,最后将字母出现的次数以十六进制形式显示出来(设出现的次数≤255),显示格式为:

A XXH B XXH Z XXH 要求:

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

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、叙述调用子程序和子程序返回对堆栈的操作过程。 2、绘制一般子程序的结构。

(七)编程提示

(e) 主程序流程图

17

《汇编语言程序设计》实验指导书

开始 26→CX,‘A’→DL,0→SI 0→AL,0→BX Y (AL)+1→AL N (CIPHER[BX])=(DL) (BX)+1→BX N

字符串结尾吗? Y (AL)→CHAR[SI],(SI)+1→SI 调用DISP子程序显示一行信息 (DL)+1→DL (CX)-1→CX N

(CX)=0 Y

18

结束 《汇编语言程序设计》实验指导书

(b)子程序DISP流程图

开始 调用DOS2号功能显示DL的内容 调用DOS9功能显示字符串“?” (AL)→DL DL的内容逻辑右移4位 (DL)+30H→DL ( DL )≤ 39H Y

N (DL)+7→DL

调用DOS2号功能显示DL的内容 (AL)→DL (DL)∧0FH→DL (DL)+30H→DL Y (DL)≤39H

19

N (DL)+7→DL 调用DOS2号功能显示DL的内容 调用DOS2号功能回车、换行 结束 《汇编语言程序设计》实验指导书

实验九 宏指令、多模块和输入输出程序设计

(一)实验目的

1、熟悉宏指令的写法

2、掌握多模块程序的编写和通讯方式 3、掌握输入输出程序设计

(二)实验设备

同实验二

(三)实验内容和要求

1.编写一条宏指令完成求3个数的最大值,原型为MAX3(a,b,c)。 2.在模块一中定义字符串STRING,在模块二中编写一子程序PRINT打印STRING字符串,同时在模块一中调用PRINT函数。

3.编写一个简单发声程序,通过控制61H端口的次低位从而控制扬声器。 同实验二

(四)预习要求 (五)实验步骤

同实验二

(六)实验结果分析

1、分别完成所要求功能。

(七)编程提示

1、模块通讯采用extrn和public两个关键字。

20

本文来源:https://www.bwwdw.com/article/oj6p.html

Top