串操作指令.
d37

3,不相等/不为零重复前缀指令 REPNE/ REPNZ 格式:REPNE /REPNZ OPRD;
OPRD≡{CMPS,SCAS} 功能:重复OPRD操作,直至CX=0或者ZF=1(相 等)为止。即:CX-1,如果CX0且ZF=0则转移 到OPRD(继续执行),否则(CX=0或ZF=1)则 结束重复。
NEXT: LOOP LOOP1; RET;
SCASB(DF=0)等效:CMP AL,ES:[DI]; INC DI;
4,取串指令LODS 格式1:LODSB;字节取串指令 操作:AL ←[DS:SI];取DS段的1字节数据送AL
SI←SI±1;修改源串地址ቤተ መጻሕፍቲ ባይዱ针
格式2:LODSW;字取串指令 操作:AX ←[DS:SI];取DS段的1字数据送AX
用途:常用于字符串查找,当执行REPNE SCAS 指令后,若CX=0,说明字符未找到,若CX≠0, 则表示在字符串中找到与AL中相同的字符。
思考题:若CX=100,SI=DI=0000H,则执行REPNE SCASB 指令后,CX=95,SI=?,DI=?
例如,用REPE指令实现例3
REPNE1:MOV SI,OFFSET BUFF1; MOV DI,OFFSET BUFF2; MOV CX,LENGTH BUFF1; CLD; REPE CMPSB; JCXZ NEXT; MOV AL,0FFH; JMP DONE;
DI←DI±2;修改目的串地址指针
功能:搜索数据块中的某种数据或字符,便于 统计、修改或删除。
例4,统计BUFF中的字母‘E’的个数。
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
串操作指令

运用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
基 本 串 操 作
串操作、控制转移指令

