串操作类指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3.4 串操作类指令
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,决定是否重复执行
MOV DI, 0 JMP DONE FOUND:DEC DI MOV DATA2 ,DI INC DI SUB DI,BX
DONE: MOV DATA1,DI
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中。
用LODSB时,每次取一个字节,取完后,地 址自动加1或减1;
用LODSW时,每次取一个字,取完后,地址
自动加2或减2。
3. 串装入指令 该指令一般不用重复前缀,否则,AL或AX中 的内容会被后一次操作覆盖,最后只能得到内 存中字符串的最后一个字节或字。
源自文库
AL LODSB
DS:SI DS:SI DS:SI
在ES段中从2000H单元开始存放了10个字符,寻找其中有无字符 “A”,若有则记下搜索次数(次数放在DATA1单元),并记下存放 “A”的地址(地址放在DATA2单元)。
MOV DI, 2000H MOV BX,DI MOV CX,0AH
MOV AL,’A’
CLD REPNZ SCASB
JZ FOUND
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
[REPZ/ REPNE] CMPSB
[REPNZ/ REPE] CMPSW
REPE相等时继续寻找,直到寻找到第一个不 相等的字符或寻找完所有的字符(CX=0)。 REPNE不相等时继续寻找,直到寻找到第一个 相等的字符或寻找完所有的字符(CX=0)。 CX是否为零不影响ZF状态
例2.比较两个字符串是否相同,并找出其中第一个字符不相等 的地址,将该地址送BX,不相等的字符送 AL,两个字符串的 长度均为200个字节,M1为源串首地址,M2为目标串地址。
例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.串比较指令
格式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。
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
把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指针所指的内 存单元的数据相比较;比较结果不改变目标操 作数,只影响标志位。
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。
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,决定是否重复执行
MOV DI, 0 JMP DONE FOUND:DEC DI MOV DATA2 ,DI INC DI SUB DI,BX
DONE: MOV DATA1,DI
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中。
用LODSB时,每次取一个字节,取完后,地 址自动加1或减1;
用LODSW时,每次取一个字,取完后,地址
自动加2或减2。
3. 串装入指令 该指令一般不用重复前缀,否则,AL或AX中 的内容会被后一次操作覆盖,最后只能得到内 存中字符串的最后一个字节或字。
源自文库
AL LODSB
DS:SI DS:SI DS:SI
在ES段中从2000H单元开始存放了10个字符,寻找其中有无字符 “A”,若有则记下搜索次数(次数放在DATA1单元),并记下存放 “A”的地址(地址放在DATA2单元)。
MOV DI, 2000H MOV BX,DI MOV CX,0AH
MOV AL,’A’
CLD REPNZ SCASB
JZ FOUND
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
[REPZ/ REPNE] CMPSB
[REPNZ/ REPE] CMPSW
REPE相等时继续寻找,直到寻找到第一个不 相等的字符或寻找完所有的字符(CX=0)。 REPNE不相等时继续寻找,直到寻找到第一个 相等的字符或寻找完所有的字符(CX=0)。 CX是否为零不影响ZF状态
例2.比较两个字符串是否相同,并找出其中第一个字符不相等 的地址,将该地址送BX,不相等的字符送 AL,两个字符串的 长度均为200个字节,M1为源串首地址,M2为目标串地址。
例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.串比较指令
格式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。
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
把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指针所指的内 存单元的数据相比较;比较结果不改变目标操 作数,只影响标志位。
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。