北理工_汇编_实验三_字符串操作实验

合集下载

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

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

北京理工大学汇编实验报告3本科实验报告实验名称:实验三字符串操作实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型:☑原理验证□综合设计□自主创新学生姓名:罗逸雨学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档:专业:通信工程成绩: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:重复其后的串操作指令。

实验三串基本操作的编程实现

实验三串基本操作的编程实现

实验三串基本操作的编程实现引言:串是由零个或多个字符组成的有限序列,是一种非常基础也非常重要的数据结构。

在本实验中,我们将学习串的基本操作,并使用C语言来实现这些操作。

1.实验目的:-掌握串的基本操作,包括串的初始化、判空、求长度、复制和拼接等操作;-学会使用C语言编程实现串的基本操作。

2.实验内容:本实验主要包括以下几个串的基本操作的编程实现。

2.1串的初始化操作在C语言中,我们可以使用字符数组来表示一个串。

以下是一个串的初始化操作的实现代码:```c#include <stdio.h>void InitString(char s[], char str[])int i;for (i = 0; str[i] != '\0'; i++)s[i] = str[i];}s[i]='\0';int maichar s[20];char str[] = "Hello, World!";InitString(s, str);printf("Initialized string: %s\n", s);return 0;```2.2串的判空操作判空操作即判断一个串是否为空串。

如果一个串的长度为0,则表示该串为空串。

以下是一个判空操作的实现代码示例:```c#include <stdio.h>#include <stdbool.h>bool IsEmptyString(char s[])return s[0] == '\0';int maichar s[20] = ""; // 空串if (IsEmptyString(s))printf("The string is empty.\n");} elseprintf("The string is not empty.\n");}return 0;```2.3串的长度操作求串的长度,即求一个串中字符的个数。

精品学习笔记 Python入门提升 北京理工大学:《Python语言程序设计》- 3.1.4 字符串的操作-PPT

精品学习笔记 Python入门提升 北京理工大学:《Python语言程序设计》- 3.1.4 字符串的操作-PPT

字符串处理方法
操作含义
+连接
*重复
<string>[ ]索引
<string>[ : ]剪切
len(<string>)长度
<string>.upper()字符串中字母大写
<string>.lower()字符串中字母小写
<string>.strip()去两边空格及去指定字符
<string>.split()按指定字符分割字符串为数组
<string>.join()连接两个字符串序列
<string>.find()搜索指定字符串
<string>.replace()字符串替换
for <var> in <string>字符串迭代
字符串的操作
可以通过for和in组成的循环来遍历字符串中每个字符
格式如下:
for<var>in<string>:
操作
字符串的操作
用转义符可以在字符串中表达一些不可直接打印的信息例如:用\n表示换行
⏹字符串"Hello\nWorld\n\nGoodbye32\n"
⏹用print()函数打印后的输出效果如下:
Hello
World
Goodbye32。

串操作实验报告

串操作实验报告

串操作实验报告
《串操作实验报告》
实验目的:通过对串操作的实验,掌握串的基本操作方法,提高对串操作的理解和掌握。

实验材料:计算机、编程软件、实验指导书。

实验步骤:
1. 字符串的输入输出:首先,我们学习了如何通过编程软件向计算机输入字符串,并且通过编程实现将字符串输出到屏幕上。

这一步骤帮助我们了解了如何使用编程语言来操作字符串。

2. 字符串的拼接:接着,我们学习了如何将两个字符串进行拼接。

通过实验,我们发现可以通过简单的加号操作符来实现字符串的拼接,这为我们在日后的编程中提供了很大的便利。

3. 字符串的截取:在实验中,我们还学习了如何通过编程语言来截取字符串的部分内容。

这一步骤让我们对于字符串的操作更加灵活,可以根据需要来截取所需的内容。

4. 字符串的比较:最后,我们学习了如何通过编程语言来比较两个字符串的内容。

