实验三 字符串操作

实验三 字符串操作
实验三 字符串操作

一、实验要求和目的

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。

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。为了使程序

的 通用性比较好,字符串长度要求自动获取。(要求用字符串处理方法)

实验流程图

输入str1、str2

开始

分别将str1、str2首地址传送到SI 、DI 寄存器

计算str1、str2的字符串长

度并保存到相应寄存器 将AL 赋值为1

比较字符串长度

字符进行比较 不相等 不相等 若相等

将AL赋值0

结束

代码DATAS SEGMENT

DATAS ENDS

extra SEGMENT

str1 db'Hello.orld!$'

leng1 dw ($-str1)

str2 db'Hello.world!$'

leng2 dw ($-str2)

extra ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,es:extra START:

MOV AX,DATAS

MOV DS,AX

MOV AX,EXTRA

MOV ES,AX

MOV AL,1

MOV BX,LENG1

MOV DX,LENG2

CMP BX,DX

JNZ N

JMP CON

N:

MOV AL,1

JMP OVER

CON:

LEA SI,STR1

LEA DI,STR2

MOV CX,LENG1

CLD

REPE CMPSB

JCXZ Y

Y:

MOV AL,0

JMP OVER

OVER:

MOV AH,4CH

INT 21H

CODES ENDS

END START

因为没有拍照片,所以没有保存调试结果,但是在上机调试的过程中实验是正确的。

2、编写程序,将内存中某一区域的数据传送到另一区域。(要求用字符串处理方法)

开始

输入数据

CX=字符串长度

Y

CX等于0?

N

复制字符

CX=CX-1

结束

DATAS SEGMENT

str1 db'Hello.orld!$'

leng1 dw ($-str1)

DATAS ENDS

extra SEGMENT

str2 db 30 dup(0)

leng2 dw ($-str2)

extra ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,es:extra

START:

MOV AX,DATAS

MOV DS,AX

MOV AX,EXTRA

MOV ES,AX

LEA SI,STR1

LEA DI,STR2

MOV CX,LENG1

CLD

REP MOVSB

MOV AH,4CH

INT 21H

CODES ENDS

END START

3、编写程序,在已知字符串中搜索特定字符’!’,若找到则 AL 返回 0,找不到 AL 返回 1。

(要求用字符串处理方法)

DATAS SEGMENT

将str1首地址传送到

ES 段DI 寄存器 将str1长度存到CX 将待搜索字符‘!’存到

用scasb 重复搜索‘!’

将AL 赋值为0

将AL 赋值为1 结束

未找到 若找到

DATAS ENDS

extra SEGMENT

str1 db'Hello.world!$'

leng1 dw ($-str1)

extra ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,es:extra

START:

MOV AX,DATAS

MOV DS,AX

MOV AX,EXTRA

MOV ES,AX

LEA ax,str1

mov di,ax

MOV al,'!'

mov cx,leng1

cld

repnz scasb

jcxz n

jmp o

n:

MOV bx,1

JMP OVER

o:

MOV bx,0

jmp over

over:

mov ax,bx

mov ah,4ch

int 21h

CODES ENDS

END START

4、编写程序,统计一串字符串中字符"."出现的次数。(要求用字符串处理方法);

DATAS SEGMENT

DATAS ENDS

extra SEGMENT

str1 db 'Hello...orld!$'

leng1 dw ($-str1)

extra ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,es:extra

START :

MOV AX,DATAS

MOV DS,AX

MOV AX,EXTRA

MOV ES,AX

mov bx,0

开始 定义初始字符串str1

‘.’的数目存在BX ,BX 初始值为0 用字符串搜索的方法搜索‘.’

BX 值加一

CX=0 结束

未找到 若找到

LEA ax,STR1

mov di,ax

MOV al,'.'

mov cx,leng1

cld

l: repnz scasb

jcxz over

inc bx

jmp l

over:

mov ax,bx

mov ah,4ch

int 21h

CODES ENDS

END START

五、思考与练习

1、如果不用字符串处理方法,而用其他方法如何实现题目2 的程序设计,比较两种方法效果?

答:也可以用循环loop指令实现,在比较时通过采用cmp比较字符ASCII值的方式,跳转对应不同结果进行处理。采用循环方式需要更多的指令,消耗更多的内存才能完成任务。采用字符串处理更加简洁也更加方便。

