汇编语言程序设计-实验指导书部分
更新时间: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
正在阅读:
汇编语言程序设计-实验指导书部分04-25
合格男友五十条标准10-22
渗漏风险防治专项方案 - 图文02-03
先进制造技术复习资料02-28
碳排放权会计确认与计量初探03-02
高压旋喷桩试验桩施工方案03-25
拉格朗日中值定理01-27
食品药品安全宣传演讲稿范文04-15
18个文言虚词的课文例句及翻译11-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 指导书
- 汇编语言
- 程序设计
- 实验
- 部分
- 2018年应用文写作基础知识复习试题及答案
- 2018初三数学第二章 分式方程的应用专项训练 - 商品销售利润问题
- 2014年羽毛球比赛秩序册(1)(2)
- 全日制国际商务硕士(代码0254)专业学位培养方案
- POP店铺命名规范
- 第三方融资租赁企业的信用风险管理研究
- 先锋桥主桥上部结构安全专项方案
- 软考高级信息系统项目管理师练习题
- 苏教版小学三年级科学上册单元测试题AB卷
- 基于单片机的自动豆浆机控制电路设计毕业设计论文-精品
- 某高新技术企业员工持股平台有限合伙协议
- 2017-2018年沪教版语文小学一年级上册《我们在操场上玩》公开课
- 北京平谷区2017文综一模含答案
- 统筹方法
- K5B标准总册 - 图文
- 青岗坪煤矿42102工作面联合试运转方案
- 严重侵害农民土地承包经营权十二类违法行为
- 辽宁省大石桥市第二高级中学2017 - 2018学年高二语文下学期期末
- 2010年4月份区政协七届四次会议提案答复办理进度情况通 - 图文
- 多塔交叉作业的安全施工方案