串操作指令
abplc字符串操作指令

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变量中。
微机原理 第5章5.2.4串操作类指令

第5章
2、REPZ重复前缀指令
REPZ
;每执行一次串指令,CX减1 每执行一次串指令,CX减 并判断ZF是否为0 ZF是否为 ;并判断ZF是否为0, 只要CX CX= ZF= 重复执行结束 ;只要CX=0或ZF=0,重复执行结束
【例5.42】比较S1、S2两个数据串是否相同,不同则 】 比较 、 两个数据串是否相同, 两个数据串是否相同 例5.42:比较字符串 : 跳到NOMATCH执行。 执行。 跳到 执行 S1 DB 0,1,1,0,0 S2 DB 0,1,1,1,0 …… CLD LEA SI,S1 ;源串偏移地址赋值给 源串偏移地址赋值给SI 源串偏移地址赋值给 LEA DI,ES:S2 ;目的串偏移地址赋值给 目的串偏移地址赋值给SI 目的串偏移地址赋值给 MOV CX,5 ;源串和目的串的数据个数 源串和目的串的数据个数 AGAIN: CMPSB ;源串与目的串相减,标志位 源串与目的串相减, 源串与目的串相减 JNE NOMATCH ;有任一不同,跳到NOMATCH 有任一不同,跳到 有任一不同 DEC CX ;数据串没比较完,继续比较 数据串没比较完, JNZ AGAIN 数据串没比较完 NOMATCH:
第5章
四、串比较CMPS
将主存中的源操作数减去目的操作数, 将主存中的源操作数减去目的操作数,以便设 置标志(影响AF,ZF,PF,SF,OF,CF) , 进而比 置标志 ( 影响 ) 较两操作数之间的关系 CMPSB ;字节串比较:DS:[SI]-ES:[DI] 字节串比较:DS:[SI]- SI←SI± DI←DI± ;SI←SI±1,DI←DI±1 CMPSW ;字串比较:DS:[SI]-ES:[DI] 字串比较:DS:[SI]- SI←SI± DI←DI± ;SI←SI±2,DI←DI±2
串操作指令

23 D0 05 AB 92
Source
NEXT: LODSB INC AL 4、保存运算结果 5、所有操作完成否?若完成, 结束;否则继续2-4的动作 STOSB DEC CX JNZ NEXT HLT
24 D1 06 AC
Dest
DI
23 D0 05
Dest
ES
例1-2:与 REP 指令配合传送100个数。 LEA SI,Souce LEA DI,Dest MOV CX,100 LEA SI,Souce LEA DI,Dest MOV CX,100 CLD REP MOVSB HLT CX不为 0 时重复执行
SI
23 D0 05 AB 92
SI
23 D0 05 AB 92
Source
[SI] - [DI] SI+1 → SI DI+1 → DI
3、操作结束? 若否,继续2中 的操作;否则结 束程序
DI
23 D0 05 A1 92
Dest
例2-2:在内存的DS和ES段中,各有长度为50字节的字符串,试比较它们 是否相同。( 与 REPE / REPZ配合使用,找第一个不相同的数据位置)
REPNE CMPSB
JE Found MOV AX, 0 JMP Exit Found : DEC SI MOV AX, SI Exit: HLT
DI 23 D0 05 A1 92 Dest
3、SCAS指令 格式:SCASB/SCASW 功能:AL/AX-[ES:DI] DI±1或2 注意:状态位随运算结果变化。
LEA DI, DEST
MOV CX, 30 MOV AL, ‘A’
DI 53 71 41 49 68 DEST
串操作指令.

8086/8088的指令系统
串处理指令
REP MOVS:将数据段中的整串数据传送到附加段中。
DS→
源串(数据段)→ 目的串(附加段) 执行 REP MOVS 之前,应先做好: 1) 源串首地址(末地址)→ SI 2) 目的串首地址(末地址)→ DI 3) 串长度 → CX
DS:SI→
~ ES→ ~
8086/8088的指令系统
串处理指令
(6) 串输出指令OUTS
功能:将由源串中的字、字节传送到在DX寄存器指定的 I/O端口中,并根据DF和数据类型来改变源变址寄存器的 方向内容。 指令格式: OUTSB ;字节串输出: ((DX))←DS:[SI] ;SI←SI±1 OUTSW ;字串串输出: ((DX))←DS:[SI] ;SI←SI±2
ES:DI→
~ ~
4) 建立方向标志
( CLD 使 DF=0,STD 使 DF=1 )
8086/8088的指令系统
串处理指令
DS→
【例】 MOV SI,0050H MOV DI,0100H MOV CX,5 CLD REP MOVSB
20000H ‘A ’ ‘B ’ ‘C ’ ‘D ’ ‘E ’ ~ ~
8086/8088的指令系统
串处理指令
(3) 串比较指令 CMPS (p69)
CMPS SRC, DST DS:SI→ 语句格式:CMPSB——字节串比较 CMPSW——字串比较 功 能:将SI所指的源串中的一个 字节(或字)存储单元中的数据与 DI ~ 所指的目的串中的一个字节(或字) ~ 存储单元中的数据相减,并根据相减 ES→ 的结果设置标志,但结果并不保存。 ES:DI→ 即:①([SI])-([DI])。 ② 修改串指针,使之指向串中的 下一个元素。 当DF=0时,(SI)和(DI)增量 。当DF=1时,(SI)和(DI)减量。
串操作、控制转移指令