这一步骤让我们对于字符串的比较有了更深入的理解,可以通过比较来判断字符串是否相等,或者哪个字符串的内容更大。

实验结果:通过这次实验,我们对于串操作有了更加深入的理解和掌握。

我们可以通过编程语言来实现对字符串的输入输出、拼接、截取和比较等操作,为日后的编程工作打下了坚实的基础。

结论:串操作是编程中非常重要的一部分,通过这次实验,我们对于串操作有
了更加深入的理解和掌握。

希望在日后的编程工作中能够更加灵活地运用串操作,提高编程效率和质量。

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。

寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令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 :重复其后的串操作指令。

北理工微机原理实验3

北理工微机原理实验3

北理工微机原理实验3实验三串行通信一、实验目的1、了解串行通信的基本原理。

2、掌握串行接口芯片8251 的工作原理和编程方法。

2、掌握串行接口芯片8250 的工作原理和编程方法。

3、掌握对串行接口芯片的初始化编程;学会串行通信半双工和全双工的编程技巧。

二、实验内容及步骤1、利用PC 机系统的串行通信接口实现与实验系统的双机通信,PC 机的串行通信接口的端口地址为3F8H,并画出三线连接,七线连线通信接口的连线图,接口为标准RS――232插座。

图1 七线连线通信接口的连线图2、按图1连接好电路,其中8254计数器用于产生8251 的发送和接收时钟,TXD 和RXD 连在九针接口处。

3、接线。

CLK0 /8254 接1M时钟CLK /8251 接1M时钟GATE0 /8254 接+5V0UT0 /8254 接TX/RXCLK /8251 CS /8254 接Y0 /IO 地址CS /8251 接Y7 /IO 地址RXD /8251 接TXD /九针接口TXD /8251 接RXD /九针接口4、8254 计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。

5、设串行通信的波特率为1200、偶校验、数据位为7 位、一位停止位,利用查询方式实现单工通信。

要求发送方将任一文件传送到收方,收方收到后将源程序写入磁盘。

分别编写收方和发方的通信程序。

6、上述参数不变,用中断方式实现半双工通信,编写程序。

7、PC 机寄存器的端口地址如下表所示。

PC 机寄存器的端口地址PC 机寄存器的端口地址I/O 端口IN/OUT 3F8* OUT 3F8* IN 3F8** OUT 3F9** OUT 3F9* OUT 3FB OUT 3FA IN 3FC OUT 3FD IN 3FE IN * 线路控制寄存器第七位DLAB=0 ** 线路控制寄存器第七位DLAB=1 波特率和除数因子对照表因子值波特率波特率单位HZ 单位HZ MSB LSB 50 09 00 1800 75 06 00 2000 110 04 17 2400 03 59 3600 150 03 00 4800 600 00 C0 9600 1200 00 60 寄存器名称发送保持寄存器接收数据寄存器波特率因子波特率因子(MSB) 中断允许寄存器线路控制寄存器中断标志寄存器MODEM 控制寄存器线路状态寄存器MODEM 状态寄存器因子值MSB 00 00 00 00 00 00 LSB 40 3A 30 20 18 0C 三、程序实现对于整个程序的实现,可以分为几个步骤。

实验三串基本操作的编程实现

实验三串基本操作的编程实现

实验三串基本操作的编程实现【实验目的】内容:串基本操作的编程实现要求:串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或链接结构、索引结构中任选,也可以全部实现。

也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】验证性实验(学时数:2H)【实验内容】字符串用常规的顺序存储法来存储,实现常用的功能。

自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。

修改程序模式:将下面程序空白的地方填空。

程序检查模式:将本文件夹中的程序运行后总结相关功能。

