课件:微机原理及接口技术第三章.ppt_第1页
课件:微机原理及接口技术第三章.ppt_第2页
课件:微机原理及接口技术第三章.ppt_第3页
课件:微机原理及接口技术第三章.ppt_第4页
课件:微机原理及接口技术第三章.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二、8086/8088的指令系统(续),二、 8086/8088的指令系统(续) 内容: 3、逻辑运算和移位指令 (一)逻辑运算指令 (二)移位指令 (三)循环移位指令 4、串操作指令 (一) 与REP相配合工作的MOVS、STOS、LODS指令 (二)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和 SCAS指令,(一)逻辑运算指令 1、AND(Logical and ) 逻辑“与”指令 2、 TEST(Test or non-destructive logical and ) 测试指令 3、OR(Lgical inclusive or ) 逻辑“或”指令 4、XOR(Logical exclusive or) 逻辑“异或”指令 5、NOT(Logical not ) 逻辑“非”指令,1、AND(Logical and )逻辑“与”指令 格式:AND dest, src ;B/W,(dest)(dest (src) src: 立即数、寄存器、存储器。 dest: 寄存器、存储器。 执行操作:进行“与”运算, 两位中有一位为0(或二位都为0),则结 果 为0,否则为1。 操作类型举例: AND AL, 0FH ;寄存器 立即数 AND CX, DI ; 寄存器 寄存器 AND SI, MEM_NAME ; 寄存器 存储器 AND ALPHA DI, AX ; 存储器 寄存器 AND WORD PTR BXSI, 0FFFEH ; 存储器 立即数,注意: “与”指令中操作数不能同时为存储器; 影响条件码: CF0F=0, A未定义 , SF ZF PF “与”指令的用途: (1) 清CF , 自己“与”自己. 操作数不变 ,CF=0 例:AND AL ; 结果:操作数不变 ,CF=0。 (2) 使操作数中若干位保持不变,若干位与“1”相与; 而若干位置为“0 “的场合,若干位与“0” 相与。 例: 若(AL)=43H AND AL, 0FH ; (AL)=03H, (AL)03不变; ;(AL)47=00H,屏蔽高4位。,“与”指令应用举例: 例1:将英文小写字母ASCII转换成大写。 小写英文字母ASCII为:az 61H7AH 大写英文字母ASCII为:AZ 41H5AH 程序: MOV AL, z AND AL,0DFH ;(AL)=5AH 例2:判断键盘按下的字符是不是Y? MOV AH, 7 INT 21H ;键入无回显,(AL)=输入键的字符码 AND AL, 0DFH CMP AL, Y JE YES YES: ,0110 0001,0100 0001,1101 1111,61H,41H,DFH,用途: 常常用来检测一些条件是否满足,但又不希望改变原有的操作数的情况下,常在此指令后边加一条 条件转移指令。 例:判断A单元中数据的奇偶性 设: (A )= 0AEH 程序:MOV AL,A ;(AL)=0AEH TEST AL,01H JZ EVEN ; 结果=0为偶数转EVEN 奇数处理 EVEN:偶数处理 检测(AL)的最低位是否为0,若为0转EVEN,3、OR(Lgical inclusive or )逻辑“或”指令 格式:OR dset, src;(dset)(dset) (src) dest: 寄存器、存储器。 src: 立即数、寄存器、存储器。 执行操作: 进行按位“或”运算 两位操作数中任一位为1(或都为1), 则该位(结果)=1, 否则为0。 操作类型举例: OR BL,0F6H ; 寄存器 立即数 OR AH, BL ;寄存器 寄存器 OR CL ,BETABXDI ; 寄存器 存储器 OR GAMMASI ,DX ;存储器 寄存器 OR BYTE PTR MEM_BYTE , 80H ;存储器 立即数,注意: “或”指令中操作数不能同时为存储器; 影响条件码: CF0F=0, A未定义 , SF ZF PF 用途: (1)清CF , 自己与自己“或”,操作数不变,CF=0 例: OR AL ;(AL)不变,CF=0 (2)使某个操作数若干位保持不变,若干位与“0”或 ; 而若干位置1。若干位与“1”或 。 (3) 将两个操作数信息组合。 若(AL)=03H 用OR指令组合使(AL)=33H=3 。 OR AL,30H ;(AL)=33H,4、XOR(Logical exclusive or)逻辑“异或”指令 格式:XOR dset , src ;B/W(dset) (dset) (src) dest: 寄存器、存储器。 src: 立即数、寄存器、存储器。 执行的操作:对指令的两个操作数进行按位“异或”运算。 二位不相同时为1, 相同时为0。 操作类型举例: XOR DI, 23F6HH ; 寄存器 立即数 XOR SI , DX ;寄存器 寄存器 XOR CL , BUFFER ; 寄存器 存储器 XOR MEMBX,AX ;存储器 寄存器 XOR byte ptrTABLEBPSI, 3DH ; 存储器 立即数,注意: “或”指令中操作数不能同时为存储器; 影响条件码: CF0F=0, A未定义 , SF ZF PF 用途:对某些特定位求反,某些特定位与“1” 其余位保持不变,保持不变与“0” 。 应用举例: 例1: 将(AL)中的第1、3、5、7位求反 0、2、4、6位保持不变。 MOV AL, 0FH XOR AL,0AAH,例2: 比较三条(AX)清“0”指令: XOR AX , AX ; 清AX , 清CF,2个字节,3个T。 SUB AX, AX ;清AX , 清CF,2个字节,3个T。 MOV AX , 0 ;清AX ,不影响标志位, 3个字节,4个T。,5、NOT(Logical not )逻辑“非”指令 格式: NOT dest ;B/W 指令操作数只有一个,指令对操作数按位求反。 执行操作: 字节求反:(dest)0FFH-(dest) 字求反: (dest 0FFFFH-(dest) 源操作数:寄存器、存储器。不能是立即数。 影响标志位:对标志位无影响。 操作类型举例: NOT AH ; 8位寄存器求反 NOT CX ;16位寄存器求反 NOT BYTE PTR BP ;8位存储器求反 NOT WORD PTR COUNT ;16位存储器求反,综合举例: 1使某些位置“0”。 IN AL,61H;(AL)= B 设备控制寄存器 想使此位为0 执行指令: AND AL,0FDH 即可。 2. 使某些位置“1”。 IN AL,61H;(AL)= 执行指令: OR AL,02 想使此位为“1” 3. 使某些位求反: IN AL,61H ;(AL)= 0 XOR AL,02H 0 0 0 0 0 0 1 0 1 4. 测试某些位(测奇偶性): 测试 “奇”“偶”性。 见TEST指令的用途例子。,(二)移位指令 (8086有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循环右移指令,共同点: 所有移位指令都可以作B/W操作。 指令中的 dest : 寄存器、存储器寻址方式。 cnt : 表示移位次数 cnt=1,1可写在指令中,不能是1以外的常数。 cnt1,用CL存放移位次数 ,不能是其他寄存器。 如: SAL AX,1 MOV CL,4 SAL AX,CL 利用移位指令编制 *, / 程序, 执行时间比直接用 * , / 指令快, 速度可提高5-6倍。,1、 算逻移位指令( 4条 ) : SHL , SHR, SAL , SAR (1)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移/算术左移指令 格式: SHL dest ,cnt ;逻辑左移指令, B/W SAL dest ,cnt ;算术左移指令, B/W dest : 寄存器、存储器寻址方式。 cnt : 表示移位次数 cnt=1,1可写在指令中。 cnt1,用CL存放移位次数 。,执行操作:相当于无符号数的2功能。 SHL/SAL指令操作示意图如下图所示: 指令格式举例: SHL AH,1 SAL SI, CL SAL WORD PTR BX+5 ,1 SHL BYTE PTR , CL,0,CF,dest,(2)、SHR (Shift logical right )逻辑右移指令 格式: SHR dest ,cnt ;逻辑右移指令, B/W 执行操作:相当于无符号数的2功能。 SHR指令操作示意图如下图所示:,dest : 寄存器、存储器寻址方式。 指令格式举例: SHR BL , 1 SHR AX , CL SHR BYTE PTR DI+BP,1 SHR WORD PTR BLOCK ,CL,dest,CF,0,(3)、SAR (Shift arithmetic right )算术右移指令 格式: SAR dest ,cnt ;算术右移指令, B/W 执行操作:相当于带符号数的2功能 SAR指令操作示意图如下图所示,dset,dest : 寄存器、存储器寻址方式。 指令格式举例: SAR AL , 1 SHR DL , CL SHR WORD PTR TABLESI,1 SHR BYTE PTR STATUS ,CL,CF,2、循环移位( 4条): ROL, ROR , RCL, RCR。 共同点: ROL、ROR 不含CF循环移位指令,操作数移动8次后还原。 RCL、 RCR 含CF循环移位指令,操作数移动9次后还原。 影响标志OF、CF ROL、 RCL影响标志OF、CF情况相同 ; ROR 、 RCR影响标志OF、CF情况相同 。 SF、ZF、PF、AF不影响。,(1)、ROL (Rotate left )不含CF循环左移指令 格式: ROL dest ,cnt ;不含CF循环左移指令, B/W 执行操作:ROL指令操作示意图如下图所示 移动8次后操作数还原。,CF,dest,指令格式举例: ROL BH , 1 ROL DX , CL ROL WORD PTR TABLEDI,1 ROL BYTE PTR ALPHA ,CL,(2)、ROR (Rotate right )不含CF循环右移指令 格式: ROR dest ,cnt ;不含CF循环右移指令, B/W 执行操作:ROR指令操作示意图如下图所示 右移8次后操作数还原。,dest,指令格式举例: ROR CX , 1 ROL BH , CL ROL BYTE PTRBETA , 1 ROL WORD PTR COUNT , CL,(3)、RCL (Rotate left through carry )含CF循环左移指令 格式: RCR dest ,cnt ;含CF循环左移指令, B/W 执行操作:RCL指令操作示意图如下图所示 左移9次后操作数还原。,CF,dest,指令格式举例: RCL BX , 1 RCL DL , CL RCL BYTE PTR ARRAYDI , 1 RCL WORD PTR SI+BP , CL 影响标志:RCL 与ROL 影响标志OF、CF情况相同,(4)、RCR (Rotate right through carry )含CF循环右移指令 格式: RCR dest ,cnt ;含CF循环左移指令, B/W 执行操作:RCR指令操作示意图如下图所示 右移9次后操作数还原。,dest,指令格式举例: RCR DI, 1 RCR SI , CL RCR WORD PTRSI+BX+3, 1 RCL BYTE PTRPORT, CL 影响标志:RCR 与 ROR 影响标志OF、CF情况相同,循环移位指令(Rotate)与移位指令(Shift)不同点: 循环移位指令移位后,操作数中原来各数位的信息不会丢失,这是移动了位置,必要时可以恢复。 循环移位指令可以对操作数进行测试。 例:测试(AL)5 =? 0 MOV CL , 3 ROL AL , CL JNC ZERO ZERO: ,4、串操作指令(String manipulation ) “串”就是内存中一段地址相连的字节或字。 串操作对串中各项进行操作,也叫数据块操作。 8086有5种基本操作: (1) MOVS(Move string) 串传送指令 (2)CMPS(Compare string) 串比较指令 (3) SCAS(Scan string) 串扫描指令 (4)LODS(Load from string) 从串取指令 (5)STOS (Store in to string) 存入串指令,共同点: 可以只有源操作数,可以只有目标操作数,可能二者都有。 源操作数用SI 寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。 目标操作数用DI寻址,隐含ES为段地址。 每次操作对SI、DI 调整: DF=1,DI、SI自动-1 (字节)或-2(字); DF=0,DI、SI自动+1(字节)或+2(字)。 与上述指令基本配合使用前缀有: REP(Repeat)重复。 REPE/REPZ(Repeat while equal/zero) 相等/为零则重复。 REPNE/REPNZ(Repeat while not equal/not zero)不相等/不为零则重复。,下面分二种情况来讨论: (一) 与REP相配合工作的MOVS、STOS、LODS指令 REP 重复串操作直到(CX)=0为止 (二) 与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS 指令 REPE/REPZ 当相等/为零时重复串操作 REPNE/REPNZ 当不相等/不为零时重复串操作,(一) 与REP相配合工作的MOVS、STOS、LODS指令 REP 重复串操作直到(CX)=0为止 格式:REP String Primitive 串指令 String Primitive 可为:MOVS、STOS、LODS。 MOVS(Move String) 串传送 LODS(Load from String) 从串取指令 STOS(Store into String) 存入串指令,REP 重复串操作执行过程: (1)当(CX)= 0 ,结束REP, 执行REP后的下一条指令。 (2) 当(CX)0, (CX) (CX) -1 , (3) 执行REP后的串指令, (4) 重复(1)(3)。,REP 执行流程图,MOVS(Move string)串传送 串传送有3种格式: (1) MOVS dest,src;(ES):(DI))(DS)(SI) MOVSB (字节);(SI)(SI)1,(DI)(DI) 1 MOVSW (字);(SI)(SI)2,(DI)(DI)2 当方向标志 CLD , DF=0时 用“+” STD , DF=1时 用“-” 该指令不影响条件码 。 * MOV单指令不能完成 存储单元之间的数据传送; MOVS指令就是为解决 存储单元之间数据传送而设置的。,例:将内存的数据段中以AREA1为首地址的100个数据,传送到附加段中的AREA2为首地址的区域。 用MOVS串操作指令编程: MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX MOV SI,OFFSET AREA1 MOV DI,OFFSET AREA2 MOV CX,100 CLD ; DF=0,增址传送 REP MOVS AREA1, AREA2,应用MOV指令编程: MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX MOV SI,OFFSET AREA1 ;将ARE1偏移地址SI MOV DI,OFFSET AREA2 MOV CX,100 LOOP1:MOV AL,SI ; (AL)(DS):(SI) MOV ES:DI,AL ;(ES):(DI)(AL) INC SI INC DI DEC CX JNE LOOP1,归纳在执行MOVS指令时,应该先做好以下准备工作: (1) 数据段中源串首地址(或反向传送末地址)存入SI寄存中。 (2) 附加段中目的串首地址(或反向传送末地址)存入DI寄存中。 (3) 数据串长度存入CX寄存器。 (4) 建立方向标志 建立方向标志介绍两条指令: CLD(clear direction flag) 功能:DF=0,执行串处理指令时 可以使地址自动+1或+2。 STD(set direction flag) 功能:DF=1,执行串处理指令时可以使地址自动-1或 -2。,LODS(Load from string) 从串取指令 从串取指令有3种格式: LODS src;(字节)(AL) (DS):(SI), (SI) (SI) 1 (字)(AX) (DS):(SI),(SI) (SI)2 LODS B (字节);(AL) (DS):(SI),(SI) (SI) 1 LODS W (字) ;(AX) (DS):(SI),(SI) (SI)2 功能:该指令把由(SI)指定的数据段中某单元内容 (AL) 或 (AX)中。 DF=0,(SI) (SI)+1或+2 DF=1,(SI) (SI)-1或-2,LODS应用注意: (1) 指令允许用段跨越前缀来指定非数据段的存储区。 (2) 该指令不影响条件码。 一般说来, 它不与REP联用,每重复一次,累加器的内容就改变一次。 (AL)中只能保持最后一个元素。 有时缓冲区中的一串字符需要多次取出测试时可用本指令。,3 STOS(Store into string) 存入串指令 将(AL)或(AX) (ES):(DI),(DI) 1或2(DI) 存入串指令有3种格式: STOS dest;(字节) (ES):(DI) (AL) , (DI) (DI) 1 (字) (ES):(DI) (AX) , (DI) (DI) 2 (2) STOS B (字节); (ES):(DI) (AL) , (DI) (DI) 1 (3) STOS W (字) ; (ES):(DI) (AX) , (DI) (DI) 2 用途: 与REP联用时,(CX)缓冲区长度。用来建立一串相同值。,例:在附加段STORE开始存5个空格 程序: MOV AL,20H ;_ (AL) MOV CX,5 MOV DI,OFFSET STORE CLD REP STOSB ;(ES):(DI) (AL) (DI) (DI)+1,(二) 与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令,REPNE/REPNZ 当不相等/不为零时重复串操作,REPE/REPZ 当相等/为零时重复串操作,执行过程: 当(CX)= 0 , 结束REPZ, 执行REPZ下一条指令; (2) 当(CX)0,将CX 的内容减1, 执行REPZ后的串指令; (3) 当ZF = 1, 返回 (1) ; (4) 当ZF1, 则结束REPZ 执行REPZ下一条指令。 注意: (CX)减1操作不影响标志 ZF标志由串操作决定 当 (CX) = 0或ZF=0时退出循环,REPE/REPZ 当相等/为零时重复串操作,执行过程: 当(CX )= 0 , 结束REPNZ, 执行REPNZ下一条指令。 (2) 当(CX)0,将CX 的内容减1, 执行REPNZ后的串指令。 当ZF = 0, 返回(1); 当ZF0, 则结束REPNZ, (4) 执行REPNZ下一条指令。 注意: (CX)减1操作不影响标志 ZF标志由串操作决定 当 (CX) = 0或ZF=1时退出循环,REPNZ执行流程,REPNE/REPNZ 当不相等/不为零时重复串操作,1、CM PS(Compare string ) 串比较指令 (SI)作为源串地址,(DI)目的串地址 串比较指令有3种格式: (1) CMPS dest,src;(ES) :(DI) -(DS):(SI),结果不存,置标志 CMPS B (字节);(SI) (SI)1,(DI)(DI) 1 CMPS W (字);(SI) (SI)2,(DI) (DI)2 执行操作: (ES) :(DI) -(DS):(SI),结果不存,置标志。 字节操作:(SI) (SI)1,(DI)(DI) 1 字操作:(SI) (SI)2,(DI) (DI)2 注意: 两数相减,只影响标志,不影响操作数。 其它操作规定与MOVS同。,学习REPZ CMPSB指令 例:利用CMPS指令对STRING1和STRING2二个字符串进行 比较,相同在RESULT 单元送00H,不同送0FFH。 MOV SI,OFFSET STRING1 MOV DI,OFFSET STRING2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT ;若串不同,在RESUL单元中置0FFH MOV AL,0 ;若串相等,在RESULT单元中置00H JMP OULPT UNMAT:MOV AL,0FFH OUTPT: MOV RESULT,AL HLT,2、SCAS (Scan string ) 串扫描指令,搜索指令 (DI)字符串起始地址,(AL)或(AX) 关键字 串扫描指令有3种格式: 格式:SCAS dest SCASB(字节);(AL)-(ES):(DI),(DI)(DI)1 SCASW(字);(AX)-(ES):(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论