当前位置:文档之家› 串操作类指令

串操作类指令


1.串传送指令
格式1:MOVSB 操作:(ES:DI)←(DS:SI)字节传送 每执行一次串传送操作,SI±1,DI±1。 DF=0时+1, DF=1时-1。
格式2:MOVSW 操作:(ES:DI)←(DS:SI)字传送 每执行一次串传送操作,SI±2,DI±2。 DF=0时+2, DF=1时-2。
用LODSB时,每次取一个字节,取完后,地 址自动加1或减1;
用LODSW时,每次取一个字,取完后,地址
自动加2或减2。
3. 串装入指令 该指令一般不用重复前缀,否则,AL或AX中 的内容会被后一次操作覆盖,最后只能得到内 存中字符串的最后一个字节或字。
AL LO 串操作类指令
1.串操作指令特点
用一条指令实现对一串数据的操作;
源操作数和目标操作数都在存储器中;
共同点:
源操作数由DS:SI指定; 目标操作数由ES:DI指定。 串长:CX 自动修改地址指针:SI和DI
重复操作前缀 无条件 REP ; CX≠0重复 有条件 REPE/REPZ; CX≠0且ZF=1重复 REPNE/REPNZ; CX≠0且ZF=0重复 加重复操作前缀后串操作执行动作: 1.执行规定动作 2.修改SI、DI 3.CX-1 4.根据ZF,决定是否重复执行
把6000H:1200H单元开始的100个字存储单元内容清零。
MOV AX,6000H MOV ES, AX
MOV AX, 1200H
MOV DI, AX MOV CX, 100 CLD MOV AX, 0
REP STOSW
HLT
5.串扫描指令
格式: [REPZ/ REPNZ] SCASB 操作:AL -(ES:DI) 格式: [REPE/ REPNE] SCASW 操作: AX -(ES:DI) 将AL或AX的数据与位于ES段DI指针所指的内 存单元的数据相比较;比较结果不改变目标操 作数,只影响标志位。
在ES段中从2000H单元开始存放了10个字符,寻找其中有无字符 “A”,若有则记下搜索次数(次数放在DATA1单元),并记下存放 “A”的地址(地址放在DATA2单元)。
MOV DI, 2000H MOV BX,DI MOV CX,0AH
MOV AL,’A’
CLD REPNZ SCASB
JZ FOUND
LEA SI, M1 LEA DI, M2 MOV CX,200 CLD REPE CMPSB JZ STOP DEC SI MOV BX, SI MOV AL, [SI]
STOP: HLT
3. 串装入指令
格式:LODSB AL←(DS:SI) LODSW AX←(DS:SI) 功能:将位于DS段SI所指的存储单元的内容 取到AL 或AX中。
例1.将2000H:1200H地址开始的100字节传送到6000H:0000H 开始的内存单元去
MOV AX,2000H
MOV DS,AX MOX AX,6000H
MOV ES,AX
MOV SI,1200H MOV DI,0000H
MOV CX,100
CLD REP MOVSB
HLT
2.串比较指令
DS:SI
4.串存储指令
格式: [REP] STOSB
[REP] STOSW
(ES:DI)← AL
(ES:DI)← AX
功能:把AL或AX中的数据存放到位于ES段DI 所指的 存储单元中,并自动修改地址指针。
例如: 要对附加段中从MESS2开始的50个连 续的内存字节单元进行清 0操作,可用下列程 序段实现: LEA DI, MESS2 MOV AL,00H MOV CX,50 REP STOSB
1.串传送指令
REP MOVSB REP MOVSW 字符或数据的个数预先放在CX寄存器中; 每执行一次操作,CX自动减1,直到CX=0串操 作自动停止。
1、串传送指令
DS:SI DS:SI DS:SI
ES:DI ES:DI ES:DI
1.串传送指令 例如:将源串STAR中的100个字节数据传送 到目标串NEXT中。 LEA SI, STAR LEA DI, NEXT MOV CX, 100 CLD MOVSB MOVSB …… MOVSB LEA LEA MOV CLD REP SI, STAR DI, NEXT CX, 100 MOVSB
MOV DI, 0 JMP DONE FOUND:DEC DI MOV DATA2 ,DI INC DI SUB DI,BX
DONE: MOV DATA1,DI
格式1:CMPSB 操作:(ES:DI)-(DS:SI)字节比较 每执行一次串比较操作,SI±1,DI±1。 DF=0时+1, DF=1时-1。 比较后影响标志ZF。 格式2:CMPSW 操作:(ES:DI)-(DS:SI)字比较 每执行一次串比较操作,SI±2,DI±2。 DF=0时+2, DF=1时-2。
[REPZ/ REPNE] CMPSB
[REPNZ/ REPE] CMPSW
REPE相等时继续寻找,直到寻找到第一个不 相等的字符或寻找完所有的字符(CX=0)。 REPNE不相等时继续寻找,直到寻找到第一个 相等的字符或寻找完所有的字符(CX=0)。 CX是否为零不影响ZF状态
例2.比较两个字符串是否相同,并找出其中第一个字符不相等 的地址,将该地址送BX,不相等的字符送 AL,两个字符串的 长度均为200个字节,M1为源串首地址,M2为目标串地址。
相关主题