【思考问题】1. 字符串的顺序存储和链表存储的差异2. 在字符串处理方面主要有什么操作3. 字符串的操作的主要特点是什么4. 举出几个字符串的应用范例【参考代码】立顺序串(仅限单行的字符串,建议不用汉字。

)"<<endl;cout<<"2. 显示串"<<endl;cout<<"3. 修改串"<<endl;cout<<"4. 插入串"<<endl;cout<<"5. 删除串"<<endl;C 语言中是如何实现字符串的cout<<"6. 查找串"<<endl; cout<<"7. 求串长度"<<endl;cout<<"8. cout<<"——结束程序"<<endl; : ---------- "<<e ndl;}int mai n(){int flag=O,return value,positi on, begi npositi on,en dpositi on ,le ngth;char choice,choose ,n ewstr[maxsize];string newstring;menu();while(1){cout<<"请输入选择:";cin> >choice;switch(choice){case '1':if(flag){cout<<"数据已存在,是否覆盖(y/n)";cin> >choose;if(choose=='N'||choose==' n')cout<<"数据没有发生更改!"<<endl; break;}if(choose=='Y'||choose=='y'){retur nvalue=();if(retur nvalue==success)cout<<"创建成功!"<<endl;flag=1;}elsecout<<"输入错误!"<<endl;}else{returnvalue=();if(retur nvalue==success)cout<<"创建成功!"<<endl;flag=1;}break;case 2:if(flag==0)cout<<"请先建立串!"<<endl;else();break;case 3:if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要修改的初始位置:";cin> >beg in positi on;cout<<"请输入要修改的终止位置:";cin»en dpositi on;cout<<"请输入修改后的字符串:";cin»n ewstr;retur nvalue=(beg in positi on,en dpositi on,n ewstr);if(retur nvalue==success){cout<<"修改成功!"<<endl;();}if(returnvalue==overflow){cout<<"字符串的最大长度为"<<maxsize<<endl;cout<<"发生溢出,操作失败!"<<endl;}if(returnvalue==ra nge_error)cout<<"位置错误,操作失败!"<<endl;if(returnvalue==empty)cout<<"字符串为空,操作失败!"<<endl;}break;case '4':if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要插入的位置:";cin> >positi on;cout<<"请输入要插入的字符串cin»n ewstr;len gth=strle n(n ewstr);retur nvalue=(positi on,n ewstr,le ngth); if(retur nvalue==success){cout<<"插入成功!"<<endl; ();}if(returnvalue==overflow){cout<<"发生溢出,操作失败!"<<endl; } if(returnvalue==ra nge_error) cout<<"位置错误,操作失败!"<<endl; } break; case '5': if(flag==0) cout<<"请先建立串!"<<endl; else { (); cout<<"请输入要删除的初始位置:"; cin> >beg in positi on; cout<<"请输入要删除的终止位置 :"; cin»en dpositi on; retur nvalue=(beg in positi on,en dpositi on); if(retur nvalue==success) { cout<<"删除成功!"<<endl; (); } if(returnvalue==ra nge_error) cout<<"位置错误,操作失败!"<<endl; cout<<"字符串的最大长度为 "<<maxsize<<e ndl;if(returnvalue==empty)cout<<"字符串为空,操作失败!"<<endl;}break;case '6':if(flag==0)cout<<"请先建立串!"<<endl;else{();cout<<"请输入要查找的字符串:";cin»n ewstr;positi on=(n ewstr);if(positi on>0){cout<<"已找到!"<<endl;cout<<"字符串出现的初始位置为:"<<position<<endl;}if(positi on==0)cout<<"您要查找的字符串不存在!"<<endl;if(positi on==-1)cout<<"字符串为空,操作失败!"<<endl;}break;case '7':v1.0可编辑可修改if(flag==O)cout<<"请先建立串!"<<endl;else{();len gth=();cout<<"当前串的长度为:"<<length<<endl;}break;case 8:exit(0);break;default:cout<<"输入错误!\n";break;}cout<<"按任意键继续..... "<<endl;getch();system("cls");men u();}getch();return 0;}。

北京理工大学汇编语言实验报告实验五子程序设计实验

北京理工大学汇编语言实验报告实验五子程序设计实验

