80888 1 4 SHL SHR SAL SAR 1

  • Slides: 55
Download presentation

(二)移位指令 (8088有8条移位指令) : 1、 算逻移位指令( 4条 ): SHL , SHR, SAL , SAR 。

(二)移位指令 (8088有8条移位指令) : 1、 算逻移位指令( 4条 ): SHL , SHR, SAL , SAR 。 (1)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移/算术左移指令 (2)、SHR (Shift logical right ) 逻辑右移指令 (3)、SAR (Shift arithmetic right )算术右移指令 2、循环移位( 4条): ROL, ROR , RCL, RCR。 (1)、ROL (Rotate left ) 不含CF循环左移指令 (2)、ROR (Rotate right ) 不含CF循环右移指令 (3)、RCL (Rotate left through carry )含CF循环左移指令 (4)、RCR (Rotate right through carry )含CF循环右移指令

应用举例: (BX)=84 F 0 H (1) 若(BX)无符号数,求(BX)/2 SHR BX,1 ; (BX)=4278 CF=0,OF=1,SF=0,ZF=0 (2) 若(BX)带符号数,求(BX)/4

应用举例: (BX)=84 F 0 H (1) 若(BX)无符号数,求(BX)/2 SHR BX,1 ; (BX)=4278 CF=0,OF=1,SF=0,ZF=0 (2) 若(BX)带符号数,求(BX)/4 MOV CL,02 H 或SAR BX,1 SAR BX,CL SAR BX,1 ; CF=0,OF无意义, SF=1,ZF=0

(一) 与REP相配合 作的MOVS、STOS、LODS指令 • REP 重复串操作直到(CX)=0为止 格式:REP String Primitive 串指令 String Primitive 可为:MOVS、STOS、LODS。 1.

(一) 与REP相配合 作的MOVS、STOS、LODS指令 • REP 重复串操作直到(CX)=0为止 格式:REP String Primitive 串指令 String Primitive 可为:MOVS、STOS、LODS。 1. MOVS(Move String) 2. LODS(Load from String) 串传送 从串取指令 3. STOS(Store into String) 存入串指令

例:将内存的数据段中以AREA 1为首地址的100个数据,传 送到附加段中的AREA 2为首地址的区域。 用MOVS串操作指令编程: MOV AX,SEG AREA 1 MOV DS,AX MOV AX,SEG AREA

例:将内存的数据段中以AREA 1为首地址的100个数据,传 送到附加段中的AREA 2为首地址的区域。 用MOVS串操作指令编程: MOV AX,SEG AREA 1 MOV DS,AX MOV AX,SEG AREA 2 MOV ES,AX MOV SI,OFFSET AREA 1 MOV DI,OFFSET AREA 2 MOV CX,100 CLD ; DF=0,增址传送 REP MOVS ES:BYTE PTR[DI], DS:[SI]

应用MOV指令编程: MOV AX,SEG AREA 1 MOV DS,AX MOV AX,SEG AREA 2 MOV ES,AX MOV

应用MOV指令编程: MOV AX,SEG AREA 1 MOV DS,AX MOV AX,SEG AREA 2 MOV ES,AX MOV SI,OFFSET AREA 1 ;将ARE 1偏移地址→SI MOV DI,OFFSET AREA 2 MOV CX,100 LOOP 1:MOV AL,[SI] ; (AL)←((DS):(SI)) MOV ES:[DI],AL ;((ES):(DI))←(AL) INC SI INC DI DEC CX JNE LOOP 1

例:在附加段STORE开始存 5个空格 . . . STORE: 程序: 20 H MOV AL,20 H ;‘ ’

例:在附加段STORE开始存 5个空格 . . . STORE: 程序: 20 H MOV AL,20 H ;‘ ’ (AL) 20 H MOV CX,5 MOV DI,offset STORE 20 H. . . CLD REP STOSB ;((ES):(DI)) (AL) (DI)+1 . . .

(二) 与REPE/REPZ和REPNE/REPNZ联合 作的CMPS和SCAS指令 • REPE/REPZ 当相等/为零时重复串操作 格式:REPE(或REPZ)string primitive 当相等重复前缀REPZ String primitive可为 : CMPS ,

(二) 与REPE/REPZ和REPNE/REPNZ联合 作的CMPS和SCAS指令 • REPE/REPZ 当相等/为零时重复串操作 格式:REPE(或REPZ)string primitive 当相等重复前缀REPZ String primitive可为 : CMPS , SCAS 1、CMPS(Compare string ) 串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令

 • REPNE/REPNZ 当不相等/不为零时重复串操作 格式:REPNE(或REPNZ)string primitive 当不相等重复前缀REPNZ string primitive. String primitive可为 : CM PS

• REPNE/REPNZ 当不相等/不为零时重复串操作 格式:REPNE(或REPNZ)string primitive 当不相等重复前缀REPNZ string primitive. String primitive可为 : CM PS , SCAS 1、CMPS(Compare string ) 串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令

REPZ CMPSB指令 例:利用CMPS指令对STRING 1和STRING 2二个字符串进行 比较,相同在RESULT 单元送00 H,不同送0 FFH。 MOV SI,OFFSET STRING 1 MOV

REPZ CMPSB指令 例:利用CMPS指令对STRING 1和STRING 2二个字符串进行 比较,相同在RESULT 单元送00 H,不同送0 FFH。 MOV SI,OFFSET STRING 1 MOV DI,OFFSET STRING 2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT ;若串不同,在RESUL单元中置 0 FFH MOV AL,0 ;若串相等,在RESULT单元中置 00 H JMP OULPT UNMAT:MOV AL,0 FFH OUTPT: MOV RESULT,AL HLT

开始 程序: 初始化,置源地址、目的地址指针 清方向标志DF LEA SI , BLOCK 1 LEA DI , BLOCK 2

开始 程序: 初始化,置源地址、目的地址指针 清方向标志DF LEA SI , BLOCK 1 LEA DI , BLOCK 2 CLD NEXT: LODSB CMP AL , 0 DH JZ DONE CMP AL , 61 H JC OK CMP AL , 7 BH JNC OK SUB AL , 20 H OK: STOSB JMP NEXT DONE: HLT 取一个字符 Y 回车? N Y <‘a' N Y >'z'? N 转换为大写字母 送存 流程图 结束