串和串操作 看一下串操作指令的具体用法
存储器中的地址连续的若干单元的字符或数据称为字符串或数据串。
串操作指令就是用来对串中每个字符或数据进行操作的指令。
串指令既可处理字节串,也可处理字串,并在每完成一个字节(或字)的操作后
能够自动修改指针,以便执行下一个字节(或字)的操作。
串指令可完成两个存储单元之间的传送和比较操作(也只有串指令才可以)。
使用串指令的程序段结构如下:
...
设置源串指针(DS,SI)
设置目的串指针(ES,DI)
设置重复操作次数(CX)--仅执行1次时可省略
设置操作方向(DF)
重复前缀(REP/REPZ/REPNZ)--仅执行1次时可省略
串操作指令(MOVS/CMPS/SCAS/LODS/STOS)
8086指令系统共有5条串操作指令:
串传送MOVS、串比较CMPS、串扫描SCAS、串装入LODS、串存储STOS。
其基本格式如下图:
下面简述其基本用法与功能:
1.串传送指令MOVS
格式
MOVSB
或 MOVSW
或 MOVS dest,src
功能及操作
串传送指令完成两个存储单元之间的数据传送。
①“MOVSB / MOVSW”指令将DS:SI所指向的存储单元中的一个字节传送到ES:DI所指向的存储单元。若DF=0,则传送后SI和DI都加1(2);若DF=1,则传送后SI和DI都减1(2)。
“MOVS dest,src”指令视操作数类型(字节或字)与“MOVSB”或“MOVSW”等价。
2.串比较指令CMPS
格式
CMPSB
或 CMPSW
或 CMPS dest,src
功能及操作
串比较指令与比较指令CMP的操作有点类似,CMP指令是对两个单个数据进行比较,而CMPS是对两个数据串进行比较。
串比较指令通常和条件重复前缀REPE(REPZ)或REPNE(REPNZ)连用,用来检查两个字符串是否相等。
3.串扫描指令SCAS
格式
SCASB
或 SCASW
或 SCAS dest
功能及操作
SCAS指令将累加器AL(或AX)的内容与目的串(指针为ES:DI)中的字节(或字)进行比较,比较结果不改变目的操作数,只影响标志位。它执行与CMPS指令同样的不回送结果的减法操作,只是这里源操作数为AL(或AX)。
串扫描指令通常和条件重复前缀REPE(REPZ)或REPNE(REPNZ)连用,用来在字符串中搜索某个特定的关键字(把要查找的关键字放在AL(或AX),再用本指令与字符串中各字符逐一比较)。
4.串装入指令LODS
格式
LODSB
或 LODSW
或 LODS src
功能及操作
“LODSB”(或“LODSW”)指令把由DS:SI指向的源串中的字节(或字)装入到AL(或AX)中,并根据DF自动修改指针SI,以指向下一个要装入的字节(或字)。
“LODS src”指令视操作数类型(字节或字)与“LODSB”或“LODSW”指令等价。
字节装入指令LODSB等价于以下两条指令组合:
MOV AL,[SI]
INC SI ;或DEC SI(当DF=1)
字装入指令LODSW等价于以下三条指令组合:
MOV AL,[SI]
INC SI ;或DEC SI(当DF=1)
INC SI ;或DEC SI(当DF=1)
5.串存储指令STOS
格式
STOSB
或 STOSW
或 STOS dest
功能及操作
“STOSB”(或“STOSW”)指令把AL(或AX)中的内容存储到由ES:DI指向的目的串中,并根据DF自动修改指针DI,以指向下一个要写入的字节(或字)存储单元。
“STOS src”指令视操作数类型(字节或字)与“STOSB”或“STOSW”指令等价。
字节装入指令STOSB等价于以下两条指令组合:
MOV ES:[DI],AL
INC DI ;或DEC DI(当DF=1)
字装入指令STOSW等价于以下三条指令的组合:
MOV ES:[DI],AX
INC DI ;或DEC DI(当DF=1)
INC DI ;或DEC DI(当DF=1)