C语言课程设计报告---字符串处理

课程设计报告 课程设计题目:研究生初试录取 学生:俊 专业:计算机应用技术 班级: 1140302 指导教师:宋文琳 2012年 06 月 23日

目录 一)实验题目 (3) 二)实验目的 (3) 三)实验要求 (3) 四)实验思路 (4) 五)实验过程 (6) 六)实验调试和结果 (9) 七)实验小结 (13)

实验题目 字符串处理 (1)不使用系统库函数,编写多个函数实现; (2)定义字符数组存放字符串,从键盘输入; (3)调用不同的函数,实现字符串的连接、拷贝、比较、求字符串长度、对字符串字符进行排序、查找字符串中某个字符是否存在; (4)分别输出以上字符串处理的结果。 二)实验目的 本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体等相关容的综合应用,使学生能进一步熟悉掌握C语言的基本语法,进一步提升编程能力并逐步培养编程思维,进而不断提高学生解决问题的能力,并为以后的语言学习打下良好的基础。三)实验要求 1. 学生独立完成课程设计的主要容; 2. 按照实验课表安排进行,不得无故旷课; 3.按照选题规则确定课程设计题目,不可随意更换,但可在完成规定的任务之后,根据 个人兴趣选做其它题目; 4.严格按照报告格式撰写课程设计报告; 5.程序实现方式可以自选,可采用指针、数组或其任意组合方式完成。

四)实验思路1)整体思路

五)实验过程 代码: #include void main() {void lianjie(char a[],char b[]); void kaobei(char a[],char b[]); void bijiao(char a[],char b[]); void qiuchangdu(char a[],char b[]); void paixu(char a[],char b[]); void chazhao(char a[],char b[],char c); char str1[50],str2[40]; char t; int i; printf("需要进行的操作:1.连接;2.拷贝;3.比较;4.求长度;5.排序;6.查找\n"); scanf("%d",&i); if(i==1) {printf("要连接的字符串1:"); scanf("%s",str1); printf("要连接的字符串2:"); scanf("%s",str2); lianjie(str1,str2);} else if(i==2) {printf("拷贝的字符串1:"); scanf("%s",str1); printf("要拷贝的字符串2:"); scanf("%s",str2); kaobei(str1,str2);} else if(i==3)

实验三 数组和字符串

实验三数组和字符串 一、实验目的 1.掌握Java中的数组定义、引用 2.掌握向量的基本概念和应用技术 3.掌握使用字符串String类处理字符串的方法 4.掌握使用字符串StringBuffer类处理字符串的方法 5.掌握Date类以及Calendar类的常用方法; 二、实验内容 1.使用https://www.360docs.net/doc/6014334972.html,ng.Math类,生成100 个100~999 之间的随机整数,找出他们之中的最大的和最小的,并统计随机产生的大于300 的整数个数。 package exercise; publicclass shiyan3_1 { publicstaticvoid main(String [] args) { int count=0; int max=0; int min=Integer.MIN_VALUE; int num[]=newint[100];//声明并创建一个具有100 个元素的整型数组对象num int i; for(i=1;i<=100;i++) { num[i-1]=100+(int)(Math.random()*899); System.out.print(num[i-1]+"\t");//随机产生一个100~999 之间的随机整数 if(i % 10 == 0) System.out.println();//输出当前产生的随机数,并一行输出10 个数 if(num[i-1]>max) max=num[i-1]; if(num[i-1]300) count++; } System.out.println("最大的随机整数是:"+max); System.out.println("最小的随机整数是:"+min); System.out.println("大于300 的整数个数是:"+count); } }

微机原理实验2程序 - 字符串匹配实验

