黑龙江大学软件学院汇编实验报告实验四.docx
《黑龙江大学软件学院汇编实验报告实验四.docx》由会员分享,可在线阅读,更多相关《黑龙江大学软件学院汇编实验报告实验四.docx(22页珍藏版)》请在冰豆网上搜索。
黑龙江大学软件学院汇编实验报告实验四
实验报告
课程名称
汇编语言
实验项目名称
汇编语言上机
实验时间
(日期及节次)
2012.4.23,两节
专业
软件工程
学生所在学院
软件学院
年级
大一
学号
20113311
姓名
杜常数
指导教师
史新奕
实验室名称
第三实验室
实验成绩
预习情况
操作技术
实验报告
附加:
综合创新能力
实验
综合成绩
教师签字
黑龙江大学教务处
汇编语言
实验报告
黑龙江大学软件学院
2012年4月
实验名称:
串操作程序设计
实验目的1.掌握串操作指令。
2.利用串操作指令编程。
实验类型
实验环境
实验环境(软件和硬件环境):
硬件环境:
IBM-PC及其系列机
内存256KB以上
外存:
硬盘或至少一个软驱
CPU:
80586以上
显示器:
单色或彩色显示器
键盘:
标准ASCII码键盘
软件环境:
编缉器:
EDIT.COM或其它编缉器
汇编程序:
MASM.EXE
连接程序:
LINK.EXE
调试程序:
DEBUG.EXE
主要设计思想与算法
利用字符串处理指令对字符串进行简单处理
1.编写程序,将数据段中的字符串STRING的内容复制到附加段中的缓冲区BUFFER中,然后将EXTRA段中的字符串输出到显示器。
程序如下:
DATASEGMENT
STRINGDB'COPYUSPLEASE!
$';字符串定义,每个字符占用一个字节。
DATAENDS
EXTRASEGMENT
BUFFERDB16DUP(?
);为BUFFER分配了16个字节的存储空间。
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
EXTRA
START:
MOVAX,DATA
MOVDS,AX;数据段段地址送DS寄存器
MOVAX,EXTRA
MOVES,AX;附加段段地址送ES寄存器
LEASI,STRING
LEADI,BUFFER
MOVCX,16
CLD
REPMOVSB
MOVAH,09H
LEADX,BUFFER
INT21H
MOVAH,4CH
INT21H;程序退出
CODEENDS
ENDSTART
2.编写程序,利用串比较指令比较数据段和附加段中两个字符串,如果两串相等输出Y否则输出N,利用DEBUG调试程序分析串比较指令执行后CX、SI、DI的值。
程序如下:
DATASEGMENT
STRINGDB'ABCDEFG$';字符串定义,每个字符占用一个字节。
NDB'N$'
YDB'Y$'
DATAENDS
EXTRASEGMENT
BUFFERDB'ABCDEFG$';为BUFFER分配了15个字节的存储空间。
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
EXTRA
START:
MOVAX,DATA
MOVDS,AX;数据段段地址送DS寄存器
MOVAX,EXTRA
MOVES,AX;附加段段地址送ES寄存器
LEASI,STRING
LEADI,BUFFER
MOVCX,7
CLD
REPECMPSB
JNZDIFFERENT
MOVAH,09H
LEADX,Y
INT21H
JMPEXIT
DIFFERENT:
MOVAH,09H
LEADX,N
INT21H
EXIT:
MOVAH,4CH
INT21H;程序退出
CODEENDS
ENDSTART
3.编写程序,将附加段中的缓冲区BUFFER全部赋值为’@’,然后将字符数组BUFFER的内容输出到显示器。
程序如下:
EXTRASEGMENT
BUFFERDB15DUP(?
);为BUFFER分配了15个字节的存储空间。
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,ES:
EXTRA
START:
MOVAX,EXTRA
MOVES,AX;附加段段地址送ES寄存器
MOVAL,'@'
LEADI,BUFFER
MOVCX,14
CLD
REPSTOSB
MOVAL,'$'
MOVES:
[DI],AL
MOVAH,09H
LEADX,BUFFER
INT21H
MOVAH,4CH
INT21H;程序退出
CODEENDS
ENDSTART
4.编写完整程序,在附加段中的字数组中查找是否有数100,有则输出Y,否则输出N。
程序如下:
DATASEGMENT
YDB'Y$'
NDB'N$'
DATAENDS
EXTRASEGMENT
ARRAYDW1,2,3,4,93,100,38,48
EXTRAENDS
CODESEGMENT
ASSUMECS:
CODE,ES:
EXTRA,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,EXTRA
MOVES,AX;附加段段地址送ES寄存器
MOVCX,8
LEADI,ARRAY
MOVAX,100
CLD
REPNESCASW
JZFOUND;结果为零跳了至FOUND
MOVAH,09H;否则未找到
LEADX,N
INT21H
JMPEXIT
FOUND:
MOVAH,09H
LEADX,Y
INT21H
EXIT:
MOVAH,4CH
INT21H;程序退出
CODEENDS
ENDSTART
实验结果(测试用例、实验结果)
1汇编并连接HB41.ASM,生成HB1.exe文件
执行HB41.EXE文件
对HB41.EXE进行调试
用T命令分步执行,观察CX,SI,DI的值变化情况
程序执行REPZMOVSBCX的值由000F变为0000,SI,DI分别由0000变为0010;
用D命令查看附加段的值
2.
对HB42.ASM文件进行汇编连接工作
执行生成文件HB42.EXE
对HB42.EXE文件进行调试-U查看所有值
用-T进行分步调试
进行比较前将BUFFER偏移地址给DI,STRING偏移地址给SI
记录CX=0007,SI=0000,DI=0000
观察程CX,SI,DI的值变化
最后比较结束CX=0000,SI=0007,DI=0007
输出为Y说明两字符串完全相同
完成调试后退出
3.
完成对HB43.ASM文件的汇编和连接生成HB43.EXE文件
执行后在屏幕上输出一串@符号
调试HB43.EXE
分步执行调试
记录并观察CX,DI的值变化情况。
程序正常运行结束后用-D命令查看ES段的值
4.
对HB44.ASM文件进行汇编连接
执行HB44.EXE文件,屏幕上输出‘Y’
对HB43,.EXE进行调试
-U查看所有值的情况
-T分步运行
记录CX=0008,DI=0000
CX=0002,DI=000C时发生跳转IP=0024,说明查找到了要找的数据
正常运行,退出
实验总结