•STOS指令不影响标志位。
机械工程学院
14
微机与接口技术
例, 将字符“#”装入以AREA为首地址的100个字节中 LEA MOV MOV CLD REP HLT DI, AREA CX, 100 AL, ‘ #’ STOSB
机械工程学院
15
微机与接口技术 例,设有一长度为100的数据块,首地址为BLOCK,把其中的正数放 到首地址为PLUS_DATA的缓冲区,负数放到首地址为MINUS_DATA 的缓冲区 START: LEA SI, BLOCK LEA DI, PLUS_DATA LEA BX, MINUS_DATA MOV CX, 100 CLD LODSB TEST AL, 80H JNZ MIUS ;ZF=0,负数 STOSB ;ZF=1,正数 JMP AGAIN XCHG BX, DI STOSB XCHG BX, DI DEC CX JNZ GOON HLT
机械工程学院
17
GOON:
OK: DONE:
微机与接口技术
串操作指令一览表
指令 重复前缀 REP REPE/ REPNE REPE/ REPNE 操作数 目标,源 源,目标 目标 源 目标 地址指针 寄存器 ES:DI,DS:SI DS:SI ,ES:DI 6个状态 标志 ES:DI DS:SI ES:DI 不影响 不影响 影响的 标志位 不影响
机械工程学院
6
微机与接口技术
例,将数据段中首地址为BUFFER1的200个字节传送到附 加段首地址为BUFFER2的内存区中。可以用以下两种形式 实现:
法1: LEA LEA MOV CLD MOVS DEC JNZ HLT SI, BUFFER1 DI, BUFFER2 CX, 200 BYTE PTR[DI],[SI] CX AGAIN 法2: LEA LEA MOV CLD REP HLT
第3.3.5章 串操作类指令

80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
2.串比较指令CMPS 2.串比较指令CMPS 串比较指令 语句格式: 语句格式: ① CMPS SRC, SRC,DST CMPSB——字节串比较 ② CMPSB 字节串比较 CMPSW——字串比较 ③ CMPSW 字串比较
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
当相等/为 时重复串操作 (2) REPE/REPZ 当相等 为0时重复串操作 )
格式: 格式:REPE/REPZ string primitive (用来检查两字符串中是否 其中string primitive可为 可为CMPS或SCAS指令 有不同的元素 ) 其中 可为 或 指令 执行的操作: 执行的操作: 1如(COUNT REG)=0或ZF=0(即某次比较的结果两个操 ) 或 ( 作数不等)时退出REP,否则(即某次比较的结果两个操作数相等) 作数不等)时退出 ,否则(即某次比较的结果两个操作数相等) 往下执行。 往下执行。 2 (Count Reg) ← (Count Reg)-1 ) ) 3 执行其后的串处理指令 4 重复 1~ 3 其中,地址长度为 位时 位时, 作为Count Reg;地址长度为 位 其中,地址长度为16位时,用CX作为 作为 ;地址长度为32位 作为Count Reg。 时,用ECX作为 作为 。 总结:重复串操作条件: 总结:重复串操作条件: (COUNT REG)≠0且ZF=1; (即某次 ) 且 ; 比较的结果两个操作数相等) 比较的结果两个操作数相等) 退出串操作条件: 退出串操作条件: (COUNT REG)=0或ZF=0; 串操作条件 ) 或 ;
80x86 x86的指令系统和寻址方式 第3章 80x86的指令系统和寻址方式
8周参考:常用指令(串操作 程序控制指令 处理器控制指令)

1000H
41 42 43 44 45 46
. . .
’ A ’ B’ ’ ’C’ ’ D’ E’ ’ ’ F’
实现题目要求的程序段调试
9
MOV DI, 1000H MOV CX, 0AH MOV AL, ’E’ CLD REPNZ SCASB JZ FOUND MOV DL, ’N’ JMP DONE FOUND:DEC DI MOV ADDR, DI SUB DI, 1000H INC DI MOV NUM, DI MOV DL, ’Y’ DONE: MOV AH, 2 INT 21H HLT
31
例1:给1A000H开始的256个内存单元均减去1,若 发现某个单元减为0则立即退出循环,其后的单元 不再减1。程序段如下:(逻辑地址为1A00:0H)
MOV AX, 1A00H MOV DS, AX MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTR[DI] LOOPNZ GOON HLT
条件转移指令可实现程序的条件分支。
条件转移指令根据标志位的状态来决定是否
进行分支转移。 格式: JXX label ;xx为条件名称缩写 指令的转移范围为-128~+127字节。 主要的条件转移指令。
24
① 根据单个标志位设置的条件转移指令
JB/JC JNB/JNC/JAE JP/JPE JNP/JPO JZ/JE JNZ/JNE JS JNS JO JNO ;低于,或CF=1,则转移 ;高于或等于,或CF=0,则转移 ;奇偶标志PF=1(偶),则转移 ;奇偶标志PF=0(奇),则转移 ;结果为零(ZF=1),则转移 ;结果不为零(ZF=0),则转移 ;SF=1,则转移 ;SF=0,则转移 ;OF=1,则转移 ;OF=0,则转移
串操作指令

