串操作指令

合集下载

abplc字符串操作指令

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章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

串操作指令

串操作指令
DI
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

第3.3.5章 串操作类指令

第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的指令系统和寻址方式

串操作类指令(ppt 41页)

串操作类指令(ppt 41页)

可将CLD改为STD吗?如何改用STOSB? 可不用给DI赋值吗?
第2章
串读取LODS(load string)
把指定主存单元的数据传送给AL或AX
LODSB LODSW
演示 ;字节串读取:AL←DS:[SI] ;SI←SI±1
;字串读取:AX←DS:[SI] ;SI←SI±2
例2.54:串读取-1
REP 前 缀 可 以 理 解 为 : 当 数 据 串 没有结束(CX≠0),则继续传送
例2.52和例2.53中,程序段的最后 3条指令,可以分别替换为:
REP MOVSB 和 REP STOSW
第2章
REPZ重复前缀指令
REPZ
;每执行一次串指令,CX减1 ;并判断ZF是否为0, ;只要CX=0或ZF=0,重复执行结束
串操作指令的操作对象是以字 (W)为单位的字串,或是以字节 (B)为单位的字节串
第2章
串寻址方式
源操作数用寄存器SI寻址,默认在数据段 DS中,但允许段超越:DS:[SI]
目的操作数用寄存器DI寻址,默认在附加段 ES中,不允许段超越:ES:[DI]
每执行一次串操作指令,SI和DI将自动修改:
事实上,NOP和XCHG AX,AX的指令 代码一样,都是 90H
第2章
段超越前缀指令
在允许段超越的存储器操作数之 前,使用段超越前缀指令,将采 用指定的段寄存器寻址操作数
CS: ;使用代码段的数据
SS: ;使用堆栈段的数据
DS: ;使用数据段的数据
ES: ;使用附加段的数据
第2章
封锁前缀指令
±1(对于字节串)或±2(对于字串)
执行指令CLD指令后,DF = 0,地址指针 增1或2

8周参考:常用指令(串操作 程序控制指令 处理器控制指令)

8周参考:常用指令(串操作 程序控制指令 处理器控制指令)
在屏幕上显示一个字符的 指令段如下: MOV DL,<字符> MOV AH,2 INT 21H
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)。

微机原理4[1].4逻辑运算及串操作指令

微机原理4[1].4逻辑运算及串操作指令
?源数据串段值为ds偏移地址为si?目的数据串段值为es偏移地址为di?字符串长度字数或字节数使用cx?指令cld使标志df0递增方向指令std使标志df1递减方向?每执行一次串指令自动修改sidi值si1或2di1或2ds
三、位操作指令
可对8位或16位的寄存器或存储器单元中 的内容按位进行操作,包括:
例1:将2000H:1200H地址开始的100个字节 传送到6000H:0000H开始的内存单元中。
MOV AX,2000H MOV DS,AX KKK:MOV AL,[SI] 2000H:1200H MOV [DI],AL MOV AX,6000H 如果不用串操作指令 INC SI MOV ES,AX INC DI MOV SI,1200H DEC CX JNZ KKK MOV DI,0 此处不用 6000H:0000H REP,则: MOV CX,100 KKK: MOVSB CLD DEC CX NEXT:REP MOVSB
(4)测试指令TEST 指令格式: TEST dest,src;dest ∧ src 指令功能: 源操作数和目的操作数的内容执行按位 的逻辑与运算,根据结果置SF、PF、ZF, 且CF=OF=0,而AF位无定义。 dest,src内 容不变。
常用于:
在不改变原来操作数的情况下,检测某一位 或某几位是否为1或为0。 编程时,用在条件转移指令前产生条件。

实现对一串字符或数据的操作
可进行串传送、串比较、串扫描、读串或写 串等操作,串长最多可达64KB

字符串指令的寻址方式只用隐含寻址,源串 固定使用SI,目的串固定使用DI。

指令包含:
REP REPE/REPZ REPNE/REPNZ
MOVS、STOS、LODS CMPS、SCAS

串操作类指令

串操作类指令
在SCAS指令前加有REPE/REPZ前缀,则表示:当串未结尾(CX≠0) 且串元素=关键值(ZF=1)时继续搜索。 --用来搜索与给定关键值不同的内容。
在SCAS指令前加有REPNE/REPNZ前缀,则表示:当串未结尾 (CX≠0)且串元素≠关键值(ZF=0)时继续搜索,直到CX=0或ZF= 1才执行下一条指令。 --可以用来在一个串中查出某一指定元素。
指令格式:SCAS OPRD SCASB ;搜索字节串 SCASW ;搜索字串 SCASD ;搜索双字串 SCASQ ;搜索4字串
功能:将累加器(AL或AX或EAX或RAX )中的内容与ES:DI(EDI 、 RDI )指定的目标串元素(字节或字或双字或4字)进行比较(减法操 作),用标志位反映比较的结果,而不改变累加器和目标串的内容,达 到字符串搜索的目的,同时自动修改指针DI。
若CMPS指令前加上前缀REPE/REPZ,则表示:当串未结尾(CX≠0) 且串相等(ZF=1)时继续比较;
如果CMPS用REPNE/REPNZ作前缀,则表示:当串未结尾 (CX≠0)且串不相等(ZF=0)时继续比较。
2009年6月2日星期二
7
例:比较两个字符串是否有相同的元素,它们的首地址和目标地址分别 为SRC和DST,字符串的长度为N个字节。
GO_ON:
MOVSD
DEC
CX
JNZ
GO_ON
若采用重复前缀,则上述程序简化为:
LEA SI,SOURCE
LEA DI,DEST
MOV ECX,50
;设置循环操作次数
CLD
;设置方向标志DF=0
REP MOVSD
2009年6月2日星期二
6
(2)串比较指令 CMPS/CMPSB/CMPSW/CMPSD/CMPSQ