8086汇编语言程序实验: 实验二、字符串匹配实验 题目: 1、(必做题)编程实现:从键盘分别输入两个字符串(不必等长), 然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MATCH”。 2、(选做题)编程实现:从键盘分别输入两个字符串,然后进行比 较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。 对应程序如下所示: ;第1题 ;==================================== HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。 MOV DL,0DH ;用2号功能“显示”回车。 MOV AH,02H INT 21H MOV DL,0AH ;用2号功能“显示”换行。 MOV AH,02H INT 21H ENDM DA TA SEGMENT MESSAGE1 DB 'MATCH','$' ;定义“MATCH”提示信息,“$”作为调用9号功能的结束符。 MESSAGE2 DB 'NO MATCH','$' ;定义“NO MATCH”提示信息。 TISHI1 DB 'Please input the first string:','$' ;提示输入第1个字符串的提示信息。 TISHI2 DB 'Please input the second string:','$' ;提示输入第1个字符串的提示信息。 STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。 DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。 DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。 STRING2 DB 100 DB ? DB 100 DUP(?) DA TA ENDS

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

微机实验三 串操作

实验三串操作 一、实验目的 1.熟悉串操作指令的功能。 2.了解串操作指令的使用方法。 二、实验预习要求 1.复习8086指令系统中的串操作类指令。 2.按照题目要求在实验前编写好实验中的程序段。 三、实验任务 1.输入以下程序段并运行之,回答后面的问题。 CLD MOV DI,1000H MOV AX,55AAH MOV CX,10H REP STOSW 上述程序段执行后: (1) 从DS:1000H开始的16个字单元的内容是什么?。 (2) (DI)= ?(CX)= ?,并解释其原因。 2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。

MOV SI,1000H MOV DI,2000H MOV CX,20H REP MOVSB 程序段执行后: (1)从DS:2000H开始的16个字单元的内容是什么? 55AAH (2)(SI)=?(DI)=?(CX)= ?,并分析之。 SI=1020H,DI=2020H,CX=0000H 3.从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。 assume cs:code,ds:datasg,ss:stack datasg segment db 'THIS IS A STRING' db 1000 dup(1) datasg ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax,datasg

实验3MATLAB矩阵分析与处理和字符串操作实...

