北航微机原理课件第七讲 逻辑运算指令_第1页
北航微机原理课件第七讲 逻辑运算指令_第2页
北航微机原理课件第七讲 逻辑运算指令_第3页
北航微机原理课件第七讲 逻辑运算指令_第4页
北航微机原理课件第七讲 逻辑运算指令_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、课前复习指令系统:课前复习指令系统:1 .MOV DS,2010H ;错错 不能将立即直接给段寄存器不能将立即直接给段寄存器 2 .PUSH AL ;错错 不能对字节进行堆栈操作不能对字节进行堆栈操作 3 .MOV DX, SP ;错错 无无SP寻址方式,存储器地址寻址方式,存储器地址只能通过只能通过BX,BP,SI,DI寻址寻址 4 .IN AL,0A00H ;错错 端口地址大于端口地址大于FFH 应用应用DX寻址端口寻址端口 5 .XCHG CL,CH ;对对6 .AAA CX ;6 .AAA CX ;错错 AAAAAA为无操作数指令为无操作数指令, ,默认操作数默认操作数AL AL 7

2、.ADD BP+DI,1000H ;7 .ADD BP+DI,1000H ;错错 两个操作数不能均为存储两个操作数不能均为存储器器 8 .OUT DX,CL ;8 .OUT DX,CL ;错错 端口只能通过端口只能通过ALAL或或AXAX传送数据传送数据 9.CBW BH ;9.CBW BH ;错错 符号扩展命令为无操作数指令符号扩展命令为无操作数指令, , 默认操作数默认操作数ALAL10.ADD 03ECH,AX ;10.ADD 03ECH,AX ;错错 目的操作数不能为立即数目的操作数不能为立即数 11.MOV BX,SP+DI;11.MOV BX,SP+DI;错错 无无SP+DISP+

3、DI寻址寻址, ,必须是基址必须是基址 (BX(BX或或BP)+BP)+变址变址(SI(SI或或DI) DI) 12.MOV DI,AX ;12.MOV DI,AX ;错错 无无AXAX寻址寻址13.LDS CH,DI ;13.LDS CH,DI ;错错 LDSLDS指令目的操作数应为一个指令目的操作数应为一个1616为寄存器为寄存器 14.LEA BX,1000H ;14.LEA BX,1000H ;错错 LEALEA源操作数应为一个存储器操作数源操作数应为一个存储器操作数, , 不能是立即数不能是立即数15.DIV 0010H ;15.DIV 0010H ;错错 单操作数不能是立即数单操作

4、数不能是立即数 16.LEA DX,DI ;16.LEA DX,DI ;错错 LEALEA源操作数应为一个存储器操作数源操作数应为一个存储器操作数, , 不能是寄存器不能是寄存器 17.MUL AX,200H ;17.MUL AX,200H ;错错 MULMUL为单操作数指令为单操作数指令, , 且源操作数不能为立即数且源操作数不能为立即数,AX,AX隐含隐含 18.MOV AX,BX+BP;18.MOV AX,BX+BP;错错 无无BP+BXBP+BX寻址寻址, ,理由同第理由同第1212题题 19.CMP BX,SI ;19.CMP BX,SI ;错错 双操作数不能均为存储器双操作数不能均

5、为存储器 21.OUT DX,BX ;21.OUT DX,BX ;错错 端口只能通过端口只能通过ALAL或或AXAX传送数据传送数据22.AND 0FH,AL ;22.AND 0FH,AL ;错错 目的操作数不能为立即数目的操作数不能为立即数23.JNZ AAA ;23.JNZ AAA ;错错 AAAAAA十一条指令十一条指令. .不能作为符号地址不能作为符号地址 例例1 复习求补指令:复习求补指令: MOV AH, 80H NEG AH 00 H 0000 0000 B 00 H 0000 0000 B - - 80 H 80 H - - 1000 0000 B 1000 0000 B 1

