串操作指令
- 格式:doc
- 大小:39.50 KB
- 文档页数:6
abplc字符串操作指令ABPLC字符串操作指令是一种用于PLC编程的指令,它可以用于处理字符串数据。
字符串是一种常见的数据类型,它由一系列字符组成,可以用于存储文本、数字、符号等信息。
在PLC编程中,字符串操作指令可以用于将字符串拼接、分割、替换、比较等操作,从而实现更加复杂的逻辑控制。
ABPLC字符串操作指令的语法和用法ABPLC字符串操作指令的语法和用法与其他PLC指令类似,需要指定操作的字符串、操作类型和操作结果的存储位置。
下面是ABPLC字符串操作指令的一般语法:STR_操作类型(操作字符串, 操作参数, 结果存储位置)其中,操作类型可以是以下几种:1. CONCAT:将两个字符串拼接成一个新的字符串。
2. SUBSTR:从一个字符串中提取一个子字符串。
3. REPLACE:将一个字符串中的某个子字符串替换为另一个字符串。
4. COMPARE:比较两个字符串是否相等。
5. LENGTH:获取一个字符串的长度。
6. TRIM:去除一个字符串的首尾空格。
7. UPPER:将一个字符串转换为大写字母。
8. LOWER:将一个字符串转换为小写字母。
下面是ABPLC字符串操作指令的具体用法:1. CONCAT:将两个字符串拼接成一个新的字符串。
STR_CONCAT("Hello", "World", Result)这个指令将会把"Hello"和"World"拼接成一个新的字符串"HelloWorld",并将结果存储在Result变量中。
2. SUBSTR:从一个字符串中提取一个子字符串。
STR_SUBSTR("HelloWorld", 2, 5, Result)这个指令将会从"HelloWorld"字符串中提取第2个字符到第5个字符之间的子字符串"lloW",并将结果存储在Result变量中。
实验四串操作指令程序实验一、实验目的1. 熟悉五种串操作指令的功能,会编写常用的串操作应用程序。
2. 会使用DEBUG 命令查看串操作运行的结果。
二、实验环境1. 硬件:PC 微机2. 软件:Masm for Windows 汇编集成开发环境三、实验讲义串指连续存放在存储器中的一些数据字节、字或者双字。
串操作允许对程序连续存放的数据块进行操作。
这是唯一一种可以从存储器到存储器的指令。
源串一般存放在数据段,偏移地址由SI 指定;目标串必须在附加段,偏移地址由DI 指定。
在每次进行串操作后,SI 和DI 两个指针会自动修改。
修改的是增量方向还是减量方向由标志位DF 决定,DF=0 为增量操作,DF=1 为减量操作。
CX 中存放的是数据块的长度,可在CX 前加重复前缀标志,对串进行连续操作。
执行串指令之前,一般先进行如下操作:源串首地址(末地址)→ SI目的串首地址(末地址)→ DI串长度→ CX建立方向标志DF1. 重复前缀标志助记符判断条件说明REP CX 0 CX=CX-1,若CX 0 则重复REPE 或REPZ CX 0 且ZF=1 CX=CX-1,若CX 0 且ZF=1 则重复REPNE 或REPNZ CX=0 且ZF=0 EX=CX-1,若CX 0 且ZF=0 则重复2. 方向标志指令方向标志由标志位DF 决定,有CLD 和STD 两种指令。
CLD 将DF 置0,地址为增量操作。
STD 将DF 置1,地址为减量操作。
3. 串传送指令格式: [REP] MOVS DESTS, SRCS[REP] MOVSB/ MOVSW / MOVSD功能:将DS:SI 中的源串数据传送到ES:DI 规定的目的串单元中。
加重复前缀REP 可实现连续存放的数据块的传送。
例1:将源串中前三个字节的数据传送到目的串。
源串在数据段(DATAS)中,存放在SRC 单元中;目的串在附加数据段(EDATAS)中,存放在DEST 单元中。
3.3.4 串操作指令串或字符串是指在内存中连续存放的由字节或字组成的数据串,可以是数值型或字符型数据。
我们常常要从数据串中查找特定数据;或者比较两个串是否相同等,或者把一个串从内存的一个区域传送到另一个区域等操作;使用串操作指令就是最佳选择。
串操作指令对串中数据进行相同的操作,可以以字节为单位或以字为单位,可操作的最大串长度为64K。
串操作指令包括:MOVS 串传送CMPS 串比较SCAS 串扫描STOS 存入串LODS 取串这五种串操作指令都是隐含指令,说明如下:①源操作数(源串)默认由DS:SI指定,即源串默认在数据段,允许段超越为CS、ES 和SS。
偏移地址指针SI自动修改。
②目的操作数(目的串)默认由ES:DI指定,即目的串默认在附加数据段。
不允许段超越。
偏移地址指针DI自动修改。
③通过设定标志寄存器中的方向标志位DF的值,可以控制串操作的方向。
DF设定为0,偏移地址指针SI和DI自动增量,如果串操作为字节操作,每次偏移地址指针加1,如果为字操作,每次偏移地址指针加2。
DF设定为1,偏移地址指针自动减量。
如果串操作为字节操作,每次偏移地址指针减1,如果为字操作,每次偏移地址指针减2。
如图3-9所示。
④串操作指令本身只操作一次,例如指令MOVSB的功能为将DS:SI指明的一个字节传送到ES:DI指明的内存单元中。
如果要使整个的源串数据全部传送到目的串中,需要再加一个重复前缀REP。
用于串操作指令的重复前缀有三种,分别是:REP:无条件重复前缀REPE:相等时重复(ZF=1),REPZ:比较结果为0时重复REPNE:不相等时重复(ZF=0),REPNZ:比较结果不为0时重复⑤带重复操作前缀的串操作指令,需要指明重复次数。
用计数器CX指定串长度,即重复次数,每次串操作后CX自动减1,直到CX=0,串操作结束。
综上所述:在使用串操作指令前应预先设置源串指针DS:SI,目的串指针ES:DI,计数器CX 和标志位DF。
串操作指令
串操作指令就是用一条指令实现对一串字符或数据的操作。
8086的串操作指令的特点是:
◆通过加重复前缀来实现重复操作。
重复的次数取决于C X寄存器的内容(在字符串比较和字符串检索指令中还与Z F标志有关)。
◆可以对字节串进行操作,也可以对字串进行操作。
◆所有的串操作指令都用寄存器S I对源操作数进行间接寻址,默认段寄存器为D S;所有的串操作指令都用寄存器D I为目的操作
数进行间接寻址,默认段寄存器为E S。
串操作指令是唯一的一组源操作数和目的操作数都在存储器中的指令。
◆串操作时,地址指针的修改与方向标志D F有关,当D F=1时,S I和D I作自动减量修改,当D F=0时,S I和D I作自动增量修改。
串操作指令一共有5条:
◆字符串传送指令M O V S B/M O V S W
◆字符串比较指令C M P S B/C M P S W
◆字符串检索指令S C A S B/S C A S W
◆取字符串指令L O D S B/L O D S W
◆存字符串指令S T O S B/S T O S W
与上面串操作指令配合使用的重复前缀有:
◆重复R E P
◆相等则重复/为零则重复R E P E/R E P Z
◆不相等则重复/不为零则重复R E P N E/R E P N Z
在串操作指令的前面加上重复前缀,使C P U能重复执行该指令,这使处理长字符串比用软件循环处理快得多。
在执行有重复前缀的
串操作指令时,C X寄存器控制重复次数,每重复执行一次,C X内
容减1,C X减为0结束;此外,还可以按规定的条件(Z F=1或Z F =0)结束重复过程。
重复前缀对规定条件的检测,是在每次进入串操作以前进行的。
所以若初始化使操作次数C X为0,它将不会引起任何操作。
一、字符串传送指令M O V S B/M O V S W
字符串传送指令M O V S B/M O V S W将位于D S段的、由S I所指出的存储单元的内容传送到位于E S段、由D I所指的存储单元中,再修改S I和D I,从而指向下一个元素,M O V S B用于字节传送,
M O V S W用于字传送。
M O V S B或M O V S W指令前面通常加重复前缀R E P。
重复执行的次数取决于C X寄存器的值,每次执行先检查C X内容,当C X为0则退出,不为0则将C X内容减1,然后传送一次。
【例】我们来看下面的程序段。
M O V S I,1000H;源有效地址地址为1000H
M O V D I,2000H;目的有效地址地址为2000H
M O V C X,100;字符串长100个字节
C L D;方向标志清0,使指针按增量方向修改
R E P M O V S B;将源地址开始的100个字节传送到目的地址,每传送一次,地址指针加1,C X内容减1
二、字符串比较指令C M P S B/C M P S W
字符串比较指令C M P S B/C M P S W把在D S段中由S I所指的字节或者字和在E S段中由D I所指的字节或者字相比较(相减),影响标志位,并自动修改地址指针。
C M P S B/C M P S W指令的前面常常加重复前缀R E P E/R E P Z或
R E P N E/R E P N Z。
通过重复前缀的控制,利用C M P S B或者C M P S W,可以实现在两个字符串中寻找第一个不相等的元素或者第一个相等
的元素。
【例】下面这段程序:假定在缓冲区B U F1和缓冲区B U F2各存有一个字符串,长度为10个字符。
程序比较两个字符串,如果相等,将B L寄存器置为1,否则置为0。
L E A S I,B U F1;S I寄存器指向B U F1
L E A D I,B U F2;D I寄存器指向B U F2
C L D;清方向标志
M O V C X,0A H;计数器为10
M O V B L,1;先将B L置为1
R E P Z C M P S B;如比较结果相等,则重复执行,D I和S1分别加1,C X减1
J Z D O N E;如10个字节都相同,则B L=1
D E C B L;否则B L置为0
D O N E:;后续处理
使用C M P S B/C M P S W指令时,要注意:
前缀R E P N Z/R E P N E表示两个字符串的字节(或字)比较不等时,继续进行比较。
前缀R E P Z/R E P E表示两个字符串的字节(或字)比较相等时,继续比较。
每一种前缀都有两种形式,比如R E P N Z和R E P N E,它们的功能一样,使用时可以任意选择。
三、字符串检索指令S C A S B/S C A S W
使用字符串检索指令S C A S B或者S C A S W时,将A L中的字节或者A X中的字与位于E S段由D I寄存器所指的内存单元的字节或字相比较(相减,影响标志位)。
通过前缀,可以实现在D I所指的字符串中,寻找第一个与A L(或A X)的内容不同的字节(或字),或者寻找第一个与A L(或A X)的内容相同的字节(或字)。
【例】下面这段程序,要在T A B开始的100个字节串数据中查找’$’字符,如果找到则把B L寄存器置为1,没有找到则B L置为0。
M O V B L,1
M O V A L,’$’
L E A D I,T A B;字符串首地址送到D I
C L D;方向标志清0
M O V C X,100;字符串中共有100个字节
R E P N Z S C A S B;比较结果不等,则继续往下比
J Z D O N E;找到和A L内容相同的字符则B L=1,转后续处理
D E C B L;A L中的值和字符串中的所有字节都不等,
置B L=0
D O N E:;后续处理
使用S C A S B/S C A S W指令时,有几点要注意:
1、目的字符串默认在E S段中,字符串首址的偏移量必须用D I 指出。
2、上面例子中,退出R E P N Z S C A S B串操作循环的情况有两种:一种情况是检索到字符串中某个字节与A L中的字节相等,从而退出;另一种情况是字符串中没有任何一个字节和A L中的字节相等,但已经检索完毕,从而退出。
随后,可以通过对Z F的检测来判断当前是处于哪种情况。
如果是前一种情况,则Z F=l;如果是后一种情况,则Z F=0。
要注意的是,Z F并不受C X在串操作过程中不断减1的影响。
四、取字符串指令L O D S B/L O D S W
取字符串指令L O D S B/L O D S W将位于D S段由S I所指的存储单元的内容取到A L或A X中。
用L O D S B时,取的是字节,取完后,地址自动加1或减l;用L O D S W时取的是字,取完后地址自动加2或减2。
因为使用L O D S B/l O D S W指令时,取来的字节或字放在A L或A X中,所以L O D S B/L O D S W指令前不能加前缀,否则,A L或A X 中的内容会被后一次取到的内容所覆盖,最后只能得到字符串的最后1个字节或字。
实际使用时,L O D S B/L O D S W指令一般用在循环程序中。
五、存字符串指令S T O S B/S T O S W
存字符串指令S T O S B/S T O S W把A L或A X中的数存到E S段中由D I寄存器所指的内存单元,并且自动修改地址指针。
加上前缀R E P 以后,用S T O S B或S T O S W指令可以使一个内存区域中填满相同的数。
【例】下面的程序段使0400H开始的256个单元清0。
C L D;清除方向标志
L E A D I,[0400H];将目的地址0400H送D I
M O V C X,0080H;每次传送一个字,共有128个字
X O R A X,A X;A X清0
R E P S T O S W;将目的区的256个字节清0。