实验三 MATLAB 矩阵分析与处理、字符串操作 一、实验目的 1.掌握生成特殊矩阵的方法 2.熟练掌握矩阵的特殊操作及一些特殊函数 3.熟练掌握MATLAB 的字符串操作 4.掌握MATLAB 矩阵的关系运算及逻辑运算法则 二、实验内容 1.特殊矩阵分析与处理操作 常用的产生通用特殊矩阵的函数有:zeros( );ones( );eye( );rand( );randn( ). 下面建立随机矩阵。 (1) 在区间[20,50]内均匀分布的5阶随机矩阵。 (2) 均值为0.6、方差为0.1的5阶随机矩阵。 说明:产生(0 ,1)区间均匀分布随机矩阵使用rand 函数,假设得到了一组满 足(0,1)区间均匀分布的随机数x i ,则若想得到任意[a,b]区间上均匀分布的随机数,只需要用i i x a b a y )(-+=计算即可。产生均值为0、方差为1的标准正态分布随机矩阵使用randn 函数,假设已经得到了一组标准正态分布随机数x i ,如果想要更一般地得到均值为i i x y ,、σμσμ+=可用的随机数方差为2计算出来。针对本例,命令如下: x=20+(50-20)*rand(5) y=0.6+sqrt(0.1)*randn(5) 建立对角阵。 diag( )函数除了可以提取矩阵的对角线元素以外,还可以用来建立对角矩阵。 设V 为具有m 个元素的向量,diag(V)将产生一个m*m 对角矩阵,其主对角线元素即为向量V 的元素。例如: diag([1,2,-1,4])

ans= 40000 10000 20000 1 diag(V)函数也有另一种形式diag(V ,k),其功能是产生一个n*n(n=m+|k|)的对角矩阵,其第k 条对角线的元素即为向量V 的元素。例如: diag(1:3,-1) ans=03000 0200 0010 000 矩阵的旋转 函数rot90(A,k)表示将矩阵A 以90度为单位对矩阵按逆时针方向进行k 倍的旋转。 rem 与mod 函数的区别 练习: 1> 写出完成下列操作的命令。 (1)建立3阶单位矩阵A 。eye(3) (2)建立5*6随机矩阵A ,其元素为[100,200]范围内的随机整数。 A=100+(200-100)*rand(5,6) (3)产生均值为1,方差为0.2的500个正态分布的随机数。 B=1+sqrt(0.2)*randn(50,10) (4)产生和A 同样大小的零矩阵。 zeros(size(A)) (5)将矩阵A 主对角线的元素加30。 B=eye(5,6)*30 A+B (6)从矩阵A 提取主对角线元素,并以这些元素构成对角阵。 B=diag(diag(A)’) 注:转置是把列向量转变成行向量。 2> 先建立5*5的矩阵A ,然后将A 的第一行元素乘以1,第二行元素乘以2,…,第五行乘以5。(提示:用一个对角矩阵左乘一个矩阵时,相当于用对角阵的

朱 实验三 字符及字符串的输入和输出

实验三字符及字符串的输入和输出 一、实验目的 1.熟悉如何进行字符及字符串的输入输出。 2.掌握简单的DOS系统功能调用。 二、实验预习要求 1.复习系统功能调用的1、2、7、8、9、10号功能。 2.按照题目要求预先编写好实验中的程序段。 三、实验任务 1.输入以下程序段并用“single step”单步运行,执行INT 21H指令时,在键盘上按“5”键。 MOV AH,1 INT 21H (1) 运行结束后,(AL)=?它是哪一个键的ASCII码? (2) 重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5” 键,观察运行结果有何变化? (3) 再将1变为7和8,分别运行之 2.输入以下程序段并运行之。 MOV DL,‘A’ MOV AH,2 INT 21H (1)观察屏幕上的输出,是否显示了“A”字符? (2)分别用“#”、“X”、“Y”、“$”、“?”代替程序段中的“A”字符,观 察屏幕上的输出有何变化,并查看DL中的内容。 (3)分别用0DH、0AH、24H代替程序段中的“A”字符,观察屏幕上 的输出有何变化。 (4)用07H代替程序段中的“A”字符,观察屏幕上有无输出?计算机内的扬声器是否发出“哔”的声音? 3.按要求运行程序,并回答问题。 提示:系统使用0AH号功能调用时,按如下方法设置键盘缓冲区:

在DS:0000H开始的内存区域设置变量名为M1的如下键盘缓冲区:DATA SEGMENT M1 DB 5,0,5 dup (?) DATA ENDS 然后输入以下程序段并单步运行,执行INT 21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、〈回车〉这六个键。 LEA DX,M1 MOV AH,0AH INT 21H 程序段运行完后,检查DS:0000H开始 的内存区域: ①DS:0001H单元的内容是什么?它表示了什么含义? ②从DS:0002H开始的内存区域中的内容是什么?其中是否有字符“1” 的ASCII码?为什么? 4.要在屏幕上显示一个字符串“Hello, world”,写出该字符串变量的定义语句和显示这个字符串的程序段。上机验证之。(此题不要求写在实验报告上) 四、实验报告要求 1.整理出运行完整的实验程序和运行结果。 2.回答题目中的问题。 3. 1、2、9、10号功能的输入输出参数有哪些?分别放在什么寄存器中? 4.

实验09-字符串

实验九字符串程序设计 班级:学号:姓名:评分: 一.【实验目的】 1、熟练掌握字符串的存取和操作方法方法。 2、进一步掌握C程序的调试方法和技巧。 二.【实验内容和步骤】 1、程序调试题 A.目标:进一步学习掌握程序调试的方法和技巧。 B.内容:参照《实验指导》教材P71“1.调试示例”,从键盘输入一个以回车键结束的字符串(少于80个字符),将它的内容逆向输出。例如:输入“ABCD”,输出“DCBA”。改正程序中的错误,使其实现程序的功能。(注:程序文件保存在“调试示例”文件夹中,文件名为error08_1.cpp) ①调试正确的源程序清单 #include int main( ) { int i, k, temp; char str[80]; printf("input a string: \n"); i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = '\0'; k = i - 1; for(i = 0; i < k; i++){ /* 调试时设置断点 */ temp = str[i]; str[i] = str[k]; str[k] = temp; k--; } /* 调试时设置断点 */ for(i = 0; str[i] != '\0'; i++) putchar(str[i]); printf("\n"); return 0; } ②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 2、完善程序,并调试运行程序 题目(1)求字符串长度。程序功能:连续输入一批以#结束的字符串(字符串的长度不超过80),遇## 则全部输入结束。统计并输出每个字符串的有效长度。例如:输入:hello 12#abc+0##,表示连续输入2个字符串"hello

操作系统原理实验五

实验五线程的同步 1、实验目的 (1)进一步掌握Windows系统环境下线程的创建与撤销。 (2)熟悉Windows系统提供的线程同步API。 (3)使用Windows系统提供的线程同步API解决实际问题。 2、实验准备知识:相关API函数介绍 ①等待对象 等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject ())和等待多个对象(WaitForMultipleObject())两个API函数。 1)等待一个对象 WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象 之一。 ·Change ontification:变化通知。 ·Console input: 控制台输入。 ·Event:事件。 ·Job:作业。 ·Mutex:互斥信号量。 ·Process:进程。 ·Semaphore:计数信号量。 ·Thread:线程。 ·Waitable timer:定时器。 原型: DWORD WaitForSingleObject( HANDLE hHandle, // 对象句柄 DWORD dwMilliseconds // 等待时间 ); 参数说明: (1)hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。 (2)dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒,如表2-1所示。 返回值: 如果成功返回,其返回值说明是何种事件导致函数返回。

Static HANDLE hHandlel = NULL; DWORD dRes; dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms 2)等待对个对象 WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与 WaitForSingleObject()相同。 原型: DWORD WaitForMultipleObjects( DWORD nCount, //句柄数组中的句柄数 CONST HANDLE * lpHandles, //指向对象句柄数组的指针 BOOL fWaitAll, //等待类型 DWORD dwMilliseconds //等待时间 ); 参数说明: (1)nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。 (2)* lpHandles:指向对象句柄数组的指针。 (3)fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个 对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数 返回。 (4)dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒。 返回值:、 如果成功返回,其返回值说明是何种事件导致函数返回。 各参数的描述如表2-2所示。

实验5字符串的操作

博客网站设定了校验密码的规则,编写方法检验一个字符串是否是合法的密码。规则如下: 密码长度在8-16 之间 密码只能包含字母和数字 密码必须存在至少2 个数字如果用户输入的密码符合 2. import java.util.Scanner; 3. import java.util.regex.Pattern; 4. public class Check { 5. public static void main(String[] args) { 6. System.out.println("请输入密码:"); 7. Scanner sc = new Scanner(System.in); 8. String str = sc.next(); 9. Check ch = new Check(); 10. ch.checkup(str); 11. sc.close(); 12. } 13. 14. public void checkup(String str) { 15. String patternStr1 = "([0-9]|[a-zA-Z]){8,16}"; 16. String patternStr2 = ".*\\d.*\\d.*"; 17. boolean result1 = Pattern.matches(patternStr1, str); 18. boolean result2 = Pattern.matches(patternStr2, str); 19. if (result1 && result2) { 20. System.out.println(" valid password"); 21. } else { 22. System.out.println(" Invalid password "); 23. } 24. } 25. } 26. String patternStr2 = ".*\\d.*\\d.*"; 27. boolean result1 = Pattern.matches(patternStr1, str); 28. boolean result2 = Pattern.matches(patternStr2, str); 29. if (result1 && result2) { 30. System.out.println(" valid password"); 31. } else { 32. System.out.println(" Invalid password "); 33. } 34. } 35. } 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到Student 类中作为类的私有属性。创建一个Student 类型的对象数组,对学号进行升序排序并输出 /*从键盘输入多行文本,格式如下: 学生端名称,姓名,班级名称,学生ID,注册时间 姜涛,姜涛,,20092212232,2011-11-4 9:06:56

实验四 数组及其字符串的处理

实验四数组及其字符串的处理 1.输入一串英文字母,统计每个字母(不区分大小写)出现的次数。(输 出统计结果时一律显示为小写字母) 如输入:Good 则输出:字母d有1个 字母g有1个 字母o有2个 请根据提示填空,使程序实现相应功能。 #include main() { char ch[10000]; //用于保存输入的字母串 int nnum[26]=【1】;/* 赋初值,使各元素值为0 nnum用于存储各字母出现的次数, 因字母表共有26个字母,因此元素个数为26 */ int i,j; printf("请输入一串字母\n"); scanf("%s",【2】);//读取字符串 i=0;//变量i用于遍历整个字符串各元素,初值为0,表示从字符数组首元素开始 while(【3】) //依次读取各元素,直至遇到字符串结束符’\0’ { j=(ch[i]>=65&&ch[i]<=90)?ch[i]-65:ch[i]-97; /*若输入为字母,则用j 保存其在字母表中的位 次*/ if (【4】)nnum[j]++;//若j值不超限,则将该字母累计数加1 【5】;// 改变i值,换至下一个元素 } for(i=0;i<26;i++) if(nnum[i]!=0) printf("字母%c有%d个\n",97+i,【6】); //按题目要求输出结果 return; } 编程题 2.输入10个整数存入数组,找出其中的最大数及其位置。 (位置从0开始编号)

