第3章 80868088的指令系统(字符串操作指令)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作指令,相关变址寄存器的内容增加。
DF =1时为地址减少加方向,每执行一条串
操作指令,相关变址寄存器的内容减少。
• DF的缺省值为0。
串操作指令 * 段超越问题
• 串操作指令的操作数一般可以缺省,缺
省情形以 DS:SI 指向源串,以 ES:DI指
向目的串。
• 目的串的段址必须为ES,源串允许段超
种:
后缀 B 表示字节串 后缀 W 表示字串
• 字节串操作:相关的变址寄存器改变量
为±1,如果涉及累加器,则为AL。
• 字串操作:相关的变址寄存器改变量为
±2,如果涉及累加器,则为AX。
串操作指令 * 串处理方向
• 串处理过程中,地址变化的方向取决于
标志 DF 的设置
DF =0时为地址增加方向,每执行一条串操
REPZ, REPNZ
•
说明: 与REP一样专用于串操作,格式相同
但有附加条件,条件满足且(CX)不为零才重
复。 REPZ 的条件是:ZF=1 REPNZ 的条件是:ZF=0
有条件重复前缀一般用于有比较含义的串操
作,即 CMPS 和 SCAS
串操作指令 * 类型后缀
• 串操作指令一般会带有类型后缀,有两
字节串/字串扫描 字节串/字串装入
字节串/字串存储
串操作指令
串操作指令(续)
类别 指令格式 指令功能 无条件重复 当相等/为零时重复
REP
重 复 前 缀
REPE / REPZ
REPNE /REPNZ 当不等/不为零时重复
串操作指令
•
串操作指令用于存储单元的成批数据处
理,包括串传送、串比较、串扫描、串
串操作指令
串操作指令
类别
基 本 串 操 作 指 令
指令格式
MOVS d, s MOVSB/MOVSW CMPS d, s CMPSB/CMFLAGS SCAS d SCASB/SCASW LODS s LODSB/LODSW STOS d STOSB/STOSW
指令功能
字节串/字串传送
字节串/字串比较
串操作指令 * 重复前缀
REP
• •
格式如下:
REP 〈串操作指令〉
说明: 无条件重复前缀,可用于任何串操作指令
例如:REP MOVSB
REP SCASW
等
执行重复串操作时,每重复一次,(CX)自动减1,
一旦归零,则停止重复。注意,执行重复串操作之
前应该为 CX 赋初值。
串操作指令 * 重复前缀
指令后缀W / B 决定
串操作指令
MOVS指令 • 例子
• 例:
MOVSB MOVSW REP MOVSB
例1 : • 将数据段中以SRC_MESS 为偏移地址的一串字符
DATA SEGMENT SRC_MESS DB ‘HELLO!’ DATA ENDS EXTRA SEGMENT NEW_LOC DB 6 DUP(?)
MOV DI,OFFSET STRING MOV CX,COUNT MOV AL,’A’
CLD
REPNE SCASB JZ FIND MOV DI,0 FIND :
MOV BX,DI
HLT
串操作指令
LODS指令 • 格式
• 格式1: • 格式2: • 说明:
LODS src LODSB 或 LODSW
或
MOVSW
说明: 格式1用于需要段超越的时候,格式2是常用格式 格式2中MOVSB一次传送一字节,MOVSW一次传
送一个字。B和W称为类型后缀。
串操作指令
MOVS指令 • 功能说明
•
指令说明: 指令执行前须让ES:DI 指向目的串,DS:SI指
向源串。
本指令将源串中的内容传送到目的串中。具体
串装入指令,源串内容存入累加器
串操作指令
LODS指令 • 格式
• 说明:
本指令不影响标志位,但受DF影响 执行的操作:
• 第一步:源串内容存入累加器第一单元 • 第二步:修改串指针
本指令一般不带重复前缀
串操作指令
STOS指令 • 格式
• 格式1: • 格式2: • 说明:
STOS dest STOSB 或 STOSW
串操作指令
CMPS指令 • 格式
•
格式1:
• •
CMPS dest,src
格式2:
CMPSB 或
CMFLAGS
说明: 串比较指令,一般用于比较两个字符串是否相等。 格式2是常用格式。
串操作指令
CMPS指令 • 说明
• 说明:
执行的操作:
• 第一步:源串当前单元的内容与目的串当
前单元内容比较(相减),但不保存结果, 结果反映在标志位上
装入、串存储等指令。
•
每一个串操作指令还会涉及以下问题: 重复前缀 类型后缀 串处理方向 段超越问题
串操作指令 * 重复前缀
• 重复前缀专用于串操作,使用时加在串操
作指令前面,能使串操作连续进行。
• 分两种:
无条件重复
REP
有条件重复
REPZ /REPE,
REPNZ/REPNE
越。采用段超越时,操作数必须显式写 明(格式1)。
串操作指令
• 共有5条
MOVS CMPS SCAS
串传送指令 串比较指令 串扫描指令 串装入指令 串存储指令
LODS STOS
串操作指令
MOVS指令 • 格式&格式说明
• • •
格式1:
MOVS dest, src
格式2:
MOVSB
• 第二步:修改串指针
串操作指令
SCAS 指令 • 格式
• 说明:
此指令执行前受DF影响,执行后影响6个状态
标志(与减法指令一样)
ቤተ መጻሕፍቲ ባይዱ
通常,要在SCAS前加重复前缀REPNZ,用来
从目标串中寻找关键字,操作一直进行到ZF
=1(查到了关键字)或CX=0(终未查找到)
为止。
•
例子: 在每个字符串中搜索是否与字符A,若有, 则把搜索次数记录下来,送到BX中,若没有查到, BX清0。
串存储指令,累加器内容存入目的串,
ES:DI指向目的串。
串操作指令
STOS指令 • 说明
• 说明:
本指令不影响标志位,但受DF影响 指令将AX或AL寄存器中内容存入目标串中。 执行的操作:
• 第一步:累加器内容存入目的串当前单元 • 第二步:修改串指针
“HELLO!”,传送到附加段中以NEW_LOC开始的单元中。
EXTRA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA START: MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX, LEA SI,SRC_MESS AGAIN: LEA DI,NEW_LOC MOV CX ,6 MOVS NEW_LOC,SRC_MES CLD DEC CX REP MOVSB JNZ AGAIN MOV AH,4CH INT 21H CODE ENDS END START
• 第二步:修改串指针
串操作指令
CMPS指令 • 说明
• 说明:
执行前受DF影响,执行后影响所有6个状态
标志位(与减法指令相同) ,
此指令一般要与REPZ或REPNZ相配合使用。
串操作指令
CMPS指令 • 例子
•
•
例1:指令 REPZ CMPS 若比较结果为CX不为0(指定的长度还未比较完) 和ZF=1(两串相等),则重复比较,直至CX=0 (比完了)或ZF=0(两串不相等)时停止操作。 例2:指令 REPNZ CMPS
串操作指令
SCAS 指令 • 格式
• 格式1: • 格式2: • 说明:
串扫描指令,ES:DI 指向目的串 用于从目标串中搜索某个数据
SCAS dest SCASB 或 SCASW
串操作指令
SCAS 指令 • 格式
• 说明:
执行的操作:
• 第一步:将AL或AX与目的串当前单元进
行内容比较,但不保存结果,结果反映在 标志位上
操作如下:
•
第一步:将源串中当前单元(字或字节)的内 容传送到目的串当前单元(字或字节) ,即
(DI) ← (SI)
串操作指令
MOVS指令 • 功能说明
•
指令说明:
执行的操作:
•
第二步:修改串指针
((SI)) ← ((SI)) ±1 / 2 , ((DI)) ←((DI)) ±1 / 2
加或减取决于串处理方向,由标志DF决定 1或2取决于串的类型,是字串还是字节串,由
DF =1时为地址减少加方向,每执行一条串
操作指令,相关变址寄存器的内容减少。
• DF的缺省值为0。
串操作指令 * 段超越问题
• 串操作指令的操作数一般可以缺省,缺
省情形以 DS:SI 指向源串,以 ES:DI指
向目的串。
• 目的串的段址必须为ES,源串允许段超
种:
后缀 B 表示字节串 后缀 W 表示字串
• 字节串操作:相关的变址寄存器改变量
为±1,如果涉及累加器,则为AL。
• 字串操作:相关的变址寄存器改变量为
±2,如果涉及累加器,则为AX。
串操作指令 * 串处理方向
• 串处理过程中,地址变化的方向取决于
标志 DF 的设置
DF =0时为地址增加方向,每执行一条串操
REPZ, REPNZ
•
说明: 与REP一样专用于串操作,格式相同
但有附加条件,条件满足且(CX)不为零才重
复。 REPZ 的条件是:ZF=1 REPNZ 的条件是:ZF=0
有条件重复前缀一般用于有比较含义的串操
作,即 CMPS 和 SCAS
串操作指令 * 类型后缀
• 串操作指令一般会带有类型后缀,有两
字节串/字串扫描 字节串/字串装入
字节串/字串存储
串操作指令
串操作指令(续)
类别 指令格式 指令功能 无条件重复 当相等/为零时重复
REP
重 复 前 缀
REPE / REPZ
REPNE /REPNZ 当不等/不为零时重复
串操作指令
•
串操作指令用于存储单元的成批数据处
理,包括串传送、串比较、串扫描、串
串操作指令
串操作指令
类别
基 本 串 操 作 指 令
指令格式
MOVS d, s MOVSB/MOVSW CMPS d, s CMPSB/CMFLAGS SCAS d SCASB/SCASW LODS s LODSB/LODSW STOS d STOSB/STOSW
指令功能
字节串/字串传送
字节串/字串比较
串操作指令 * 重复前缀
REP
• •
格式如下:
REP 〈串操作指令〉
说明: 无条件重复前缀,可用于任何串操作指令
例如:REP MOVSB
REP SCASW
等
执行重复串操作时,每重复一次,(CX)自动减1,
一旦归零,则停止重复。注意,执行重复串操作之
前应该为 CX 赋初值。
串操作指令 * 重复前缀
指令后缀W / B 决定
串操作指令
MOVS指令 • 例子
• 例:
MOVSB MOVSW REP MOVSB
例1 : • 将数据段中以SRC_MESS 为偏移地址的一串字符
DATA SEGMENT SRC_MESS DB ‘HELLO!’ DATA ENDS EXTRA SEGMENT NEW_LOC DB 6 DUP(?)
MOV DI,OFFSET STRING MOV CX,COUNT MOV AL,’A’
CLD
REPNE SCASB JZ FIND MOV DI,0 FIND :
MOV BX,DI
HLT
串操作指令
LODS指令 • 格式
• 格式1: • 格式2: • 说明:
LODS src LODSB 或 LODSW
或
MOVSW
说明: 格式1用于需要段超越的时候,格式2是常用格式 格式2中MOVSB一次传送一字节,MOVSW一次传
送一个字。B和W称为类型后缀。
串操作指令
MOVS指令 • 功能说明
•
指令说明: 指令执行前须让ES:DI 指向目的串,DS:SI指
向源串。
本指令将源串中的内容传送到目的串中。具体
串装入指令,源串内容存入累加器
串操作指令
LODS指令 • 格式
• 说明:
本指令不影响标志位,但受DF影响 执行的操作:
• 第一步:源串内容存入累加器第一单元 • 第二步:修改串指针
本指令一般不带重复前缀
串操作指令
STOS指令 • 格式
• 格式1: • 格式2: • 说明:
STOS dest STOSB 或 STOSW
串操作指令
CMPS指令 • 格式
•
格式1:
• •
CMPS dest,src
格式2:
CMPSB 或
CMFLAGS
说明: 串比较指令,一般用于比较两个字符串是否相等。 格式2是常用格式。
串操作指令
CMPS指令 • 说明
• 说明:
执行的操作:
• 第一步:源串当前单元的内容与目的串当
前单元内容比较(相减),但不保存结果, 结果反映在标志位上
装入、串存储等指令。
•
每一个串操作指令还会涉及以下问题: 重复前缀 类型后缀 串处理方向 段超越问题
串操作指令 * 重复前缀
• 重复前缀专用于串操作,使用时加在串操
作指令前面,能使串操作连续进行。
• 分两种:
无条件重复
REP
有条件重复
REPZ /REPE,
REPNZ/REPNE
越。采用段超越时,操作数必须显式写 明(格式1)。
串操作指令
• 共有5条
MOVS CMPS SCAS
串传送指令 串比较指令 串扫描指令 串装入指令 串存储指令
LODS STOS
串操作指令
MOVS指令 • 格式&格式说明
• • •
格式1:
MOVS dest, src
格式2:
MOVSB
• 第二步:修改串指针
串操作指令
SCAS 指令 • 格式
• 说明:
此指令执行前受DF影响,执行后影响6个状态
标志(与减法指令一样)
ቤተ መጻሕፍቲ ባይዱ
通常,要在SCAS前加重复前缀REPNZ,用来
从目标串中寻找关键字,操作一直进行到ZF
=1(查到了关键字)或CX=0(终未查找到)
为止。
•
例子: 在每个字符串中搜索是否与字符A,若有, 则把搜索次数记录下来,送到BX中,若没有查到, BX清0。
串存储指令,累加器内容存入目的串,
ES:DI指向目的串。
串操作指令
STOS指令 • 说明
• 说明:
本指令不影响标志位,但受DF影响 指令将AX或AL寄存器中内容存入目标串中。 执行的操作:
• 第一步:累加器内容存入目的串当前单元 • 第二步:修改串指针
“HELLO!”,传送到附加段中以NEW_LOC开始的单元中。
EXTRA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA START: MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX, LEA SI,SRC_MESS AGAIN: LEA DI,NEW_LOC MOV CX ,6 MOVS NEW_LOC,SRC_MES CLD DEC CX REP MOVSB JNZ AGAIN MOV AH,4CH INT 21H CODE ENDS END START
• 第二步:修改串指针
串操作指令
CMPS指令 • 说明
• 说明:
执行前受DF影响,执行后影响所有6个状态
标志位(与减法指令相同) ,
此指令一般要与REPZ或REPNZ相配合使用。
串操作指令
CMPS指令 • 例子
•
•
例1:指令 REPZ CMPS 若比较结果为CX不为0(指定的长度还未比较完) 和ZF=1(两串相等),则重复比较,直至CX=0 (比完了)或ZF=0(两串不相等)时停止操作。 例2:指令 REPNZ CMPS
串操作指令
SCAS 指令 • 格式
• 格式1: • 格式2: • 说明:
串扫描指令,ES:DI 指向目的串 用于从目标串中搜索某个数据
SCAS dest SCASB 或 SCASW
串操作指令
SCAS 指令 • 格式
• 说明:
执行的操作:
• 第一步:将AL或AX与目的串当前单元进
行内容比较,但不保存结果,结果反映在 标志位上
操作如下:
•
第一步:将源串中当前单元(字或字节)的内 容传送到目的串当前单元(字或字节) ,即
(DI) ← (SI)
串操作指令
MOVS指令 • 功能说明
•
指令说明:
执行的操作:
•
第二步:修改串指针
((SI)) ← ((SI)) ±1 / 2 , ((DI)) ←((DI)) ±1 / 2
加或减取决于串处理方向,由标志DF决定 1或2取决于串的类型,是字串还是字节串,由