★斗 第三章寻址方式与指令系统散 3.1概述 32寻址方式 33数据传送指令 34算术运算指令 35逻辑运算指令 36串操作指令 3.7程序控制指令
1 第三章 寻址方式与指令系统 3.1 概述 3.2 寻址方式 3.3 数据传送指令 3.4 算术运算指令 3.5 逻辑运算指令 3.6 串操作指令 3.7 程序控制指令
★斗 36串操作指令 串传送 MOVSB 将一个字节序字双字从 Moⅴsw DS:SI→→ES:DI MOVSD 指令前要先将源串首地址→DS:SI 目标串首地址→→ESDI
2 3.6 串操作指令 串传送 MOVSB MOVSW MOVSD 将一个字节/字/双字从 DS:SI ES:DI 指令前要先将源串首地址 DS:SI 目标串首地址 ES:DI
串传送 ★斗 重复前缀 REP MOVSB REP MOVSW REP MOVSD 需要先将串的长度存入CX寄存器 每处理完一个元素自动使CX-1,直到CX=0 才结束串传送—完成整个串的传送
3 串传送 ——重复前缀 需要先将串的长度存入CX寄存器 每处理完一个元素自动使CX-1,直到CX=0 才结束串传送——完成整个串的传送 REP MOVSB REP MOVSW REP MOVSD
★斗 串传送 完成操作后自动修改SⅠ、DI,使其指向串 的下一个元素 串操作方向由CLD和STD指令设置 CLD地址递增方向(DF=0) STD地址递减方向(DF=1)
4 串传送 完成操作后自动修改SI、DI,使其指向串 的下一个元素 串操作方向由CLD和STD指令设置 CLD 地址递增方向(DF=0) STD 地址递减方向(DF=1)
★斗 串传送 例: MOV SL OFFSET SI MOVDL OFFSET S2 MOVCX. 18 REP MOVSB ●@ SlDB“ This is a string!s” S2 DB 18 DUP(O
5 例: 串传送 MOV SI, OFFSET S1 MOV DI, OFFSET S2 MOV CX, 18 REP MOVSB …. S1 DB “This is a string!$” S2 DB 18 DUP(0)
★斗 串比较 CMPSB CMPSW 比较地址为DS:SⅠ、ES:DI的两 CMPSD 个字节序字双字 指令前通常加重复前缀 REPZ/REPE,从而 当发现两个串不同时结束比较
6 串比较 CMPSB CMPSW CMPSD 比较地址为DS:SI、ES:DI的两 个字节/字/双字 指令前通常加重复前缀REPZ/REPE,从而 当发现两个串不同时结束比较
★斗 串比较 例: MoSI。 OFFSETS1 MOV DI OFESETS2 MOV CX.XX REPZ CMPSB UNZ Not Equal Equal: Not Equal:
7 例: 串比较 MOV SI, OFFSET S1 MOV DI, OFFSET S2 MOV CX, xx REPZ CMPSB JNZ Not_Equal Equal: …… Not_Equal: …
★斗 串搜索 SCASB SCASW 在首地址为ES:D的串中搜索 SCASD 某个元素(字节字双字) 事先要将待搜索的元素存入 ALJAXEAX 指令前通常加重复前缀 REPNZREPNE, 从而当发现待搜索的元素时结束搜索
8 串搜索 SCASB SCASW SCASD 在首地址为ES:DI的串中搜索 某个元素(字节/字/双字) 事先要将待搜索的元素存入AL/AX/EAX 指令前通常加重复前缀REPNZ/REPNE, 从而当发现待搜索的元素时结束搜索
★斗 串搜索 例: MOVDI, OFFSET String MOV CX. XX MOVAL,‘h REPNZ SCASB JNZ Not found Found: Not found
9 例: 串搜索 MOV DI, OFFSET String MOV CX, xx MOV AL, ‘h’ REPNZ SCASB JNZ Not_Found Found: …… Not_ Found: …
★斗 串装入 LODSB LODSW 将地址为DSS的一个字节/字 LODSD 双字装入 ALAX/EAX 串装入指令没有重复前缀
10 串装入 LODSB LODSW LODSD 将地址为DS:SI的一个字节/字/ 双字装入AL/AX/EAX 串装入指令没有重复前缀