北京理工大学汇编语言实验报告实验五子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名 PROC [near/far]过程体RET过程名 ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。

.段内调用与返回:调用子程序指令与子程序同在一个段内。

因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。

3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:过程名PROC [NEAR/FAR]PUSH BXPUSH DXPOP DXPOP AXRET过程名 ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告实验名称: 字符串操作实验课程名称:CPU 与汇编实验实验时间: 任课教师: 实验地点:实验教师: 实验类型: □ 原理验证■ 综合设计□ 自主创新学生姓名:学号/班级:组 号: 无 学 院: 信息与电子 同组搭档: 无 专 业: 信息工程成 绩:一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握利用汇编语言实现字符串处理的程序设计方法。

二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK等应用程序。

三、实验涉及的主要知识1、字符串处理基本操作流程(1)利用 SI 寄存器保存源串首地址;(2)利用 DI 寄存器保存目的串首地址;(3)利用 CX 寄存器保存字符串长度;(4)利用 CLD 或 STD 指令设置字符串处理方向;(5)利用字符串处理指令实现相关处理。

其中,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、字符串处理基本指令(1)MOVS 传送指令格式:MOVS DST,SRC或 MOVSB(传送字节)或 MOVSW(传送字)。

后面两种形式需要与 REP 指令结合使用。

该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由目的变址寄存器(DST)指向的附加段中的一个字(或字节)中去,同时,根据方向标志及数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改。

(2)STOS 存入串指令格式:STOS DST 或 STOSB(存入字节)或 STOSW(存入字)。

该指令把 AL 或 AX 的内容存入由目的变址寄存器指向的附加段的某单元中,并根据方向标志(DF)和数据类型修改目的变址寄存器的内容。

(3)LODS 从串取指令格式:LODS SRC 或 LODSB(取字节)或 LODSW(取字)。

该指令把由源变址寄存器指向的数据段中某单元的内容传送到 AL 或 AX 中,并根据方向标志和数据类型修改源变址寄存器的内容。

(4)CMPS 串比较指令格式:CMPS SRC,DST 或 CMPSB 或 CMPSW。

该指令把由源变址寄存器指向的数据段中的一个字节或字与由目的变址寄存器所指向的附加段中的一个字节或字相减,但不保存结果,只根据结果设置条件标志。

该指令与 REPE/REPZ 或 REPNE/REPNZ 结合,可以比较两个数据串。

(5)SCAS 串扫描指令格式:SCAS DST 或 SCASB 或 SCASW。

该指令把 AL 或 AX 的内容与由目的变址寄存器所指向的附加段中的一个字节或字进行比较,并不保存结果,只根据结果设置条件码。

该指令与 REPE/REPZ 或 REPNE/REPNZ 结合,可以从一个字符串中查找一个指定的字符。

总的来说,字符串处理可以将缓冲区中一个数据块搬至存储器的另一处,比较两个字符串是否相等,从缓冲区中一个数据块寻找某一个特定的关键字,顺次从一个缓冲区取字符或顺次向一个缓冲区存字符等。

四、实验内容与步骤1、比较缓冲区中两字符串是否相同,相同则 AL 返回 0,不同 AL 返回 1。

为了使程序的通用性比较好,字符串长度要求自动获取。

(要求用字符串处理方法)(1)程序代码DATAS SEGMENTBUF1 DB'ABC'LEN1 EQU $-BUF1 ;获取字符串长度BUF2 DB'ABD'LEN2 EQU $-BUF2DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV ES,AXMOV CX,LEN1 ;将字符串1的长度存入CX中CMP CX,LEN2 ;比较两字符串长度,不相等直接可判断两字符串不同JNZ NOMOV SI,OFFSET BUF1MOV DI,OFFSET BUF2REPE CMPSB ;逐个比较,相同则循环JZ YES ;CX为零时跳出循环,说明两字符串相等NO: MOV AL,1 ;CX不为零时跳出循环,说明两字符串不等JMP LYES:MOV AL,0L: ADD AL,30H ;将AL中的‘0’与‘1’转换成可显示结果MOV DL,AL ;显示比较结果MOV AH,02INT 21HMOV AH,4CHINT 21HCODES ENDSEND START(通过改变BUF1与BUF2的值,来比较不同字符串)*本程序先将0或1返回到AL中。

