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

合集下载

北京理工大学汇编实验报告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、实验说明字符串的处理是汇编语言程序设计中一个重要部分。

字符串操作一般包括数据块移动、串排序、串搜索、串比较、串复制、串插入、串删除、串交换以及大小写字母转换等内容。

编写字符串操作程序时经常会用到80x86串操作指令。

2、实验内容实验3.3.8:给出操作提示,用户输入用户名和密码,输入密码时,不回显,只有当用户输入的用户名和密码和内定的用户名密码相同时,显示欢迎界面,并返回DOS。

3、程序清单:.486DA TA SEGMENT USE16MESG1 DB 'USERNAME:',0DH,0AH,'$' ;指定用户名存放的数据区MESG2 DB 0DH,0AH,'PASSWORD:',0DH,0AH,'$' ;指定密码的数据区MESG3 DB 0DH,0AH,0DH,0AH,'========WELCOME TO DOS!========',0DH,0AH,'$' ;登录成功提示MESG4 DB 0DH,0AH,0DH,0AH,'============ERROR!=============',0DH,0AH,'$'; ;报错BUF1 DB 'Q12010102'count1 EQU $-BUF1 ;统计用户名长度BUF2 DB '12345678'count2 EQU $-BUF2 ;统计密码长度BUF3 DB 15 ;用户输入用户名的数据区DB ?DB 15 DUP(?)BUF4 DB 15 DUP(?) ;用户输入密码的数据区DA TA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DA TABEG: MOV AX,DA TAMOV DS,AXMOV AH,9MOV DX,OFFSET MESG1 ;显示用户名输入界面INT 21HMOV AH,0AHMOV DX,OFFSET BUF3 ;键入用户名字符串INT 21HMOV BX,OFFSET BUF1MOV SI,OFFSET BUF3+2MOV CX,count1NEXT1: MOV AL,[BX]CMP [SI],ALJNZ ERRORINC SIINC BXLOOP NEXT1 ;逐个字符比较BUF1和BUF3MOV AH,9MOV DX,OFFSET MESG2 ;显示密码输入界面INT 21HMOV CX,count2MOV SI,OFFSET BUF4NEXT2: MOV AH,7 ;逐个字符输入密码,遇到回车结束输入INT 21HCMP AL,0DHJZ NEXTMOV [SI],ALMOV AH,2 ;在屏幕上显示*MOV DX,'*'INT 21HINC SILOOP NEXT2NEXT: MOV CX,count2MOV BX,OFFSET BUF2MOV SI,OFFSET BUF4NEXT3: MOV AL,[BX]CMP [SI],ALJNZ ERRORINC SIINC BXLOOP NEXT3 ;逐个字符比较BUF2和BUF4MOV AH,9MOV DX,OFFSET MESG3INT 21HJMP EXITERROR: MOV AH,9 ;用户名或密码错误时报错MOV DX,OFFSET MESG4INT 21HEXIT: MOV AH,4CHINT 21HCODE ENDSEND BEG4、实验小结:(1)本实验要熟练掌握dos系统I/O功能调用功能号01H与07H都是等待输入一个字符,区别是07H没有回显,因此本实验等待键入密码应调用功能号07H。

北理大学计算机实验基础-实验三实验报告表

北理大学计算机实验基础-实验三实验报告表
0183 0804
0183 201E
0183 701C
3FFF F838
0183 0060
0183 00C0
0183 0180
0183 0300
0303 0400
0303 1806
0303 2007
0303 000E
0603 001C
0603 0038
0403 0060
0403 00C0
0803 0380
000F C000
0001 C000
0000 0000
0000 0000
0000 2018
0000 703C
1FFF 8030
0183 0060
0183 00C0
0183 0180
0183 0100
0183 0200
0183 0400
0183 0804
0183 201E
0183 701C
3FFF F838
实验三实验报告表
实验名称:字符编码与信息交换
学号班级:实验时间:年月日
实验报告表3-1西文字符显示过程编码记录表
输入字符
ASCII码(十进制数)
存信息(二进制)
显示字形码(十六进制)
A
65
01000001
0
5
53
00110101
0FE008000800
<
60
00111100
8
实验报告表3-2汉字显示过程编码记录表
0400 800C
07FF FFFE
0C00 001C
0C00 0010
1C00 0020
3800 01C0
01FF FFC0
0000 0380

(完整word版)北京理工大学计算机实验三报告表

(完整word版)北京理工大学计算机实验三报告表
0001 C000
0000 C000
0000 C000
0400 800C
07FF FFFE
0C00 001C
0C00 0010
1C00 0020
3800 01C0
01FF FFC0
0000 0380
0000 0700
0000 0C00
0000 1800
0000 6000
0000 6004
0000 600E
0303 2007
0303 000E
0603 001C
0603 0038
0403 0060
0403 00C0
0803 0380
1003 0600
3003 0C00
0000 3000
0000 C000
实验报告表3-3不同字体的字型码
字体
“字”的字型码
(十六进制表示)
“形”的字型码
(十六进制表示)
宋体
0008 0000
0400 800C
07FF FFFE
0C00 001C
0C00 0010
1C00 0020
3800 01C0
01FF FFC0
0000 0380
0000 0700
0000 0C00
0000 1800
0000 6000
0000 6004
0000 600E
7FFF FFFF
0000 6000
0000 6000
7FFF FFFF
0000 6000
0000 6000
0000 6000
0000 6000
0000 6000
0000 6000
0000 6000
0000 6000

