汇编实验3.docx
《汇编实验3.docx》由会员分享,可在线阅读,更多相关《汇编实验3.docx(12页珍藏版)》请在冰豆网上搜索。
汇编实验3
学生实验实习报告册
学年学期:
2017-2018学年(春/秋)学期
课程名称:
汇编语言程序设计
学生学院:
计算机科学与技术学院
专业班级:
04011506
学生学号:
2
学生姓名:
联系电话:
重庆邮电大学教务处印制
教师评阅记录表
【重要说明】
●学生提交报告册最终版时,必须包含此页,否则不予成绩评定。
●本报告册模板内容格式除确实因为填写内容改变了布局外,不得变更其余部分的格式,否则不予成绩评定。
报告是否符合考核规范
□符合□不符合
报告格式是否符合标准
□符合□不符合
报告是否完成要求内容
□是□否
报告评语:
报告成绩:
评阅人签名(签章)
年月日
目录
●教师评阅记录表
●实验实习综述报告
●实验实习日志
(本方框及框内文字请在最终版中删除)
【说明】
“实验实习综述报告”和“实验实习日志”至少完成一项,具体视各门课程的评分标准要求确定。
实验实习综述报告
课程名称
汇编语言程序设计
课程编号
040229
开课学院
计算机科学与技术
指导教师
董涛
实验实习地点
综合实验楼B509/B510
学生姓名
学生学号
学院专业
计算机科学与技术
所在班级
04011506
1、实验实习目的及要求
实验目的:
1.掌握比较指令、转移指令和循环指令的使用方法
2.掌握循环结构程序的组成
3.掌握循环程序的设计、调试方法
二、实验实习设备(环境)及要求(软硬件条件)
PC微机一台
三、实验实习项目、内容与步骤
实验内容
1.【示例】求某数据区内负数的个数
2.试编程统计数据区中正数、零和负数的个数。
3.编程求无符号数字节序列中最大值和最小值。
4.从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。
一.实验说明
1.求某数据区内负数的个数
为统计数据区内负数的个数,需逐个判别区内的每一个数据,然后将所有数据中凡是符号位为1的数据个数累加起来,即得到区内包含负数的个数。
参见程序清单.
2.试编程统计数据区中正数、零和负数的个数。
3.编程求无符号数字节序列中最大值和最小值
实验中可使用BH和BL作为暂存现行最大值和最小值,且在初始时将BH和BL初始化为首字节的内容,循环依次比较每个字节的内容,求得最大值(存于BH中)和最小值(存于BL中),送屏幕显示。
4..从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。
二.实验步骤
1.画出实验流程图。
2.运行Tddebug软件,选择Edit菜单编写实验程序
3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
4.使用Rmrun菜单中的Run运行程序,观察运行结果。
5.使用Rmrun菜单中的Debug调试程序。
观察构成分支、循环条件的各标志的变化情况及相关寄存器内容。
更改数据区中的数据,考察程序的正确性。
四、实验实习所得结果及分析
画出实验流程图
参考代码:
;确定数据区NUMB中负数的个数(存放于BL中)
DDATASEGMENT
NUMBDB12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H
MESDB'Thenumberofnegativeis:
$'
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVDI,OFFSETNUMB
XORBL,BL
MOVCX,10
A1:
MOVAL,[DI]
TESTAL,80H
JEA2
INCBL
A2:
INCDI
LOOPA1;统计负数个数
MOVDX,OFFSETMES
MOVAH,09H
INT21H
MOVAL,BL;显示负数个数,注意与实验二所使用的方法的区别
MOVCX,2
A3:
PUSHCX
MOVCL,4
ROLAL,CL
POPCX
MOVBL,AL
ANDAL,0FH
CMPAL,0AH
JBA4
ADDAL,07H
A4:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,BL
LOOPA3
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行Tddebug软件,选择Edit菜单编写实验程序
使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
使用Rmrun菜单中的Run运行程序,观察运行结果。
使用Rmrun菜单中的Debug调试程序。
观察构成分支、循环条件的各标志的变化情况及相关寄存器内容。
更改数据区中的数据,考察程序的正确性。
五、实验实习结果分析和(或)源程序调试过程
要求三从键盘输入一字符串,搜索该字符串中是否有字符“A”,若有请输出其在串中的位置。
DATASSEGMENT
cap1db"pleaseinputastring",0dh,0ah,"$"
cap2db"plesaeinputtheletteryousearch",0dh,0ah,"$"
str0db40,?
40dup(0)
str1db40dup(0)
DATASENDS
STACKSSEGMENT
dw40hdup(?
)
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movdx,offsetcap1;输出提示“pleaseinputastring"
movah,09h
int21h
movdx,offsetstr0;输入一行字符串
;movdh,0ah;此处错误
movah,0ah
int21h
movdl,0ah;以下三行是实现换行功能
movah,02
int21h
movdl,13;以下三行是实现回车功能
movah,02
int21h
movdx,offsetcap2
movah,09h
int21h
movah,01h
int21h
leasi,str0
leadi,str1
;movdh,dl;此处错误,输入放在al中
movdh,al
callsearch
xordh,dh
movcx,dx
;leadi,str0;以下几句是实现依次输入找到的字符串的位置
leadi,str1;
l4:
;loopzl5
;movcl,[di]
movdl,byteptr[di]
cmpdl,0
jzl5
adddl,30h
movah,02h
int21h
movdl,'.'
movah,02h
int21h
incdi
jmpl4
l5:
MOVAH,4CH
INT21H
searchproc;子程序
pushf
pushax
;movcx,[si+1];此处修改
xorcx,cx
movcl,byteptr[si+1]
movdl,0
movax,1
l3:
cmp[si+2],dh
jnzl1
incdl
mov[di],al
incdi
l1:
incax
cmpax,cx
jal2
incsi
jmpl3
l2:
popax
popf
ret
searchendp
CODESENDS
ENDSTART\
流程图