OPR可用除立即数以外的任何寻址方式 CNT=1, SHL OPR CNT>I, MOV CL CNT SHL OPR,CL以SHL为例 条件标志位: CF=移入的数值 1CNT=1时,最高有效位的值发生变化 OF 0CNT=1时,最高有效位的值不变 移位指令: SF、ZF、PF根据移位结果设置,AF无定义 循环移位指令: 不影响SF、ZF、PF、AF
6 注意: * OPR 可用除立即数以外的任何寻址方式 * CNT = 1, SHL OPR , 1 CNT > 1, MOV CL , CNT SHL OPR , CL ; 以 SHL 为例 * 条件标志位: CF = 移入的数值 1 CNT = 1 时,最高有效位的值发生变化 0 CNT = 1 时,最高有效位的值不变 移位指令: SF、ZF、PF 根据移位结果设置,AF 无定义 循环移位指令: 不影响 SF、ZF、PF、AF OF =
(AX)=0012H,(Bx)=0034 把它们装配成(AX)=1234H MOV CL 8 ROL AX CL ADD AX. BX 例:(BX)=84FOH (1)(BX)为无符号数,求(BX)/2 SHR BX 1 (BX)=4278H (2)(BX)为带符号数,求(BX)/2 SAR BX (BX)=0C278H 7
7 例:( AX ) = 0012H,( BX ) = 0034H, 把它们装配成 ( AX ) = 1234H 例:( BX ) = 84F0H (1) ( BX ) 为无符号数,求 ( BX ) / 2 SHR BX , 1 ; (BX) = 4278H (2) ( BX ) 为带符号数,求 ( BX ) / 2 SAR BX , 1 ; (BX) = 0C278H MOV CL, 8 ROL AX, CL ADD AX, BX
(BX)=84F0H,把(BX)中的16位数每4位压入堆 MOV CH 4 循环次数 MOV CL 4 ;移位次数 NEXT: ROL BX CL MOV AX BX AND AX OFH 00000←(SP) PUSH AX 000F DEC CH 0004 JNZ NEXT 0008
8 MOV CH , 4 ; 循环次数 MOV CL , 4 ; 移位次数 NEXT: ROL BX , CL MOV AX , BX AND AX , 0FH PUSH AX DEC CH JNZ NEXT 0008 0004 000F 0000 ( SP ) (3) ( BX ) = 84F0H,把( BX ) 中的 16 位数每 4 位压入堆栈
串处理指 设置方向标志指令 CLD、STD 。串处理指令 串重复前缀 MOVSB/ MOVSW REP STOSB STOSW REPE/ REPZ LODSB/ LODS W REPNE/ REPNZ CMPSB/ CMPSW SCASB/ SCASW
9 串处理指令: • 设置方向标志指令 CLD、STD • 串处理指令 • 串重复前缀 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE / REPNZ CMPSB / CMPSW SCASB / SCASW
REP配合工作的MOVS/STOS/LODS REP MOVS/ STOS/ LODS 执行操作 (1)如(CX)=0则退出REP,否则转(2) (2)(CX)←(CX)-1 (3)执行MOVS/STOs/LODs (4)重复(1)~(3)
10 与 REP 配合工作的 MOVS / STOS / LODS REP MOVS / STOS / LODS 执行操作: (1) 如 ( CX ) = 0 则退出 REP,否则转(2) (2) ( CX ) ( CX ) - 1 (3) 执行 MOVS / STOS / LODS (4) 重复 (1) ~ (3)