串操作指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
‘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)减量。
8086/8088的指令系统
串处理指令
REP MOVS:将数据段中的整串数据传送到附加段中。 源串(数据段)→ 目的串(附加段) 执行 REP MOVS 之前,应先做好: 1) 源串首地址(末地址)→ SI 2) 目的串首地址(末地址)→ DI 3) 串长度 → CX
~ ~
DS→ DS:SI→
4) 建立方向标志
8086/8088的指令系统
串处理指令
(6) 串输出指令OUTS
功能:将由源串中的字、字节传送到在DX寄存器指定的 I/O端口中,并根据DF和数据类型来改变源变址寄存器的 方向内容。 指令格式: OUTSB ;字节串输出: ((DX))←DS:[SI] ;SI←SI〒1 OUTSW ;字串串输出: ((DX))←DS:[SI] ;SI←SI〒2
串处理指令
(1) 重复前缀指令REP 重复前缀指令是重复其后的字符串操作指令,重复的次数由 CX来决定。其一般格式为: REP MOVS / STOS / LODS 重复前缀指令的执行步骤如下: 1)判断:CX=0; 2)如果CX=0,则结束重复操作,执行程序中的下一条指令; 3)否则,CX=CX-1(不影响有关标志位),并执行其后的字符 串操作指令,在该指令执行完后,再转到步骤(1)。
( CLD 使 DF=0,STD 使 DF=1 )
ES→ ES:DI→
8086/8088的指令系统
串处理指令
DS→
【例】 MOV SI,0050H MOV DI,0100H MOV CX,5 CLD REP MOVSB
20000H ‘A ’ ‘B ’ ‘C ’ ‘D ’ ‘E ’ ~ ~
2000H:0050H→
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)。
3.3
8086/8088的指令系统
3.3.4
串处理指令
【例】 从一个字符串中找出一个指定字符。 MOV DI,0100H MOV AL,‘R’ MOV CX,10H CLD REPNZ SCASB
ES→ 3000H:0100H→
30000H AL
‘P ’ ‘E ’ ‘R ’ ‘S ’ ‘T ’ …
减法 ~ ~
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→
ES:DI→
AL或AX
8086/8088的指令系统
串处理指令
【例】 MOV DI,0050H MOV AL, ‘$’ MOV CX,5 CLD REP STOSB
ES→
ES→ 1000H:0050H→ 00 00 00 00 00 00 10000H AL
‘$ ’
10000H
AL
‘$ ’
1000H:0050H→
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):剩下还未比较的字符个数
~ ES→ ~ 3000H:0100H→
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→
‘$ ’ ‘$ ’ ‘$ ’ ‘$ ’ ‘$ ’ 00
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
‘R ’
8086/8088的指令系统
串处理指令
字符串操作指令的实质是对一片连续存储单元进行处 理,这片存储单元是由隐含指针 DS:SI或ES:DI来指定的 。字符串操作指令可对内存单元按字节或字进行处理 ,并能根据操作对象的字节数使变址寄存器SI(和DI) 增减1或2。具体规定如下:
1)当DF=0时,变址寄存器SI(和DI)增加1或2; 2) 当DF=1时,变址寄存器SI(和DI)减少1或2。
8086/8088的指令系统
串处理指令
(3) 串比较指令 CMPS (p69)
CMPS SRC, DST DS→ 语句格式:CMPSB——字节串比较 DS:SI→ CMPSW——字串比较 功 能:将SI所指的源串中的一个 字节(或字)存储单元中的数据与 DI 所指的目的串中的一个字节(或字) ~ 存储单元中的数据相减,并根据相减 ~ 的结果设置标志,但结果并不保存。 ES→ 即:①([SI])-([DI])。 ES:DI→ ② 修改串指针,使之指向串中的 下一个元素。 当DF=0时,(SI)和(DI)增量 。当DF=1时,(SI)和(DI)减量。
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
注意:
* LODS 指令一般不与 REP 联用 * 源串一般在数据段中(允许使用段跨越前缀来修改), 目的串必须在附ห้องสมุดไป่ตู้段中
* 不影响条件标志位
8086/8088的指令系统
串处理指令
(5) 串输入指令INS 功能:将由DX寄存器指定的I/O端口中的字、字节传送 到附加段中的目的串中,并根据DF和数据类型来改变目 的变址寄存器的方向内容。 指令格式: INSB ;字节串输入: ES:[DI] ←((DX)), ;DI←DI〒1 INSW ;字串串输入: ES:[DI] ← ((DX)), ;DI←DI〒2
8086/8088的指令系统
串处理指令
(2) 不等重复前缀指令 REPNE/REPNZ
一般格式为: REPNE/REPNZ CMPS/SCAS 执行步骤如下: 1)判断条件:CX=0或 ZF=1; 2 )如果条件成立,则结束重复操作,执行程序中的下一条 指令; 3 )否则, CX=CX-1 (不影响有关标志位),并执行其后的 字符串操作指令,在该指令执行完后,再转到步骤(1)。
~ ~ 30000H
8086/8088的指令系统 (4) 串搜索指令 SCAS (p69)
串处理指令
SCAS DST 语句格式:SCASB——字节串搜索 SCASW——字串搜索 功 能:AL(字节)或AX(字)中的内容 与 DI 所指的目的串中的一个字节(或字)存 储单元中的数据相减,根据相减结果设置标 志位,结果不保存,即: ① 字节操作:(AL)-([DI]), 字操作:(AX)-([DI])。 ② 修改指针使之指向串中的下一个元素。 当 DF=0 时,( DI )增量。当 DF=1 时, (DI)减量。
8086/8088的指令系统
串处理指令
REP MOVS:将数据段中的整串数据传送到附加段中。 源串(数据段)→ 目的串(附加段) 执行 REP MOVS 之前,应先做好: 1) 源串首地址(末地址)→ SI 2) 目的串首地址(末地址)→ DI 3) 串长度 → CX
~ ~
DS→ DS:SI→
4) 建立方向标志
8086/8088的指令系统
串处理指令
(6) 串输出指令OUTS
功能:将由源串中的字、字节传送到在DX寄存器指定的 I/O端口中,并根据DF和数据类型来改变源变址寄存器的 方向内容。 指令格式: OUTSB ;字节串输出: ((DX))←DS:[SI] ;SI←SI〒1 OUTSW ;字串串输出: ((DX))←DS:[SI] ;SI←SI〒2
串处理指令
(1) 重复前缀指令REP 重复前缀指令是重复其后的字符串操作指令,重复的次数由 CX来决定。其一般格式为: REP MOVS / STOS / LODS 重复前缀指令的执行步骤如下: 1)判断:CX=0; 2)如果CX=0,则结束重复操作,执行程序中的下一条指令; 3)否则,CX=CX-1(不影响有关标志位),并执行其后的字符 串操作指令,在该指令执行完后,再转到步骤(1)。
( CLD 使 DF=0,STD 使 DF=1 )
ES→ ES:DI→
8086/8088的指令系统
串处理指令
DS→
【例】 MOV SI,0050H MOV DI,0100H MOV CX,5 CLD REP MOVSB
20000H ‘A ’ ‘B ’ ‘C ’ ‘D ’ ‘E ’ ~ ~
2000H:0050H→
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)。
3.3
8086/8088的指令系统
3.3.4
串处理指令
【例】 从一个字符串中找出一个指定字符。 MOV DI,0100H MOV AL,‘R’ MOV CX,10H CLD REPNZ SCASB
ES→ 3000H:0100H→
30000H AL
‘P ’ ‘E ’ ‘R ’ ‘S ’ ‘T ’ …
减法 ~ ~
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→
ES:DI→
AL或AX
8086/8088的指令系统
串处理指令
【例】 MOV DI,0050H MOV AL, ‘$’ MOV CX,5 CLD REP STOSB
ES→
ES→ 1000H:0050H→ 00 00 00 00 00 00 10000H AL
‘$ ’
10000H
AL
‘$ ’
1000H:0050H→
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):剩下还未比较的字符个数
~ ES→ ~ 3000H:0100H→
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→
‘$ ’ ‘$ ’ ‘$ ’ ‘$ ’ ‘$ ’ 00
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
‘R ’
8086/8088的指令系统
串处理指令
字符串操作指令的实质是对一片连续存储单元进行处 理,这片存储单元是由隐含指针 DS:SI或ES:DI来指定的 。字符串操作指令可对内存单元按字节或字进行处理 ,并能根据操作对象的字节数使变址寄存器SI(和DI) 增减1或2。具体规定如下:
1)当DF=0时,变址寄存器SI(和DI)增加1或2; 2) 当DF=1时,变址寄存器SI(和DI)减少1或2。
8086/8088的指令系统
串处理指令
(3) 串比较指令 CMPS (p69)
CMPS SRC, DST DS→ 语句格式:CMPSB——字节串比较 DS:SI→ CMPSW——字串比较 功 能:将SI所指的源串中的一个 字节(或字)存储单元中的数据与 DI 所指的目的串中的一个字节(或字) ~ 存储单元中的数据相减,并根据相减 ~ 的结果设置标志,但结果并不保存。 ES→ 即:①([SI])-([DI])。 ES:DI→ ② 修改串指针,使之指向串中的 下一个元素。 当DF=0时,(SI)和(DI)增量 。当DF=1时,(SI)和(DI)减量。
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
注意:
* LODS 指令一般不与 REP 联用 * 源串一般在数据段中(允许使用段跨越前缀来修改), 目的串必须在附ห้องสมุดไป่ตู้段中
* 不影响条件标志位
8086/8088的指令系统
串处理指令
(5) 串输入指令INS 功能:将由DX寄存器指定的I/O端口中的字、字节传送 到附加段中的目的串中,并根据DF和数据类型来改变目 的变址寄存器的方向内容。 指令格式: INSB ;字节串输入: ES:[DI] ←((DX)), ;DI←DI〒1 INSW ;字串串输入: ES:[DI] ← ((DX)), ;DI←DI〒2
8086/8088的指令系统
串处理指令
(2) 不等重复前缀指令 REPNE/REPNZ
一般格式为: REPNE/REPNZ CMPS/SCAS 执行步骤如下: 1)判断条件:CX=0或 ZF=1; 2 )如果条件成立,则结束重复操作,执行程序中的下一条 指令; 3 )否则, CX=CX-1 (不影响有关标志位),并执行其后的 字符串操作指令,在该指令执行完后,再转到步骤(1)。