北理工汇编语言实验报告3

北理工汇编语言实验报告3

汇编语言实验报告实验三字符串操作实验(设计性实验)班级:05611102姓名:肖枫学号:1120111431实验日期:2013.9.7下午一、实验要求和目的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(传送字)。

北理工C语言3

北理工C语言3

的3-1. 编程,任意输入10个整数,按从小到大的顺序输出。

结果:输入: 9、7、8、6、7、5,输出: 5、6、7、7、8、9。

分析:用选择法排序。

main()/* sj1-3-1 */{int j,k,e,t,a[10];for(j=0;j<10;j++) scanf("%d",&a[j]);for(j=0;j<9;j++){t=j;for(k=j+1;k<10;k++) if(a[t]>a[k]) t=k;e=a[t];a[t]=a[j];a[j]=e; }for(k=0;k<10;k++)printf("%5d",a[k]);printf("\n");}3-2. 编程,任意输入10个人的成绩,按从大到小的顺序排列。

运行程序时,只要输入名次,计算机就能输出该名次对应的成绩。

结果:输入: 4、7、3、6、1、5,12,0,23,-1输入: 4输出: The 4th is 6分析:用选择法排序。

第n名是a[n-1]。

main()/* sj1-3-2 */{int j,k,e,t,n,a[10];for(j=0;j<10;j++) scanf("%d",&a[j]);printf(“nput a number:\n”);scanf(“%d”,&n);for(j=0;j<9;j++){t=j;for(k=j+1;k<10;k++) if(a[t]>a[k]) t=k;e=a[t];a[t]=a[j];a[j]=e; }printf(“The %dth is %d\n”,n,a[n-1]);for(k=0;k<10;k++)printf("%5d",a[k]);printf("\n");}3-3. 编程,输入10个人的序号和成绩,对成绩从小到大排序,输出排序后的序号和成绩。

串操作实验报告

串操作实验报告

一、实验目的1. 理解串操作的基本概念和原理。

2. 掌握串操作的常用方法和技巧。

3. 能够使用串操作解决实际问题。

二、实验原理串操作是指对字符串进行的一系列操作,包括字符串的创建、拼接、截取、查找、替换等。

在计算机编程中,字符串操作是常见的操作之一,掌握串操作对于编程开发具有重要意义。

三、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019四、实验内容1. 创建字符串2. 字符串拼接3. 字符串截取4. 字符串查找5. 字符串替换6. 字符串长度计算7. 字符串比较五、实验步骤1. 创建字符串```cpp#include <iostream>using namespace std;int main() {string str1 = "Hello";string str2 = "World";return 0;}```2. 字符串拼接```cpp#include <iostream>#include <string>using namespace std;int main() {string str1 = "Hello";string str2 = "World";string str3 = str1 + str2; // 拼接字符串cout << str3 << endl; // 输出拼接后的字符串 return 0;}```3. 字符串截取```cpp#include <string>using namespace std;int main() {string str = "HelloWorld";string subStr = str.substr(0, 5); // 截取字符串cout << subStr << endl; // 输出截取后的字符串return 0;}```4. 字符串查找```cpp#include <iostream>#include <string>using namespace std;int main() {string str = "HelloWorld";size_t pos = str.find("World"); // 查找字符串cout << "Position: " << pos << endl; // 输出查找位置 return 0;}```5. 字符串替换```cpp#include <iostream>#include <string>using namespace std;int main() {string str = "HelloWorld";string newStr = str.replace(0, 5, "Hi"); // 替换字符串 cout << newStr << endl; // 输出替换后的字符串return 0;}```6. 字符串长度计算```cpp#include <iostream>#include <string>using namespace std;int main() {string str = "HelloWorld";int length = str.length(); // 计算字符串长度cout << "Length: " << length << endl; // 输出字符串长度 return 0;}```7. 字符串比较```cpp#include <iostream>#include <string>using namespace std;int main() {string str1 = "Hello";string str2 = "World";if (str1 == str2) {cout << "Strings are equal." << endl;} else {cout << "Strings are not equal." << endl;}return 0;}```六、实验结果与分析通过以上实验,我们掌握了字符串的基本操作,包括创建、拼接、截取、查找、替换、长度计算和比较。

北京理工大学微机原理实验报告

北京理工大学微机原理实验报告

微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别:12姓名:班级:学号:一、实验目的1、熟悉IDE86集成开发环境的使用。

2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。

3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。

4、掌握利用汇编实现求和与求最值的方法。

5、掌握利用汇编实现数制转换的方法。