6、1 1 1 80H 1000 0000B 80H 1000 0000B 执行后:执行后: (AL)=80H , CF=1,OF=1,ZF=0,SF=1,AF0,PF=0 CMP oprd1, oprd2 ; (oprd1) - (oprd2) CMP A, Bl 利用利用CMP执行后的标志值,比较两操作数之间的关系执行后的标志值,比较两操作数之间的关系l 比较指令比较指令CMP,进行两操作数相减操作,进行两操作数相减操作, 但只影响标志值,不影响操作数但只影响标志值,不影响操作数(减的结果不保存减的结果不保存)例例2:复习比较指令:复习比较指令:条件转移指令条件转移指令判断条件判断条件 低于低

7、于 JB next CF = 1 低于或等于低于或等于 JBE next CF = 1 或或 ZF = 1 高于高于 JA next CF = 0 且且 ZF = 0 高于或等于高于或等于 JAE next CF = 0有符号数小于用有符号数小于用JLJL,大于用,大于用JGJG例例 将将AX和和BX中较大的带符号数,存于中较大的带符号数,存于AX中中 CMP AX, BX ;比较比较 JGE great ;大于大于或或等于则跳转等于则跳转 XCHG AX, BX ;小于则交换小于则交换 great: 、CMP A,BCMP指令应用举例:指令应用举例: 若自若自BLOCKBLOCK开始的内存缓

8、冲区中,有开始的内存缓冲区中,有100100个带符号数。个带符号数。 找出最大值。并存放到找出最大值。并存放到MAXMAX单元中。单元中。 第一个数取出第一个数取出 ( AX), 取出第二个数(第二个字单元内容)与取出第二个数(第二个字单元内容)与(AX)比较比较 : (AX)第二个数,不做交换,第二个数,不做交换, 否则,(第二个字单元内容)否则,(第二个字单元内容) (AX)。)。 再取第三个数,再取第三个数, 经过经过99次比较,在(次比较,在(AX)中得到最大数。)中得到最大数。编程:编程: MOV BX,OFFSET BLOCK MOV AX,BX INC BX INC BX MOV

9、 CX,99AGAIN: ;(AX) (AX) 大,转大,转NEXTNEXT MOV AX,BXNEXT: INC BX INC BX DEC CX JNZ AGAIN MOV MAX,AX;MAX单元存放单元存放最大值最大值三三. 逻辑运算指令逻辑运算指令逻辑指令逻辑指令指令分类指令分类逻辑运算逻辑运算AND 、OR 、XOR 、NOT 、TEST移移 位位 SHL 、SAL 、SHR 、SAR 循环移位循环移位 ROL 、ROR 、RCL 、RCR1.逻辑运算指令逻辑运算指令AND AL , 0000 1111BOR BX , 00FFHNOT CLXOR DL, ALTEST AL, 0

10、000 0001Bl 除除NOT指令单操作数外,其它均为双操作数指令单操作数外,其它均为双操作数l 可进行字节或字操作可进行字节或字操作l NOT指令不影响标志指令不影响标志l TEST为为“与与”操作,但只影响标志位,不影响操作数。操作,但只影响标志位,不影响操作数。其他指令其他指令置置CF、OF为为0,AF不定不定 ( 无意义无意义 )SF、ZF、PF据结果置位据结果置位以以“与与”指令为例,讨论注意事项:指令为例,讨论注意事项: 影响条件码:影响条件码: CF0F=0, AF未定义未定义 , SF ZF PF “与与”指令的用途指令的用途:(1) 例:例:AND AL,AL ; 结果:结