3.求裴波那契数列(1 1 2 3 5 8 13 21 34……)的前18项。 4.求字符串长度(实现strlen 函数的功能) 提示:可参考第1题。 5.输入一个5*5的矩阵(#define N 5),求 (1)所有元素的和 (2)主对角线元素之和 (3)最大值及最小值所在位置 #include main() { double mat[5][5]; int i,j; 【此处补充定义其它所需变量】 for(i=0;i<5;i++) for (j=0;j<5;j++) scanf("%lf",&mat[i][j]); 【完成其余代码,实现该题(1)(2)(3)的功能】 return; }

操作系统原理实验十一

实验十一银行家算法模拟实现 1实验类型 设计型(4学时)。 2实验目的 1)理解死锁避免相关内容; 2)掌握银行家算法主要流程; 3)掌握安全性检查流程。 3实验描述 本实验主要对操作系统中的死锁预防部分的理论进行实验。要求实验者设计一个程序,该程序可对每一次资源申请采用银行家算法进行分配。 4实验内容 1)设计多个资源(≥3); 2)设计多个进程(≥3); 3)设计银行家算法相关的数据结构; 4)动态进行资源申请、分配、安全性检测并给出分配结果。 5实验要求 1)编写程序完成实验内容; 2)画出安全性检测函数流程图; 3)小组派1人上台用PPT演讲实现过程; 4)撰写实验报告。

