北京理工大学汇编实验报告3
更新时间:2023-10-27 11:18:01 阅读量: 综合文库 文档下载
本科实验报告
实验名称:实验三字符串操作实验
课程设计Ⅰ(CPU与汇编)课程名称: (实验) 任课教师: 聂青 实验教师: 苏京霞 学生姓名: 罗逸雨 学号/班级: 1120141208 05211401 学 院: 信息与电子学院 专 业: 通信工程 第5-10周周五下实验时间: 午 实验地点: 10-102 ? 原理验证 实验类型: □ 综合设计 □ 自主创新 组 号: 3 同组搭档: 成 绩:
一、实验目的
1) 熟悉串操作指令的功能与应用;
2) 掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序; 3) 了解汇编语言字符串处理基本流程;
二、实验环境与原理
1.实验软硬件环境
1) 硬件环境:惠普 64 位一体化计算机及局域网;
2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windows。
2.实验原理
1)字符串操作流程
?SI寄存器保存源串首地址; ?DI寄存器保存目的串首地址; ?CX寄存器保存字符串长度;
?CLD或STD指令设置字符串处理方向;
?当CLD指令使DF=0在执行串处理指令时可使地址自动增量;STD 使 DF=1,在执行串处理指令时可使地址自动减量。 2)重复前缀指令
?重复次数由计数寄存器 CX 中存放的值决定,指令每重复执行一次,计数器 CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。 ?当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。
?当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。
?当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 3)字符串操作指令 ?lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI; ?stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;
?movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI; ?scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; ?cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;
?rep:重复其后的串操作指令。重复前先判断 CX 是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在 LODS
前。
上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器 AX、计数器CX。
涉及的标志位:DF、AF、CF、OF、PF、SF、ZF。
三、实验步骤
1)编写程序,比较两个字符串BUF1和BUF2所含的字符是否相同,相同则AL返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。提示:输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。
2) 编写程序,设有一字符串存放在以BUF为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,即求得串的长度。
3) 编写程序,将内存中BUF1某一区域的数据传送到另一区域BUF2中,要求用字符串处理方法。
4) 编写程序,在已知字符串中搜索特定字符‘#’,若找到则AL返回0,找不到 AL返回1,要求用字符串处理方法。 5) 编写程序,统计一串字符串中字符\出现的次数, 要求用字符串处理方法。 6) 编写程序,设有一字符串已存放在 STRBUF 为首址的数据区中,编一程序找出其中的‘#’字符,如果字符串中不存在‘#’字符则应该输出“Not found”。
四、程序清单与框图
(1)
DATAS SEGMENT
BUF1 DB 20,?,20 DUP(?) COUNT1 EQU $-BUF1
BUF2 DB 20,?,20 DUP(?) DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS START:
MOV AX,DATAS MOV DS,AX MOV ES,AX
LEA DX,BUF1 ;输入字符串BUF1 MOV AH,0AH INT 21H
MOV DL,0AH ;输出回车、换行 MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H
LEA DX,BUF2 ;输入字符串BUF2 MOV AH,0AH INT 21H
MOV AX,0 LEA DI,BUF1 LEA SI,BUF2 CLD
MOV CX,COUNT1 REPZ CMPSB
JNZ L1 ;BUF1和BUF2不同,跳转至L1 L2:
MOV AL,0H JMP EXID L1:
MOV AL,1H
EXID:
MOV BL,AL
MOV DL,0AH ;输出回车、换行 MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H
ADD BL,30H ;将AL中的内容输出 MOV DL,BL MOV AH,02H INT 21H MOV AH,4CH INT 21H CODES ENDS END START
程序分析:本程序的难点在于从键盘输入两字符串BUF1、BUF2。为了成功输入,要在两次输入之间加上输出回车、换行。初始化BUF1、BUF2内存区域时,应设置相同的空间大小便于后续比较BUF1、BUF2中的字符。利用0A号功能进行输入字符串时,要注意初始化时的固定格式。输入前应将字符串有效地址放入
DX中。利用串操作指令CMPSB逐个比较DS:SI和ES:DI中的字符。利用CLD指令可以方便地使SI、DI在每次串操作指令后递增。输出AL中的内容0、1时应先将其转换成ASCII码30H、31H再输出。
框图: 开始 初始化BUF1,BUF2 内存单元 输入BUF1、BUF2字符
串,设置SI、DI
循环次数CX设为
字符串长度
比较DS:SI和
ES:DI中字符 SI、DI加一,CX减一
Y
相同且CX不为0?
N
N ZF=1? Y
AL=0 AL=1 结束
正在阅读:
北京理工大学汇编实验报告310-27
公路局2020年工作总结及下步工作打算08-22
市文广新局上半年工作总结及下半年工作打算08-04
银联POS机手续费率一览表06-03
暑假里的打算12-10
新学期新打算作文500字06-30
团总支开学打算12-05
给打算养鱼的你05-25
个人今后工作打算02-06
- 必修一物理寒假作业
- 2019-201X年5月大学生入党积极分子思想汇报-word范文模板(3页)
- 药物分析习题五
- 重拾应用意识 体会数学价值(沈建军)
- 2017全国高校辅导员结构化面试题集及参考答案
- 广东徐闻县实验中学2014届高三第二次月测地理试题
- 今天你共鸣了么?
- 2018-2019正能量读后感1000字-推荐word版(6页)
- 2018年中国截切型盖板针布行业专题研究分析报告目录
- 中国移动业务处理流程大全
- 公文写作常用词汇和句子集锦2016
- ARM课程设计说明书
- 教师资格证教育学论文
- 中考试卷分析
- 环境监测试卷(五)
- 党风廉政建设广播稿1
- 快速制作香香宫煮麻辣烫教程
- 《国际金融学》习题
- 文明施工保障措施方案
- 春兰维修资料故障代码
- 北京理工大学
- 汇编
- 实验
- 报告
- 行测:数字推理题725道详解
- 职业技能鉴定实施方案
- 学校法制教育制度
- 英语经典句型300句 -
- TMS320C6678平台函数接口要求
- 2016年计算机操作系统名词解释简答计算
- 啤酒发酵工艺流程
- 关于清正廉洁的古今名言警句
- 高电压技术复习资料
- 宁波大学博士后管理工作实施办法(87号)
- 地方政府学案例分析题
- 花荣知钱俱乐部演讲 - 最精华操作体系
- 园林室外铺装简介 - 图文
- 综合英语二上册习题翻译题答案(一)
- 2018-2019学年人教版八年级英语上册全册知识点总结
- 人教版小学数学五年级下册第二单元《因数和倍数》 - 图文
- Windows操作系统Windows 2000xp线程间通信实验报告
- 2018-2019学年语文S版六年级语文第一学期 教学计划
- 华中科技大学电信系2008年研究生复试细则
- 12345市长热线服务外包经济分析报告