11、果:。 (2) 使使;而而。例:例: 若(若(AL)=4 H AND AL, 0 H ; (AL)=03H, ; ;。2. 移位指令移位指令SHL oprd, 1CLSAL oprd, 1CLSHR oprd, 1CLSAR oprd, 1CL0CF0CFCF0CF执行操作执行操作指令格式指令格式左移部分逻辑移位与算术移位3. 循环移位指令循环移位指令指令格式指令格式执行操作执行操作CFCFCFCFROL oprd, 1CLROR oprd, 1CLRCL oprd, 1CLRCR oprd, 1CL循环移位分带进位与不带进位两种共同点:共同点: 所有移位指令都可以作所有移位指令都可以作B/W

12、操作。操作。 指令中的指令中的 cnt : 表示移位次数表示移位次数 cnt=1,1可写在指令中,不能是可写在指令中,不能是1以外的常数。以外的常数。 cnt1,用,用CL存放移位次数存放移位次数 ,不能是其他寄存器。不能是其他寄存器。 如:如:SAL AX,1 MOV CL,4 SAL AX,CL注意事项:注意事项: SHL AL, 1 SHR AL, CL ROL BX, 1 RCR AL, CLl源操作数为移位的次数源操作数为移位的次数 为为1可在指令中直接给出可在指令中直接给出 大于大于1时,移位次数需由时,移位次数需由CL给出给出 RCR AX,5 SHL BL, ALl 目的操作数

13、类型决定操作类型目的操作数类型决定操作类型SAL BL,CL 字节操作字节操作ROL BX,CL 字操作字操作当移位次数当移位次数l oprd可以是可以是reg/meml 可进行字节或字操作可进行字节或字操作(Rotate)(Shift): 移位指令执行后,移出的位可能丢失;移位指令执行后,移出的位可能丢失; 循环移位指令移循环移位指令移位后,操作数中原来各数位的信息不会丢失,这是移动了位位后,操作数中原来各数位的信息不会丢失,这是移动了位置,必要时可以恢复。置,必要时可以恢复。 循环移位指令可以对操作数进行测试。循环移位指令可以对操作数进行测试。例:测试例:测试(AL)5 =? 0MOV C

14、L , 3JNC ZEROZERO: 。例:例: 将将DX、AX组合起来构成组合起来构成32位寄存器向左移一位。位寄存器向左移一位。如下图所示:如下图所示:0 015150 01515DXDXAXAX程序:程序: SHL AX , 1 RCL DX , 132位寄存器向左移一位位寄存器向左移一位四、串操作指令(四、串操作指令(String manipulation ) “串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。 。 串操作指令是串操作指令是8088实现内存之间数据传送的一组指令实现内存之间数据传送的一组指令 8088有有5种基本操作:种基本操作: 1、 MOV

15、S(Move string) 串传送指令串传送指令 2、CMPS(Compare string) 串比较指令串比较指令 3、SCAS(Scan string) 串扫描指令串扫描指令 4、LODS(Load from string) 串取数指令串取数指令 5、STOS (Store in to string) 存入串数据指令存入串数据指令 可以只有源操作数,可以只有目标操作数,可能二者都有。可以只有源操作数,可以只有目标操作数,可能二者都有。 源操作数用源操作数用SI 寻址,隐含寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。值为段地址,可以用段跨越前缀指定其它段。 目标操作数用目标操作数

16、用DI寻址,隐含寻址,隐含ES为段地址。为段地址。 每次操作对每次操作对SI、DI 调整:调整: 与上述指令基本配合使用前缀有:与上述指令基本配合使用前缀有:(Repeat) (Repeat while equal/zero) (Repeat while not equal/not zero)。下面分二种情况来讨论:下面分二种情况来讨论:(一一) 与与REP相配合工作的相配合工作的MOVS、STOS指令指令 REP 重复串操作直到(重复串操作直到(CX)=0为止为止LODS指令一般不直接与指令一般不直接与REP联合使用,但其操作与联合使用,但其操作与STOS相关,因而放在这里。相关,因而放在这

17、里。(二二) 与与REPE/REPZ和和REPNE/REPNZ联合工作的联合工作的CMPS和和SCAS指令指令 REPE/REPZ 当相等当相等/为零时重复串操作为零时重复串操作 REPNE/REPNZ 当不相等当不相等/不为零时重复串操作不为零时重复串操作 格式:格式:REP String Primitive 串指令串指令 String Primitive 可为:可为:MOVS、STOS。MOVS(Move String) 串传送串传送LODS(Load from String) 读串指令读串指令STOS(Store into String) 写串指令写串指令 (1)当当(CX)= 0 ,结

18、束,结束REP, 执行执行REP后的下一条指令。后的下一条指令。 (2) 当当(CX)0, (CX) (CX) -1 , (3) 执行执行REP后的串指令,后的串指令, (4) 重复重复(1)(3)。)。REP 执行流程图执行流程图( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REP后的串执行REP后的串指令指令N N(1) MOVS dest,src;(;(ES):():(DI)(DS):():(SI)MOVSB (字节)(字节);(SI)(SI)1,(,(DI)(DI) 1MOVSW (字);(字);(SI)(SI)2,(

19、,(DI)(DI)2 该指令不影响条件码该指令不影响条件码 。 *如:如: MOVS ES:BYTE PTR DI,DS:SI* 单指令不能完成单指令不能完成 ; 例:将内存的数据段中以例:将内存的数据段中以AREA1为首地址的为首地址的100个数据,个数据,传送到附加段中的传送到附加段中的AREA2为首地址的区域。为首地址的区域。用用MOVS串操作指令编程:串操作指令编程: MOV AX,SEG AREA1MOV DS,AX MOV AX,SEG AREA2MOV ES,AX ; DF=0,增址传送,增址传送 REP ESES:BYTE PTRDI, DSBYTE PTRDI, DS:SIS

20、IMOV指令编程:指令编程: 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,100LOOP1:MOV AL,SI ; (AL)(DS):():(SI) MOV ES:DI,AL ;(;(ES):():(DI)(AL) INC SI INC DI DEC CX JNE LOOP1归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1) 数据段中源串首地址(如反向传

21、送到末地址)存入SI寄存器中。(2) 附加段中目的串首地址(或反向传送末地址)。(3) 。(4) CLD(clear direction flag) 功能:功能:,执行串处理指令时,执行串处理指令时 可以使地址可以使地址。 STD(set direction flag)功能:功能:,执行串处理指令时可以使地址,执行串处理指令时可以使地址LODS(Load from string)读串指令LODS src;(字节)(字节)(AL) (DS):(SI), (SI) (SI) 1 (字(字)(AX) (DS):(SI),(SI) (SI)2LODS B (字节)(字节);(AL) (DS):(SI)

22、,(SI) (SI) 1LODS W (字)(字) ;(AX) (DS):(SI),(SI) (SI)2功能:该指令把由功能:该指令把由。DF=0,(,(SI) (SI)+1或或+2DF=1,(,(SI) (SI)-1或或-2(1) 指令允许用段跨越前缀来指定非数据段的存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2) 该指令不影响条件码。该指令不影响条件码。一般说来,一般说来,它不与它不与REP联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。 (AL)中只能保持最后一个元素。中只能保持最后一个元素。有时有时。(3) 适用于在一个循环中,用基本串操作指

23、令构成复杂串操作适用于在一个循环中,用基本串操作指令构成复杂串操作时很有用。时很有用。 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)缓冲区长度。用来建立一串相同的值,缓冲区长度。用来建立一串相同的值,初始清零。初始清零。例:在附加段例:在

24、附加段STORE开始存开始存5个空格个空格程序:程序: MOV AL,20H ;_ (AL) MOV CX,5 MOV DI,offset STORE CLD REP STOSB ;(ES):(DI) (AL) (DI) (DI)+120H20H20H20H20H20H20H20H20H20H.STORE:STORE:学习学习LODS,STOS指令应用指令应用例:内存中有一个首地址为例:内存中有一个首地址为BLOCK。 存放正数的缓冲区首址为存放正数的缓冲区首址为PUOS-DATA, 存放负数的缓冲区首址为存放负数的缓冲区首址为MINUS-DATA。设:设: 源数据块用源数据块用SI寻址,寻址

25、, 正数的目的区用正数的目的区用DI寻址,寻址, 负数的目的区用负数的目的区用BX寻址。寻址。 循环次数循环次数 ( CX )。用用LODS指令把源数据取入(指令把源数据取入(AL)中,)中, 检查其符号,确定正、负,检查其符号,确定正、负,若为正数用若为正数用STOS指令送至正数缓冲区,指令送至正数缓冲区,若是负数,把(若是负数,把(DI)与()与(BX)交换,仍使用)交换,仍使用STOS传送,传送,传送传送 完后再完后再 将(将(DI)与()与(BX)交换,恢复原值)交换,恢复原值。程序:程序:START: MOV SI,OFFSET BLOCK ; 数缓串位置数缓串位置MOV DI,OF

26、FSET PUOS-DATA ; 正数缓冲区正数缓冲区 MOV BX,OFFSET MINUS-DATA ;负数缓冲区;负数缓冲区MOV CX,COUNT GOON: TEST AL,80H JNZ MINS ;若非;若非0,为负数转,为负数转MINS ;正数;正数 ,(,(DI)(AL),(),(DI)(DI)+1JMP AGAINMINS: XCHG BX,DI ;负数;负数 ,(,(DI)(AL),(),(DI)(DI)+1XCHG BX,DI AGAIN:DEC CX JNZ,GOON HLT(二二) 与与REPE/REPZ和和REPNE/REPNZ联合工作的联合工作的CMPS和和SC

27、AS指令指令 REPE/REPZ 当相等当相等/为零时重复串操作为零时重复串操作 格式:格式:REPE(或(或REPZ)string primitive 当相等时的重复前缀当相等时的重复前缀REPZString primitive可用于可用于 : 1、CM PS(Compare string ) 串比较指令串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:当当(CX)= 0 , 结束结束REPZ, 执行执行REPZ下一条指令;下一条指令;(2) 当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPZ后的串指令;后的串指

28、令;(3) 当当ZF = 1, 返回返回 (1) ;(4) 当当ZF1, 则结束则结束REPZ 执行执行REPZ下一条指令。下一条指令。 (CX)减减1操作不影响标志操作不影响标志 ZF标志由串操作决定标志由串操作决定 当当 (CX) = 0或或ZF=0时退出循环时退出循环REPZ执行流程执行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REZ后的串执行REZ后的串指令指令N NZF=1?ZF=1?N NY Y 格式:格式:REPNE(或(或REPNZ)string primitive 当不相等重复前缀REPNZstrin

29、g primitiveString primitive可为可为 : 1、CM PS(Compare string ) 串比较指令串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:当当(CX )= 0 , 结束结束REPNZ, 执行执行REPNZ下一条指令。下一条指令。(2) 当当(CX)0,将,将CX 的内容减的内容减1, 执行执行REPNZ后的串指令。后的串指令。(3) 当当ZF = 0, 返回返回(1); 当当ZF0, 则结束则结束REPNZ, (4) 执行执行REPNZ下一条指令。下一条指令。注意:注意: (CX)减1操作

30、不影响标志 ZF标志由串操作决定 当 (CX) = 0或ZF=1时退出循环REPNZ执行流程执行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行RENZ后的串执行RENZ后的串指令指令N NZF=0?ZF=0?N NY Y (SI)作为源串地址,(作为源串地址,(DI)目的串地址目的串地址(1) CMPS dest,src;(ES) :(DI) -(DS):(SI),CMPS B (字节)(字节);(SI) (SI)1,(DI)(DI) 1CMPS W (字);(字);(SI) (SI)2,(DI) (DI)2执行操作:执行

31、操作:(ES) :(DI) -(DS):(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI) (SI)1,(DI)(DI) 1字操作:字操作:(SI) (SI)2,(DI) (DI)2 学习学习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 (Scan string ) (DI)字符串起始地址,(AL)或(AX) 关键字 串扫描指令有3种格式:格式:格式:SCAS dest SCASB(字节);(字节);(AL)-(ES):():(DI),(),(DI)(DI)1 SCASW(字);(字);(AX)-(ES):():(DI),(),(DI) (DI)2 (AL)或()或(AX) - 目

温馨提示

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

评论

0/150

提交评论