串操作指令.
- 格式:ppt
- 大小:164.50 KB
- 文档页数:18
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变量中。
串操作类指令采用比较特殊的数据串寻址方式,在操作主存连续区域的数据时,特别好用、因而常用. 要注意:串操作指令的操作数一定是内存的区域!!!!!使用的寄存器一定是AL 或AX ,不能为其他寄存器!!!!!使用串操作指令及重复前缀前要先对DS 、ES 、SI 、DI 、CX 、DF(方向标志)等赋初值。
补充知识:✧ 串数据类型串操作指令的操作数是主存中连续存放的数据串(String )——即在连续的主存区域中,字节或字的序列串操作指令的操作对象是以字(W )为单位的字串,或是以字节(B )为单位的字节串 ✧ 两种情况:1、两个操作数均为串数据;MOVS ——用于将一串从源移动到目的CMPS ——用于将两串逐一比较2、两个操作数一为AL/AX ,另一为串STOS ——用于将AL/AX 中字节/字填充到目的串LODS ——用于从源串中取字节/字到AL/AXSCAS ——用于从目的串中查找特定的字节/字3、串寻址方式✓ 源操作数用寄存器S I 寻址,默认在数据段DS 中:DS:[SI] ,但允许段超越✓ 目的操作数用寄存器D I 寻址,默认在附加段ES 中:ES:[DI] ,不允许段超越✓每执行一次串操作指令,SI和DI将自动修改:✓±1(对于字节串)或±2(对于字串)✓执行指令CLD指令后,DF = 0,地址指针增1或2✓执行指令STD指令后,DF = 1,地址指针减1或2注:CLD:将标志寄存器Flag的方向标志位DF清零,字串操作中的编制寄存器SI和DI自动加一或二,字串处理由前往后。
STD:将标志寄存器Flag的方向标志位DF置一,字串操作中的编制寄存器SI和DI自动减一或二,字串处理由后往前。
1、串传送指令(move string把字节或字操作数从主存的源地址传送至目的地址)MOVS B;字节串传送:ES:[DI]←DS:[SI];SI←SI±1,DI←DI±1MOVS W;字串传送:ES:[DI]←DS:[SI];SI←SI±2,DI←DI±2♌看书P58例题即可2、串存储STOS(store string把AL或AX数据传送至目的地址)STOS B;字节串存储:ES:[DI]←A L;DI←DI±1STOS W;字串存储:ES:[DI]←A X;DI←DI±2♌串存储指令示例:mov ax,0mov di,0mov cx,8000h;cx←传送次数(32×1024)cld ;DF=0,地址增加again:stosw ;传送一个字dec cx ;传送次数减1jnz again ;传送次数cx是否为0思考题:可将CLD改为STD吗?如何改用STOSB?可不用给DI 赋值吗?3、串读取LODS(load string,把指定主存单元的数据传送给AL或AX)LODSB;字节串读取:AL←DS:[SI];SI←SI±1LODSW;字串读取:AX←DS:[SI];SI←SI±2♌串读取和串存储指令应用:movsi,offset block Array movdi,offsetdplusmovbx,offsetdminusmovax,dsmoves,ax;设置es=ds,说明数据都在一个段中movcx,count ;cx←字节数cldgo_on: lodsb ;从block取出一个数据test al,80h;检测符号位,判断是正是负jnz minus;符号位为1,是负数,转向minusstosb;符号位为0,是正数,存入dplusjmp again;程序转移到again处继续执行minus: xchgbx,distosb ;把负数存入dminusxchgbx,diagain: dec cx ;字节数减1jnzgo_on ;完成正负数据分离4、串比较CMPS(compare string;将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系)CMPSB;字节串比较:DS:[SI]-ES:[DI];SI←SI±1,DI←DI±1CMPSW;字串比较:DS:[SI]-ES:[DI];SI←SI±2,DI←DI±2♌串比较指令示例:movsi,offset string1movdi,offset string2movcx,count ;是字符串的个数(字节)cldagain: cmpsb ;比较两个字符jnzunmat ;有不同字符,转移dec cxjnz again ;进行下一个字符比较mov al,0 ;字符串相等,设置00hjmp output ;转向output,这句不能掉了unmat: mov al,0ffh ;设置ffhoutput: movresult,al ;输出结果标记5、串扫描SCAS(scan string,将AL/AX减去目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系)SCASB;字节串扫描:AL-ES:[DI];DI←DI±1SCASW;字串扫描:AX-ES:[DI];DI←DI±2♌串扫描指令示例:movdi,offset stringmov al,20h ;20H是什么?movcx,countcldagain: scasb ;搜索jz found ;为0(ZF=1),发现空格dec cx ;不是空格jnz again ;搜索下一个字符... ;不含空格,则继续执行found: ...6、重复前缀指令(repeat)串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。
实验四串操作指令程序实验一、实验目的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。