•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
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)。
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)减量。
8086/8088的指令系统
串处理指令
字符串操作指令的实质是对一片连续存储单元进行处 理,这片存储单元是由隐含指针 DS:SI或ES:DI来指定的 。字符串操作指令可对内存单元按字节或字进行处理 ,并能根据操作对象的字节数使变址寄存器SI(和DI) 增减1或2。具体规定如下:
1)当DF=0时,变址寄存器SI(和DI)增加1或2; 2) 当DF=1时,变址寄存器SI(和DI)减少1或2。
3.3
8086/8088的指令系统
3.3.4
串处理指令
【例】 从一个字符串中找出一个指定字符。 MOV DI,0100H MOV AL,‘R’ MOV CX,10H CLD REPNZ SCASB
ES→ 3000H:0100H→ ‘P ’ ‘E ’ ‘R ’ ‘S ’ ‘T ’ …
30000H AL ‘R ’
ES:DI→
AL或AX
8086/8088的指令系统
串处理指令
【例】 MOV DI,0050H MOV AL, ‘$’ MOV CX,5 CLD REP STOSB
ES→
1000H:0050H→ ‘$ ’ ‘$ ’ ‘$ ’ ‘$ ’ ‘$ ’ 00
ES→ 1000H:0050H→00 00 00 00 00 00
8086/8088的指令系统
串处理指令
2.与 REPZ(REPNZ)配合工作的CMPS 和 SCAS指令 (1) 相等重复前缀指令 REPE/REPZ 一般格式为: REPE/REPZ CMPS/SCAS 执行步骤如下: 1)判断条件:CX=0 或 ZF=0; 2 )如果条件成立,则结束重复操作,执行程序中 的下一条指令; 3)否则,CX=CX-1(不影响有关标志位),并执 行其后的字符串操作指令,在该指令执行完后,再 转到步骤(1)。
注意:
* LODS 指令一般不与 REP 联用 * 源串一般在数据段中(允许使用段跨越前缀来修改), 目的串必须在附加段中
* 不影响条件标志位
8086/8088的指令系统
串处理指令
(5) 串输入指令INS 功能:将由DX寄存器指定的I/O端口中的字、字节传送 到附加段中的目的串中,并根据DF和数据类型来改变目 的变址寄存器的方向内容。 指令格式: INSB ;字节串输入: ES:[DI] ←((DX)), ;DI←DI±1 INSW ;字串串输入: ES:[DI] ← ((DX)), ;DI←DI±2
‘P’ ‘E’ ‘O’ ‘S’ …
~ ~ 30000H
8086/8088的指令系统 (4) 串搜索指令 SCAS (p69)
串处理指令
SCAS DST 语句格式:SCASB——字节串搜索 SCASW——字串搜索 功 能:AL(字节)或AX(字)中的内容 与 DI 所指的目的串中的一个字节(或字)存 储单元中的数据相减,根据相减结果设置标 志位,结果不保存,即: ① 字节操作:(AL)-([DI]), 字操作:(AX)-([DI])。 ② 修改指针使之指向串中的下一个元素。 当 DF=0 时,( DI )增量。当 DF=1 时, (DI)减量。
2100H→
30000H
8086/8088的指令系统
串处理指令
(3) 置字符串数据指令(Store String Instruction) p70 功能:将AL或AX中的数据送入EI:DI所指的目的串中的字节(或字)存储单 元中。即: ① 字节操作:(AL)→[DI],字操作:(AX)→[DI]。 ② 修改指针DI,使之指向串中的下一个元素。 当DF=0时,(DI)增量)。当DF=1时,(DI)减量。 指令的格式: STOS DST (需在操作数中表明数据格式) STOSB (字节) STOSW (字) ES→
8086/8088的指令系统
串处理指令
(2) 不等重复前缀指令 REPNE/REPNZ
一般格式为: REPNE/REPNZ CMPS/SCAS 执行步骤如下: 1)判断条件:CX=0或 ZF=1; 2 )如果条件成立,则结束重复操作,执行程序中的下一条 指令; 3 )否则, CX=CX-1 (不影响有关标志位),并执行其后的 字符串操作指令,在该指令执行完后,再转到步骤(1)。
串处理指令
(1) 重复前缀指令REP 重复前缀指令是重复其后的字符串操作指令,重复的次数由 CX来决定。其一般格式为: REP MOVS / STOS / LODS 重复前缀指令的执行步骤如下: 1)判断:CX=0; 2)如果CX=0,则结束重复操作,执行程序中的下一条指令; 3)否则,CX=CX-1(不影响有关标志位),并执行其后的字符 串操作指令,在该指令执行完后,再转到步骤(1)。
DS→
~ 减法 ~
8086/8088的指令系统
串处理指令
DS→
【例】 比较两个字符串,找出它们 不相匹的位置。
20000H ‘P’ ‘E’ ‘R’ ‘S’ …
2000H:1500H→
MOV SI,1500H MOV DI,0200H MOV CX,17 CLD REPE CMPSB
~ ES→ ~ 3000H:0200H→
8086/8088的指令系统
串处理指令
设置方向标志指令
CLD、STD
串处理指令 串重复前缀
MOVSB / MOVSW STOSB / STOSW LODSB / LODSW CMPSB / CMPSW
REP REPE / REPZ REPNE / REPNZ
SCASB / SCASW
8086/8088的指令系统 1. 与 REP 配合工作的 MOVS / STOS / LODS的指令
8086/8088的指令系统
串处理指令
(2) 字符串传送指令(Move String Instruction)p69 功能:将以SI为指针的源串中的一个字节(或字)存储单元中的 数据传送至以DI为指针的目的地址中去,并自动修改指针,使之 指向下一个字节(或字)存储单元。即: ①(DS:[SI])→ES:[DI]。 ② 当DF=0时,(SI)和(DI)增量。 当DF=1时,(SI)和(DI)减量。 指令的格式: MOVS DST,SRC (需在操作数中表明数据格式) MOVSB (字节) MOVSW (字) 注 字节操作:(SI)←(SI)±1, (DI)←(DI)±1 字 操 作: (SI)←(SI)±2, (DI)←(DI)±2
ES→ ES:DI→
AL或AX
例:从一个字符串中查找一个指定的字符
mess
lea mov mov cld repne
db
‘COMPUTER’
(di)
C O M P U
di, mess al, ‘T’ cx, 8 scasb (di)
(CX)=2
T
E R
(di):相匹配字符的下一个地址 (cx):剩下还未比较的字符个数
10000H
AL
‘$ ’
10000H
AL
‘$ ’
8086/8088的指令系统
串处理指令
(4) 取字符串数据指令(Load String Instruction)p70 功能:将 SI所指的源串中的一个字节(或字)存储单元中的数据取出来送 入AL(或AX)中。即: ① 字节操作:([SI])→AL,字操作:([SI])→AX。 ② 修改指针SI,使它指向串中的下一个元素。 当DF=0时,(SI)增量。当DF=1时,(SI)减量。 指令的格式: LODS SRC (需在操作数中表明数据格式) DS→ LODSB (字节) DS:SI→ LODSW (字) AL或AX