3.2.5串操作指令
2.CMPS 格式: [REPZ/REPE]/[REPNZ/REPNE]CMPSB 字节比较 [REPZ/REPE]/[REPNZ/REPNE] CMPSW 字比较
操作: [ES:DI]-[DS:SI],(SI) ← (SI) ±1,(DI) ← (DI) ±1 [ES:DI]-[DS:SI],(SI) ←(SI) ±2,(DI) ← (DI) ±2
微型计算机原理与接口技术
微型计算机原理与接口技术Fra bibliotek串操作指令
串操作常用于数据块快速移动、比较、搜索以及存、取等,
1.MOVS 格式: [REP] MOVSB
[REP] MOVSW 字传送 操作: [ES:DI]←[DS:SI],(SI)←(SI)±1,(DI)← (DI)±1,(CX)←(CX)-1 [ES:DI]←[DS:SI],(SI)←(SI)±2,(DI)← (DI)±2,(CX)←(CX)-1 说明:无REP前缀与MOV指令基本类似,但MOV指令无自动修 改地址指针的功能。有REP前缀表示DS:SI 指定的源串传送到 ES:DI指定的目的串中。直到计数器CX减到0为止,字节传送 SI和DI都±1;字传送,SI和DI都±2;传送一次,CX减1。
3.2.5串操作指令
执行串指令之前需作如下初始化工作: 1)设置方向标志DF。DF=0,则SI和DI增量变化,否则减量变
2)源串偏移量送SI,目的串偏移量送DI;DS指向源串所在的 段,ES 3)将传送的长度装入CX
串指令中的REP重复前缀起到了计数循环的作用,其执行过程 如下: 1) 判断(CX)是否等于零〖BFQ〗,〖BF〗若等于零,则结束 串传送, 2) (CX) ←(CX)-1 3) 执行串传送指令(MOVSB或MOVSW) 4) 转到1)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运用MOVSB指令
DATA SEGMENT NUM1 DB 50 DUP(0A0H) NUM2 DB 50 DUP(0) COUNT EQU LENGTH NUM2 ENDS
DATA CODE
SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV CX,COUNT NEXT: MOVSB LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END START
例2:同学课后应用以上指令编辑传送100字的程序
DATA CODE
SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV CX,COUNT NEXT: MOVS BYTE PTR[DI],BYTE PTR[SI] LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END START
START: MOV AX,DATA NEXT: MOV AL,[DI] MOV DS,AX MOV [SI],AL MOV DI,OFFSET NUM1 INC SI MOV SI,OFFSET NUM2 INC DI MOV CX,50 LOOP NEXT
运用MOVS指令
DATA SEGMENT NUM1 DB 50 DUP(0A0H) NUM2 DB 50 DUP(0) COUNT EQU LENGTH NUM2 ENDS
基 本 串 操 作
STOR
REP 重 复 REPE/REPZ 前 缀 REPNE/REPNZ
1.串操作指令的特点 (1)通常须用“SI”、“DI”、“CX”、”ES“寄存器; (2)应严格区分源与目的寄存器的使用; (3)SI与DI自动地址改变的方向,由DF的值控制; (4)CX作为计数器,特别是应用重复前缀指令时; (5)×××B为字节操作、 ×××W为字操作,无操作数指令。 2.串操作指令应用 MOV、MOVS、MOVB等指令的编程比较 例1:应用汇编语言,编辑传送50个字节的完整程序 运用MOV指令
运用MOVSB与REP指令
DATA SEGMENT NUM1 DB 50 DUP(0A0H) NUM2 DB 50 DUP(0) COUNT EQU LENGTH NUM2 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV CX,COUNT REP MOVSB MOV AH,4CH INT 21H CODE ENDS END START
七.8086微处理器串操作指令 MOVS CMPS SCቤተ መጻሕፍቲ ባይዱS LODS
点击该列
串传送指令 MOVSB、 MOVSW 串比较指令 CMPSB、CMPSW 串搜索指令 SCASB、SCASW 读串操作指令 LODSB、LODSW 写串操作指令 STORB、STORW 无条件重复前缀指令 零条件重复前缀指令 非零条件重复前缀指令