北京理工大学汇编实验报告3

上传人:工**** 文档编号:506744235 上传时间:2023-04-05 格式:DOCX 页数:27 大小:221.27KB
返回 下载 相关 举报
北京理工大学汇编实验报告3_第1页
第1页 / 共27页
北京理工大学汇编实验报告3_第2页
第2页 / 共27页
北京理工大学汇编实验报告3_第3页
第3页 / 共27页
北京理工大学汇编实验报告3_第4页
第4页 / 共27页
北京理工大学汇编实验报告3_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《北京理工大学汇编实验报告3》由会员分享,可在线阅读,更多相关《北京理工大学汇编实验报告3(27页珍藏版)》请在金锄头文库上搜索。

1、 本科实验报告实验名称:实验三 字符串操作实验 课程名称:课程设计(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型: 原理验证 综合设计 自主创新学生姓名:罗逸雨学号/班级:1120141208 05211401组 号:3 / 学 院:信息与电子学院同组搭档:专 业:通信工程成 绩:一、实验目的1) 熟悉串操作指令的功能与应用;2) 掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3) 了解汇编语言字符串处理基本流程;二、实验环境与原理1.实验软硬件环境1) 硬件环境:惠普 64 位一体化计算机及局域网;2) 软件

2、环境:Windows 8,红蜘蛛管理系统,MASM for Windows。2.实验原理1)字符串操作流程wSI寄存器保存源串首地址;wDI寄存器保存目的串首地址;wCX寄存器保存字符串长度;wCLD或STD指令设置字符串处理方向;w当CLD指令使DF=0在执行串处理指令时可使地址自动增量;STD 使 DF=1,在执行串处理指令时可使地址自动减量。2)重复前缀指令w重复次数由计数寄存器 CX 中存放的值决定,指令每重复执行一次,计数器 CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。w当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。经常与

3、REP 配合工作的字符串处理指令有MOVS、STOS和LODS。w当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。w当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。3)字符串操作指令wlodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI;wst

4、osb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;wmovsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI;wscasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;wcmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;wrep:重复其后的串操作指令。重复前先判断 CX 是否为0,为0就结束

5、重复,否则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

6、为首址的数据区中,其最后一字符$作为结束标志,计算该字符串的长度并输出。提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,即求得串的长度。3) 编写程序,将内存中BUF1某一区域的数据传送到另一区域BUF2中,要求用字符串处理方法。4) 编写程序,在已知字符串中搜索特定字符#,若找到则AL返回0,找不到 AL返回1,要求用字符串处理方法。5) 编写程序,统计一串字符串中字符&出现的次数, 要求用字符串处理方法。6) 编写程序,设有一字符串已存放在 STRBUF 为首址的数据区中,编一程序找出其中的#字符,如果字符串中不存在#字符则应该输出“Not

7、 found”。四、程序清单与框图(1)DATAS SEGMENTBUF1 DB 20,?,20 DUP(?)COUNT1 EQU $-BUF1BUF2 DB 20,?,20 DUP(?)DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATASSTART: 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 21

8、H 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,1HEXID:MOV BL,AL MOV DL,0AH ;输出回车、换行MOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HADD BL,30H ;将AL中的内容输出MOV DL,BLMOV AH,02HINT 21H MOV AH

9、,4CH INT 21HCODES 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,BUF

10、2内存单元输入BUF1、BUF2字符串,设置SI、DI循环次数CX设为字符串长度比较DS:SI和ES:DI中字符SI、DI加一,CX减一Y相同且CX不为0?NNZF=1?YAL=1AL=0 结束(2)DATAS SEGMENTBUF DB 12345678912345$BUF2 DB 20 DUP($) DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATASSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA BX,BUF LEA SI,BUF LEA DI,BUF2 CLD REPNZ CMPSB

11、MOV AX,SI SUB AX,BX ;计算BUF长度 MOV DX,0 ;将AX中的内容转为10进制输出 MOV BX,10000 DIV BX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H MOV AX,BX MOV BX,1000 MOV DX,0 DIV BX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H MOV AX,BX MOV DX,0 MOV BX,100 DIV BX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H

12、MOV AX,BX MOV BX,10 MOV DX,0 DIV BX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,02H INT 21H MOV DL,BL ADD DL,30H MOV AH,02H INT 21H MOV AH,4CH INT 21HCODES ENDSEND START 程序分析:本程序的难点在于将内存中的十六进制数转为十进制输出。一个字能表示的最大十六进制数是65535,即十进制的五位数。所以采用除10000、1000、100、10、1法,将商不断输出,再将余数作为下一次运算的被除数。输出前要将原数加上30H转为ASCII码。(3)DA

13、TAS SEGMENTBUF1 DB ABCDEFGHIJKLMNCOUNT1 EQU $-BUF1BUF2 DB 20 DUP(?)DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATASSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA SI,BUF1 LEA DI,BUF2 CLD MOV CX,COUNT1 REP MOVSB ;将BUF1中数据复制到BUF2中 MOV AH,4CH INT 21HCODES ENDSEND START 程序分析:本程序使用的串操作指令是MOVSB,该指令的功能为把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI。利用该指令可以方便地将BUF1内存

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号