为显示结果方便,本程序在末段将AL值加30H进行输出。

也可不加末段输出语句,直接在DEBUG时观察寄存器值来得到结果。

(2)实验结果以字符串为“ABC”与“ABD”为例。

2、编写程序,将内存中某一区域的数据传送到另一区域。

(要求用字符串处理方法)(1)程序代码DATAS SEGMENTBUF1 DB'ABC'LEN1 EQU $-BUF1 ;获取字符串长度BUF2 DB 64 DUP('$');先将BUF空间所有内容赋值为字符串结束标记DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV ES,AXMOV CX,LEN1MOV SI,OFFSET BUF1MOV DI,OFFSET BUF2REP MOVSB ;逐个传送MOV DX,OFFSET BUF2 ;显示传送结果MOV AH,9INT 21HMOV AH,4CHINT 21HCODES ENDSEND START(2)实验结果3、编写程序,在已知字符串中搜索特定字符’!’,若找到则 AL返回 0,找不到 AL返回 1。

(要求用字符串处理方法)(1)程序代码DATAS SEGMENTBUF DB'ABC DE!FG'LEN EQU $-BUFDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV ES,AXMOV CX,LENMOV DI,OFFSET BUFMOV AL,'!';将要查找的字符存入ALREPNZ SCASB ;逐个查找JZ Y ;若ZF=1,则字符串中有’!’,跳至YMOV AL,1 ;字符串中不含’!’,AL=1JMP EY: MOV AL,0 ;字符串中含有’!’,AL=0E: ADD AL,30H ;将AL中的‘0’与‘1’转换成可显示结果MOV DL,AL ;显示比较结果MOV AH,02INT 21HMOV AH,4CHINT 21HCODES ENDSEND START*本程序先将0或1返回到AL中。

为显示结果方便,本程序在末段将AL值加30H进行输出。

也可不加末段输出语句,直接在DEBUG时观察寄存器值来得到结果。

(2)实验结果以字符串“ABC DE!FG”为例4、编写程序,统计一串字符串中字符"."出现的次数。

(要求用字符串处理方法);注意:同学自行给出字符串初始值加以验证以上各题程序。

(1)程序代码DATAS SEGMENTBUF DB'ABC.. DE.F.G.'LEN EQU $-BUFDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV BL,0 ;用于记录‘.’的个数MOV ES,AXMOV CX,LENMOV DI,OFFSET BUFMOV AL,'.';将要查找的字符存入ALL1:REPNZ SCASB ;逐个查找,ZF=1时结束循环JNZ L2 ;若ZF=0,BX不变INC BL ;若ZF=1,BX自增一L2:CMP CX,0 ;若CX=0,则结束程序JA L1 ;若CX不为零,则继续循环E: ADD BL,30H ;将BL中的值转换成可显示结果MOV DL,BL ;显示计算结果MOV AH,02INT 21HMOV AH,4CHINT 21HCODES ENDSEND START(2)实验结果以字符串“ABC.. DE.F.G.”为例五、思考与练习1、如果不用字符串处理方法,而用其他方法如何实现题目 2 的程序设计,比较两种方法效果?若不采用字符串处理方法,可采用如下程序段:MOV SI,0L:MOV AL,BUF1[SI]MOV BUF2[SI],ALINC SILOOP L由此见得,字符串处理方法使程序更为简洁,易于理解。

六、实验心得经过本次实验,我对汇编有了一个更深入的了解,逐渐理解了其与C语言等思想的不同之处,同时也了解并练习了字符串的处理方法。

相关文档
最新文档