6测试要求 1)进行Request请求,输入参数为进程号、资源号和资源数; 2)进行3次以上的Request请求; 3)至少进行1次资源数目少于可用资源数,但不安全的请求。 7相关知识 7.1银行家算法的数据结构 1)可利用资源向量Available。其中每个元素代表每类资源的数目。 2)最大需求矩阵Max。其中每个元素代表每个进程对于每类资源的最大需求量。 Max[i,j]=K表示i进程对于j类资源的最大需求量为K。 3)分配矩阵Allocation。其中每个元素代表每个进程已得到的每类资源的数目。 4)需求矩阵Need。其中每个元素代表每个进程还需要的每类资源的数目。 7.2银行家算法 Request i [j]=K表示进程Pi需要K个j类资源。 1)如果Request i [j]≤Need[i , j],便转向步骤2,否则认为出错。 2)如果Request i [j]≤Available[j],便转向步骤3,否则表示无足够资源,Pi需等待; 3)系统尝试分配资源给Pi; 4)系统进行安全性检查,检查此次资源分配后,系统是否安全。如果安全,则正式分配资源,否则撤销此次分配。 7.3安全性算法 1)设置两个向量:工作向量Work和Finish。算法开始时Work=Available;Finish 表示系统是否有足够的资源分配给进程,使之运行完成,开始时,令 Finish[i]=False;如果有足够的资源分配给进程,则令Finish[i]=True。 2)从进程集合中找到一个能满足下列条件的进程:Finish[i]=False;Need[i,j] ≤Work[j],若找到,执行步骤3),否则,执行步骤4); 3)Pi获得所需资源后,可顺利执行指导完成,并释放它占有的资源。并执行:Work[j]=Work[j]+Allocation[i , j]; Finish[i] = True; 到第2)步。

实验六字符及字符串处理