微机原理实验四串操作指令

微机原理实验四串操作指令

实验四串操作指令程序实验一、实验目的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 单元中。

汇编语言——串操作指令

汇编语言——串操作指令
(2)MOVSW进行字型串复制,把DS:SI所指向的一个 字型数据送往ES:DI所指向的内存中。当DF=0时,令SI←SI +2,DI←DI+2;当DF=1时,令SI←SI-2,DI←DI-2。
MOVS指令可以实现把内存中的一个数据,不经过寄存 器的过渡由一处复制到另一处。这一点是MOV指令做不到 的。MOVS指令与循环控制指令配合,可以完成数据块的复 制。被复制的数据串称为源串,复制到的目的地称为目标 串。如果源串与目标串所占据的内存是完全分离的,数据 传递可以按由串首至串尾的次序进行,也可以按相反的方 向进行。但是,当两者占据的内存区域有部分重叠时,需 要注意用DF控制方向,当源串首地址小于目标串首地址时, 应由尾至首进行传送,源串首址大于目标串首址时,则由 首至尾传送。
(2)STOSW进行字型串操作,把AX的值送往内存中由 ES:DI所确定的内存中。当DF=0时,令DI←DI+2,当DF= 1时,令DI←DI-2。
STOS指令主要用于把一段连续的存储区域以AL或AX中 的值填充,特别的是,存储区的段地址必须放在附加段寄存 器ES中。STOS与LODS指令配合,还可以从一个串中取出数 据,有选择地存到另一个串中。
8088提供有两条专用指令设置DF,分别是CLD和STD 指令。
【指令格式】CLD
【功能】把标志位DF清0。
【指令格式】STD
【功能】把标志位DF置1。
7.2.2 串操作指令
8088指令系统中共设计有5条串操作指令,分别用于完 成从串中取出数据、往串中2.2.1 LODS指令──从串中取出数据
lab2:
INC [countp]
JMP lab4
lab3:
INC [countn]
lab4:
LOOP lab1

串操作指令

串操作指令
串操作指令的特点
❖ 源串一般存放在数据段,偏移地址由SI指定。允许段重 设;
❖ 目标串必须在附加段,偏移地址由DI指定; ❖ 指令自动修改地址指针,修改方向由DF决定。DF=0
增地址方向;DF=1 减地址方向; ❖ 数据块长度值由CX指定 ❖ 可增加自动重复前缀以实现自动修改CX内容。
1
串操作指令流程
JZ STOP DEC SI MOV AL,[SI] MOV BX,SI
STOP:HLT
7
3.6.3 SCAS 目标串
❖ 格式: SCAS OPRD
目标 操作数
SCASB
SCASW
❖ 执行与CMPS指令相似的操作,只是这里的源操作数是AX 或AL
❖ 常用于在指定存储区域中寻找某个关键字, 关键字要存放在AX或AL。P125 例
❖ 格式: STOS OPRD
目标 操作数
STOSB
STOSW
❖ 操作:对字节: AL ([ES:DI])
对 字: AX ([ES:DI])
P126 例
10
串送存指令例
❖ 设计思想:
区域首地址送ES:DI 串长度送CX 置方向标志DF
将内存某个区域清零
0送累加器AL 执行串送存指令
?
11
3.7 程序控制类指令
转移指令 循环控制 过程调用 中断控制
12
3.7.1 无条件转移指令
通过修改指令的偏移地址或段地址及偏移 地址实现程序的转移
无条件转移指令 无条件转移到目标地址,执行新的指令
有条件转移指令 在具备一定条件的情况下转移到目标地址
13
1. JMP 目标标号
❖ 格式: JMP OPRD
与JMP在同一代码 段

字符串操作指令

字符串操作指令

字符串操作指令
1.1 基本串操作指令
1 串传送指令
格式:MOVSB(字节串传送) 或MOVSW(字串传送) 或MOVS DST, SRC
功能:将SI所指向的源串中的一个字节或字传送到DI所指向的目的串中。
该指令 对标志位无 影响。
在执行串传送指令前,一般要预先设置源串地址DS:SI、目的串地址ES:DI和方向标 志位DF的值。
程序段如下:
MOV AX, 1000H
MOV DS, AX
;设置源串段地址
MOV AX, 2000H
MOV ES, AX
;设置目的串段地址
MOV SI, 0200H
;设置源串偏移地址
MOV DI, 1000H
;设置目的串偏移地址
MOV CX, 100 ;将串的长度送入CX
CLD
;将DF置为0,地址自动递增
串 扫 描 指 令 与 REPE/REPZ 或 REPNE/REPNZ连用,常用于搜索字符串中 是否存在某个特定的字符。
提示
(1)重复前缀指令 不能单独使用,后面必 须跟基本串操作指令。
(2)重复前缀指令 不影响标志位。
字符串操作指令
例4-1
将以1000H:0200H地址开始的100个字节传送到以2000H:1000H开始的存储单元中。
微机原理与接口技术
字符串操作字符串可能包含若干字节或字。字符串操作指令 用于对存储器中的字节串或字串进行处理。
字符串操作指令可以在两组存储单元之间进行操作。 源串(源操作数)一般存放在当前数据段中,即寄 存器DS中的内容为其段地址,寄存器SI中的内容为其偏 移地址,因此,源串地址为DS:SI; 目的串(目的操作数)一般存放在附加数据段ES中, 即寄存器ES中的内容为其段地址,寄存器DI中的内容为 其偏移地址,因此,目的串地址为ES:DI。

串操作指令

串操作指令

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。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串操作指令
串操作指令就是用一条指令实现对一串字符或数据的操作。

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。

相关文档
最新文档