6、巩固理论知识,锻炼动手编程,独立思考的能力。

二、实验内容(具体内容)1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。

并查看前5个,前8个数之和以及各寄存器和内存的状态。

2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。

3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。

要求实现数据显示,并返回DOS状态。

三、实验方法1、设计思路(1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。

(2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。

将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态(3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。

先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。

实验 字符串操作

实验 字符串操作

实验四字符串操作一、实验目的1.练习使用字符串操作类指令2.掌握字符串操作类指令的寻址方式二、实验环境1.硬件:PC微机2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE三、实验内容1.实验题目将数据段BLOCK中的16个数据按正负数分开存储,正数(包含0)存放在DPLUS中,负数存放在DMINUS中。

2.编程提示(1)取数使用LODSB,从DS:[SI]中取一个字节数据到AL中。

(2)使用TEST AL,80H,判断AL的符号位是0还是1(3)存数使用STOSB,将AL中的数据存入ES:[DI]。

3.参考程序STACK SEGMENT STACKDW 256 DUP (?)TOP LABEL WORDSTACK ENDSDA TA SEGMENTBLOCK DB 56H,23H,5AH,6FH,88H,95H,7FH,0F1HDB 81H,0E5H,0A1H,5DH,87H,65H,23H,19HDPLUS DB 16 DUP (0)DMINUS DB 16 DUP (0)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV SP,OFFSET TOPLEA SI,BLOCKLEA DI,DPLUSLEA BX,DMINUSMOV CX,10HCLDNEXT:LODSBTEST AL,80HJNZ MINUSSTOSBJMP AGAINMINUS:XCHG BX,DISTOSBXCHG BX,DIAGAIN:LOOP NEXTDONE:MOV AH,4CHINT 21HCODE ENDSEND START4.调试(1)用U命令进行反汇编,查看BLOCK、DPLUS、DMINUS在数据段中的偏移量。

汇编字符串实验报告

汇编字符串实验报告

实验六字符处理程序实验实验目的:1.熟悉串操作指令的功能与应用。

2.掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。

实验内容:1.字符串统计。

自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数形式显示在屏幕上。

2.在给定的字符串中,删除重复的字符,其余的字符向前递补。

实验准备:1.熟悉字符处理的方法和字符处理程序的设计。

2.认真预习有关串操作的指令及其寻址方式的特点,能够正确使用串操作指令,并准备好数据。

3.按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。

实验步骤:1.用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。

程序每次执行,都能得到不同的结果。

2.实验2可参考教材第五章练习10的解法,但要编写一个在同一个字符串删除字符,并将其余字符向前递补的程序。

实验报告要求:1.对照参考程序,画出程序流程图。

2.总结字符串处理程序的编程方法,提出改进和完善此类程序的设计方案。

程序清单:6-1 统计小写字母个数;COUNTDC.ASMDATA SEGMENTSTRN DB 80 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DI,STRNMOV CL,0AGAIN: MOV AH,1INT 21HCMP AL,0DHJZ DONEMOV [DI],ALINC DIINC CLJMP AGAINDONE: LEA SI,STRNMOV CH,0MOV BL,0CLDCYCLE: LODSBCMP AL,61HJB NEXTCMP AL,7AHJA NEXTINC BLNEXT: LOOP CYCLEMOV AL,BLMOV AH,0MOV CL,10DIV CLCHG AH,ALMOV BX,AXMOV DL,BHADD DL,30HMOV AH,2INT 21HMOV DL,BLADD DL,30HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START 运行结果:用DEBUG分析程序:6-2 删除字符串中重复字符;DELD.ASMDATA SEGMENTSTRN DB 80 DUP(?)LEN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,STRNMOV CL,0AGAIN: MOV AH,1INT 21HCMP AL,0DHJZ DONEMOV [SI],ALINC SIINC CLJMP AGAIN DONE: MOV CH,0MOV LEN,CLDEC SIREPET: PUSH SIPUSH CXPUSH CXPOP DXDEC CXJE NEXT1MOV AL,[SI]CMP AL,0JE NEXT1 COMP: DEC SICMP AL,[SI]JNE GOONMOV BYTE PTR[SI],0GOON: LOOP COMP NEXT1: POP DXPOP SIDEC SIDEC DXMOV CX,DXJNZ REPETLEA SI,STRNMOV CL,LENMOV CH,0MOV [SI+LEN-1],'$'INC CL CYCLE: MOV AL,[SI]CMP AL,0JNZ NEXTDEC CXJZ DONE1CALL DELEDEC SIINC CX NEXT: INC SILOOP CYCLE DONE1: MOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21HLEA DX,STRNMOV AH,9INT 21HMOV AH,4CHINT 21H DELE PROCPUSH SIPUSH CXCLDMOV DI,SIINC SIREP MOVSBPOP CXPOP SIRETDELE ENDPCODE ENDSEND START运行结果:。

  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语言等思想的不同之处,同时也了解并练习了字符串的处理方法。

相关文档
最新文档