实验六字符及字符串处理 一、实验目的 1.掌握头文件ctype.h的用法; 2.掌握常用函数isalpha、isdigit、isspace、isupper、islower、toupper、tolower等常用函数的使用。 3.掌握常用字符串处理函数strcmp、strcat等的模拟。 二、实验内容 1.字符处理练习。编写一个程序提示用户输入一系列字符,只提示一次。在循环中使用scanf(“%c”,…)语句,一次读入一个字符。根据输入内容生成如下输出结果:一次一行,回显输入字符;调用isalpha()检查是否为字母,若是调用touper()函数将其转换为大写字母,如果不是,则打印出一条错误信息,如果字符为句点,打印一条说明信息后退出。 2.回文。设计一个程序测试一条语句是否是回文:即从前向后读和从后向前读的字母都是相同的。首先提示用户输入一条语句。使用getchar一次读入所有字符,直至出现句号为止。读取过程中要求:(1)回显输入字符;(2)调用tolower()函数将每个字符转换成小写;(3)计算读入字符的个数(包括句号在内);(4)将转换后的字符保存在数组的下一个元素中。算法提示:从数组的结尾和开始位置一起比较字母。比较第1个和最后一个,第2个和倒数第2个,依此类推。如果有一对无法匹配,则退出循环后宣布该条语句不是回文。如果一直进行到语句中内始科没有出现问题,则停止然后宣布输入语句为回文。假设输入内容不会超过80个字符。 3.不用库函数模拟strcat和strcmp函数。 三、选做内容 1.检测字符。使用字符分类函数将字符分成几个类:大写字母、小写字母、数字、代白字符和其他符号。编写一个函数完成测试。在主函数中读取一系列字符,直至遇到句号为止。回显每个输入字符,并找印出相应的标注。计算每个类别出现的次数。处理句号的同时为句号计数,然后打印出字符总额并退出程序。算法提示:使用一个计数器数组,递增计数器时可用枚举常量作为数组的下标。 2.编写一个程序在表格中显示ASCII代码,类似附录中的ASCII表格。不要试图直接打印无法打印的字符,跳过列出十六进制代码的列。 四、常见错误 1.char和int。理论上讲,在C语言中,字符就是极短的整数。但在要领上又是一种独立的类型,有自己独立的操作和不同的输入输出方法。确保不要进行无谓的操作,例如两个字符相乘等; 2.字符输入。输入字符时,空白字符是可能造成困扰的原因。Scanf()对数字类型的输入转换处理自动跳过之前的空白字符,在读取第1个非空白字符时才开始存储数据。但是,无论是否空白字符,getchar()都返回第1个字符,带有“%c”的scanf也是一样。为了跳过之前的空白字符,必须使用带有“%c”限定词(格式中的百分号之前包括一个空格)的scanf()。如果遗漏了这个空格,程序就可能读取空白字符并试图将其翻译成为数据,这通常都会导致出现错误。因此,程序员必须清楚地知道自己想做什么(读取空白字符还是跤过空白字符),然后为任务选择恰当的输入机制。 实验七字符串(二) 一、实验目的 1.熟练掌握字符串的匹配查找。 2.熟练掌握字符串的插入操作。 3.熟练掌握字符串的压缩还原处理。 二、实验内容 1.改错题 以下程序对一个由字母和数字字符组成的字符串从头至尾作如下变换:

微机原理实验三 字符串匹配程序.

实验三字符串匹配程序 教学目标:通过教学让学生掌握显示提示信息的方法及接收键盘输入信息的方法。 重点、难点: 重点:字符串匹配的算法,用INT 21H 的09号子功能显示提示信息,用INT 21H的0A号子功能接收字符 难点:用INT 21H的0A号子功能接收字符 课时安排:2学时 教学过程:讲解实验过程 一实验目的: 掌握显示提示信息的方法及接收键盘输入信息的方法 二实验内容: 编写程序,实现两个字符串的比较。如相同,则显示“MATCH”,否则,显示”NO MATCH”. 三程序框图(讲解流程图,介绍编写程序的思路) 四实验原理 1、讲解DB、DUP、EQU等伪指令的功能以及使用格式 2、讲解INT 21H 的09H子功能的功能、工作情况以及使用格式 3、讲解INT 21H的0AH子功能的功能、工作情况以及使用格式 4、讲解串扫描指令SCASB的功能以及使用格式 5、入栈、出栈指令PUSH 、POP的使用情况 五实验参考程序

CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS1 DB 'MA TCH',0DH,0AH,'$' MESS2 DB 'NO MA TCH',0DH,0AH,'$' MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' MAXLEN1 DB 81 ACTLEN1 DB ? STRING1 DB 81 DUP(?) MAXLEN2 DB 81 ACTLEN2 DB ? STRING2 DB 81 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DATA START: MOV AX,DA TA MOV DS,AX MOV AX,DA TA MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,TOP ;段寄存器及堆栈初始化 MOV AH,09H MOV DX,OFFSET MESS3 INT 21H ;显示输入提示1 MOV AH,0AH MOV DX,OFFSET MAXLEN1 INT 21H ;接收键入的字符串1 CRLF ;回车换行 MOV AH,09H MOV DX,OFFSET MESS4 INT 21H ;显示输入提示2 MOV AH,0AH MOV DX,OFFSET MAXLEN2 INT 21H ;接收键入的字符串2 CRLF CLD

字符串处理实验报告

字符串处理实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: 使学生能够掌握PHP中常用字符串函数的使用方法 实验内容: 编写PHP页面,实现字符串翻转功能、中文字符串截取、字符串对比、HTML 字符串过滤等功能 实验步骤与调试过程: 第一步、 php服务器安装并成功后就可以开始php编程之旅单击任务栏中的系统托盘中wampserver图标, 弹出界面用于管理服务器调试一下,然后打开start all services 选项,时启动服务器 在C:\wamp\www下建立项目sez(十二周首字母),并在该目录下新建一个文本文档,然后将该文件名称从新建文本文档.txt修改为test1.php 第二步、在sez项目中建立文件test2.php,此页面主要用来实现中文字符串截取功能,代码如下所示。 在sez项目中建立文件test3.php,此页面主要用来实现字符串对比功能,代码如下所示。 在sez项目中建立文件test4.php,此页面主要用来实现HTML字符串过滤功能,代码如下所示。 第三步、以记事本方式打开test1.php文件输入代码 第四步、保存test1.php文件内容后,启动php服务器 第五步、打开IE浏览器,在地址栏中输入http://localhost/1/helloworld.php后按回车键 看到想要看到页面则这个php程序编写运行成功 第六步、为保证php程序文件的扩展名确实为php不能隐藏已知文件类型的扩展名单击工具 文件夹选项,弹出文件夹选项对话框 第七步、在文件夹选项对话框中选择查看选项卡取消那个复选框,然后单击确定按钮即可

实验六 字符串处理及基础类库

实验六字符串处理及基础类库 一、实验目的 1、理解并掌握String类、StringBuffer类; 2、理解并掌握StringTokenizer类 3、掌握字符串与其他数据类型的转换 4、掌握Math类的使用。 5、了解和掌握集合框架类。 6、掌握Java Application命令行参数的使用 二、实验内容与要求 1.,理解String类的使用 利用下面的关键代码编写一个完整的程序 String s=new String("This is an demo of the String method."); //String s="This is an demo of the String method."; System.out.println("Length: "+s.length()); System.out.println("SubString: "+s.substring(11,15)); public class theString { public static void main(String[] args){ String s=new String("This is an demo of the String method."); //String s="This is an demo of the String method."; System.out.println("Length: "+s.length()); System.out.println("SubString(int):"+s.substring(11)); System.out.println("SubString(int, int): "+s.substring(11,15)); } } 2.理解StringBuffer类的使用 利用下面的关键代码编写一个完整的程序 StringBuffer sb=new StringBuffer("Hello World!"); sb.append(" Hello Java!"); sb.insert(12," And"); System.out.println(sb); System.out.println(sb.charAt(0)); sb.setCharAt(0,''h''); System.out.println(sb.charAt(0)); System.out.println(sb);

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

本科实验报告 实验名称: 字符串操作实验 课程名称: 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)和数据类型修改目的变址寄存器的内容。

实验三 字符串操作

一、实验要求和目的 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。 3、字符串处理基本指令 (1)MOVS传送指令 格式:MOVS DST,SRC或MOVSB(传送字节)或MOVSW(传送字)。后面两种形式需要与REP指令结合使用。该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由目的变址寄存器(DST)指向的附加段中的一个字(或字节)中去,同时,根据方向标志及数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改。 (2)STOS存入串指令 格式:STOS DST或STOSB(存入字节)或STOSW(存入字)。 该指令把AL或AX的内容存入由目的变址寄存器指向的附加段的某单元中,并根据方向标志(DF)和数据类型修改目的变址寄存器的内容。 (3)LODS从串取指令

相关文档
最新文档