汇编学习笔记(12) - 字符串操作指令
字符串操作指令
基础设定
操作分为源地址和目标地址,表示源地址和目标地址的寄存器组合都是规定和不能变更的。
源地址: DS: SI
目标地址: ES: DI
LODS
描述: 从 源地址(DS: SI)加载一个 BYTE/WORD 到 AL 或者 AX寄存器, 同时根据DF的值以及传送数的尺寸 ++ 或者 -- SI的值
STOS
描述: 从 AL或者AX寄存器写 一个BYTE/WORD到目标地址(ES: DI), 同时根据DF的值以及传送数的尺寸 ++ 或者 -- SI的值
MOVS
描述: 从 源地址(DS: SI)写 一个BYTE/WORD到目标地址(ES: DI), 同时根据DF的值以及传送数的尺寸 ++ 或者 -- SI的值
SCAS
描述: AL 或者 AX寄存器 与 目标地址(ES: DI)的一个BYTE/WORD比较,影响标志标志寄存器, 同时根据DF的值以及传送数的尺寸 ++ 或者 -- SI的值
CMPS
描述: 源地址(DS: SI) 与 目标地址(ES: DI)的一个BYTE/WORD比较,影响标志标志寄存器, 同时根据DF的值以及传送数的尺寸 ++ 或者 -- SI的值
循环指令前缀
前面介绍的字符串比较指令,单独用起来似乎功能不是很强,但配合上循环指令,功能就立马厉害起来了。
REP / REP
用法 :
REP [字符比较指令]
REP [字符比较指令]
解释:
当 CX != 0 的时候循环执行 其后的字符串操作指令
比如:
REP CMPSB 等效于 work : CMPSB 等效于 while( cx != 0){
LOOP work CMPS }
举例:
REP SCASB
REP CMPSB
REPZ / REPE
用法 :
REPZ [字符比较指令]
REPE [字符比较指令]
解释:
当 CX != 0 并且 ZF= 1 的时候循环执行其后的字符串操作指令
比如:
REPZ CMPSB 等效于 while( cx != 0 && ZF == 1){
CMPS }
举例:
REPZ SCASB
REPZ CMPSB
REPNZ / REPNE
用法 :
REPNZ [字符比较指令]
REPNE [字符比较指令]
解释:
当 CX != 0 并且 ZF == 0 的时候循环执行其后的字符串操作指令
比如:
REPNZ CMPSB 等效于 while( cx != 0 && ZF == 0){
CMPS }
举例:
REPNZ SCASB
REPNZ CMPSB
使用举例