课前复习指令系统.ppt

上传人:精*** 文档编号:1146840 上传时间:2024-10-31 格式:PPT 页数:47 大小:334KB
下载 相关 举报
课前复习指令系统.ppt_第1页
第1页 / 共47页
课前复习指令系统.ppt_第2页
第2页 / 共47页
课前复习指令系统.ppt_第3页
第3页 / 共47页
课前复习指令系统.ppt_第4页
第4页 / 共47页
课前复习指令系统.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

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 ;对对第七讲8086/8088指令系统(续)2006年10月31号(星期二)6.AAA CX ;6.AAA CX ;错错 AAAAAA为无操作数指

2、令为无操作数指令,默认操作数默认操作数AL AL 7.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

3、,SP+DI;错错 无无SP+DISP+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 1 1 1 8

6、0H 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:复习比较指令:复习比较指令:条件转移指令条件转移指令判断条件判断条件 低于低于 JB next CF=1 低于

7、或等于低于或等于 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 CX,9

9、9AGAIN:CMP AXCMP AX,BXBX JG NEXTJG NEXT ;(AX)(AX)大,转大,转NEXTNEXT MOV AX,BXNEXT:INC BX INC BX DEC CX JNZ AGAIN MOV MAX,AX;MAX单元存放单元存放最大值最大值 8086/80888086/8088指令系统(续)指令系统(续)8086/8088指令系统可以分成指令系统可以分成6个功能组:个功能组:1 数据传送数据传送(Data transfer)2 算术运算(算术运算(Arithmetic)3 逻辑运算和移位指令逻辑运算和移位指令(Logic&Shift)4 串操作串操作(Stri

10、ng manipulation)5 控制转移(控制转移(Control Transfer)6 处理器控制(处理器控制(Processor Control)三三.逻辑运算指令逻辑运算指令逻辑指令逻辑指令指令分类指令分类逻辑运算逻辑运算AND、OR、XOR、NOT、TEST移移 位位 SHL、SAL、SHR、SAR 循环移位循环移位 ROL、ROR、RCL、RCR1.逻辑运算指令逻辑运算指令AND AL,0000 1111BOR BX,00FFHNOT CLXOR DL,ALTEST AL,0000 0001Bl 除除NOT指令单操作数外,其它均为双操作数指令单操作数外,其它均为双操作数l 可进行

11、字节或字操作可进行字节或字操作l NOT指令不影响标志指令不影响标志l TEST为为“与与”操作,但只影响标志位,不影响操作数。操作,但只影响标志位,不影响操作数。其他指令其他指令置置CF、OF为为0,AF不定不定(无意义无意义)SF、ZF、PF据结果置位据结果置位以以“与与”指令为例,讨论注意事项:指令为例,讨论注意事项:“与与与与”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;影响条件码:影响条件码:CF0F=0,AF未定义未定义,SF ZF PF “与与”指令的用途指令的用途:(1)清清清清CF,CF,自己自己自己

12、自己“与与与与”自己自己自己自己.操作数不变操作数不变操作数不变操作数不变 ,CF=0CF=0 例:例:AND AL,AL ;结果:结果:操作数不变操作数不变操作数不变操作数不变 ,CF=0CF=0。(2)使使操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与“1”1”相与相与相与相与;而而若干位置为若干位置为若干位置为若干位置为“0“0“的场合,若干位与的场合,若干位与的场合,若干位与的场合,若干位与“0”0”相与相与相与相与。例:例:若(若(AL)=43 3H AND AL,0F FH;(AL)=03H,(AL)

13、(AL)0303不变不变不变不变;;(AL)(AL)4747=00H,=00H,屏蔽高屏蔽高屏蔽高屏蔽高4 4位位位位。2.移位指令移位指令SHL oprd,1CLSAL oprd,1CLSHR oprd,1CLSAR oprd,1CL0CF0CFCF0CF执行操作执行操作指令格式指令格式左移部分逻辑移位与算术移位3.循环移位指令循环移位指令指令格式指令格式执行操作执行操作CFCFCFCFROL oprd,1CLROR oprd,1CLRCL oprd,1CLRCR oprd,1CL循环移位分带进位与不带进位两种共同点:共同点:所有移位指令都可以作所有移位指令都可以作B/W操作。操作。指令中的

14、指令中的 destdest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。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时,移位次数需由时,移位次

15、数需由CL给出给出 RCR AX,5 SHL BL,ALl 目的操作数类型决定操作类型目的操作数类型决定操作类型SAL BL,CL 字节操作字节操作ROL BX,CL 字操作字操作当移位次数当移位次数l oprd可以是可以是reg/meml 可进行字节或字操作可进行字节或字操作循环移位指令循环移位指令循环移位指令循环移位指令(Rotate)与移位指令与移位指令与移位指令与移位指令(Shift)不同点不同点不同点不同点:移位指令执行后,移出的位可能丢失;移位指令执行后,移出的位可能丢失;循环移位指令移循环移位指令移位后,操作数中原来各数位的信息不会丢失,这是移动了位位后,操作数中原来各数位的信息

16、不会丢失,这是移动了位置,必要时可以恢复。置,必要时可以恢复。循环移位指令可以对操作数进行测试。循环移位指令可以对操作数进行测试。例:测试例:测试(AL)5=?0MOV CL,3ROL AL,CLROL AL,CLJNC ZEROZERO:利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元 组合起来一起移位组合起来一起移位组合起来一起移位组合起来一起移位。例:例:将将DX、AX组合起来构成组合起来构成32位寄存器向左移一位。位寄存器向左移一位。如下图所示:如下图

17、所示:程序:程序:SHL AX,1 RCL DX,132位寄存器向左移一位位寄存器向左移一位四、串操作指令(四、串操作指令(String manipulation)“串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。串操作串操作串操作串操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作。串操作指令是串操作指令是8088实现内存之间数据传送的一组指令实现内存之间数据传送的一组指令 8088有有5种基本操作:种基本操作:1、MOVS(Move string)串传送指令串传送指令 2、C

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

19、段地址。每次操作对每次操作对SI、DI 调整:调整:DF=1DF=1,DIDI、SISI自动自动自动自动-1 (-1 (字节)或字节)或字节)或字节)或-2-2(字);(字);(字);(字);DF=0DF=0,DIDI、SISI自动自动自动自动+1+1(字节)或(字节)或(字节)或(字节)或+2+2(字)。(字)。(字)。(字)。与上述指令基本配合使用前缀有:与上述指令基本配合使用前缀有:REPREP(Repeat)重复。重复。重复。重复。REPE/REPZREPE/REPZ(Repeat while equal/zero)相等相等相等相等/为零则重复。为零则重复。为零则重复。为零则重复。RE

20、PNE/REPNZREPNE/REPNZ(Repeat while not equal/not zero)不相等不相等不相等不相等/不为零则重复不为零则重复不为零则重复不为零则重复。下面分二种情况来讨论:下面分二种情况来讨论:(一一)与与REP相配合工作的相配合工作的MOVS、STOS指令指令 REP 重复串操作直到(重复串操作直到(CX)=0为止为止LODS指令一般不直接与指令一般不直接与REP联合使用,但其操作与联合使用,但其操作与STOS相关,因而放在这里。相关,因而放在这里。(二二)与与REPE/REPZ和和REPNE/REPNZ联合工作的联合工作的CMPS和和SCAS指指令令 REP

21、E/REPZ 当相等当相等/为零时重复串操作为零时重复串操作 REPNE/REPNZ 当不相等当不相等/不为零时重复串操作不为零时重复串操作(一一一一)与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS指令指令指令指令 REP REP 重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(CXCX)=0=0为止为止为止为止 格式:格式:REP String Primitive 串指令串指令 String Primitive 可为:可为:MOVS、STOS。1.MOVS(Move String)串传送串传送2.LODS(Load fr

22、om String)读串指令读串指令3.STOS(Store into String)写串指令写串指令 REP REP 重复串操作执行过程重复串操作执行过程重复串操作执行过程重复串操作执行过程:(1)当当(CX)=0,结束结束REP,执行执行REP后的下一条指令。后的下一条指令。(2)当当(CX)0,(CX)(CX)-1,(3)执行执行REP后的串指令,后的串指令,(4)重复重复(1)(3)。)。REP 执行流程图执行流程图1.1.MOVSMOVS(Move stringMove string)串传送串传送串传送串传送2.2.串传送有串传送有串传送有串传送有3 3种格式:种格式:种格式:种格式

23、:(1)MOVS dest,src;(;(ES):():(DI)(DS):):(SI)(2)MOVSB(字节)字节);(SI)(SI)1,(,(DI)(DI)1(3)MOVSW(字);(字);(SI)(SI)2,(,(DI)(DI)2 当方向标志当方向标志当方向标志当方向标志 CLD ,DF=0CLD ,DF=0时时时时 用用用用“+”+”STD,DF=1 STD,DF=1时时时时 用用用用“-”-”该指令不影响条件码该指令不影响条件码。*如:如:MOVS ES:BYTE PTR DI,DS:SI*MOVMOV单指令不能完成单指令不能完成 存储单元之间的数据传送存储单元之间的数据传送存储单元之

24、间的数据传送存储单元之间的数据传送;MOVSMOVS指令就是为解决指令就是为解决指令就是为解决指令就是为解决 存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。例:将内存的数据段中以例:将内存的数据段中以AREA1为首地址的为首地址的100个数据,传个数据,传送到附加段中的送到附加段中的AREA2为首地址的区域。为首地址的区域。用用MOVS串操作指令编程:串操作指令编程:MOV AX,SEG AREA1MOV DS,AX MOV AX,SEG AREA2MOV ES,AX MOV SIMOV SI,OFFSET AREA1O

25、FFSET AREA1 MOV DIMOV DI,OFFSET AREA2OFFSET AREA2 MOV CXMOV CX,100100 CLDCLD;DF=0,增址传送增址传送 REP MOVS MOVS ESES:BYTE PTRDI,DSBYTE PTRDI,DS:SISI应用应用应用应用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,100LOOP1:MOV AL,SI

26、;(AL)(DS):():(SI)MOV ES:DI,AL ;(;(ES):():(DI)(AL)INC SI INC DI DEC CX JNE LOOP1归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1)数据段中源串首地址(如反向传送到末地址)存入SI寄存器中。(2)附加段中目的串首地址(或反向传送末地址)存入存入存入存入DIDI寄存器中寄存器中寄存器中寄存器中。(3)数据串长度存入数据串长度存入数据串长度存入数据串长度存入CXCX寄存器寄存器寄存器寄存器。(4)建立方向标志建立方向标志建立方向标志建立方向标志 建立方向标志介绍两条指令:建立

27、方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令:CLD(clear direction flag)功能:功能:DF=0DF=0,执行串处理指令时执行串处理指令时 可以使地址可以使地址自动自动自动自动+1+1或或或或+2+2。STD(set direction flag)功能:功能:DF=1DF=1,执行串处理指令时可以使地址执行串处理指令时可以使地址自动自动自动自动-1-1或或或或 -2-2。2.LODS(Load from string)读串指令读串指令有读串指令有读串指令有读串指令有3 3种格式:种格式:种格式:种格式:(1)LODS src;(字节)字节)(AL

28、)(DS):(SI),(SI)(SI)1(2)(字(字)(AX)(DS):(SI),(SI)(SI)2(2)LODS B(字节)字节);(AL)(DS):(SI),(SI)(SI)1(3)LODS W(字)字);(AX)(DS):(SI),(SI)(SI)2(4)功能:该指令把由功能:该指令把由(SISI)指定的数据段中某单元内容指定的数据段中某单元内容指定的数据段中某单元内容指定的数据段中某单元内容 (AL)(AL)(5)(5)或或或或 (AX)(AX)中中中中。DF=0,(,(SI)(SI)+1或或+2DF=1,(,(SI)(SI)-1或或-2LODSLODS应用注意:应用注意:应用注意:

29、应用注意:(1)指令允许用段跨越前缀来指定非数据段的存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2)该指令不影响条件码。该指令不影响条件码。(3)一般说来,一般说来,它不与它不与REP联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。(AL)中只能保持最后一个元素。中只能保持最后一个元素。有时有时缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令。适用于在一个循环中,用基本串操作指令构成复杂串操作适用于在一个循环中,用基

30、本串操作指令构成复杂串操作时很有用。时很有用。3 STOS3 STOS(Store into stringStore into string)存入串指令存入串指令存入串指令存入串指令将将将将(AL)(AL)或(或(或(或(AX)AX)(ES):(DI)(ES):(DI),(,(,(,(DI)1DI)1或或或或22(DI)(DI)存入串指令有存入串指令有存入串指令有存入串指令有3 3种格式:种格式:种格式:种格式:(1)STOS dest;(字节)字节)(ES):(DI)(AL),(DI)(DI)1(2)(字(字)(ES):(DI)(AX),(DI)(DI)2(3)(2)STOS B(字节)字节

31、);(ES):(DI)(AL),(DI)(DI)1(4)(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学习学习LODS,STOS指令应用指令应用例:内存中有一个首地址为例:内存中有一个首地址为

32、BLOCK补码表示的有符号数的数据块补码表示的有符号数的数据块补码表示的有符号数的数据块补码表示的有符号数的数据块。要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区:存放正数的缓冲区首址为存放正数的缓冲区首址为PUOS-DATA,存放负数的缓冲区首址为存放负数的缓冲区首址为MINUS-DATA。设:设:源数据块用源数据块用SI寻址,寻址,正数的目的区用正数的目的区用DI寻址,寻址,负数的目的区用负数的目的区用BX寻址。寻址。循环次数循环次数 (CX)。传送过程:传送过程:传送过程:传送过程:

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

34、UNT CLDCLDGOON:LODSLODS TEST AL,80H JNZ MINS ;若非;若非0,为负数转,为负数转MINS STOS BSTOS B ;正数正数,(,(DI)(AL),(),(DI)(DI)+1JMP AGAINMINS:XCHG BX,DI STOSBSTOSB ;负数负数,(,(DI)(AL),(),(DI)(DI)+1XCHG BX,DI AGAIN:DEC CX JNZ,GOON HLT(二二)与与REPE/REPZ和和REPNE/REPNZ联合工作的联合工作的CMPS和和SCAS指指令令 REPE/REPZ 当相等当相等/为零时重复串操作为零时重复串操作 格

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

36、当当ZF1,则结束则结束REPZ 执行执行REPZ下一条指令。下一条指令。注意:注意:注意:注意:(CX)减减1操作不影响标志操作不影响标志ZF标志由串操作决定标志由串操作决定当当(CX)=0或或ZF=0时退出循环时退出循环REPZ执行流程执行流程 REPNE/REPNZ REPNE/REPNZ 当不相等当不相等当不相等当不相等/不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作格式:格式:REPNE(或(或REPNZ)string primitive 当不相等重复前缀REPNZstring primitiveString primitive可为可为 :CM PS,SCA

37、SCM PS,SCAS1、CM PS(Compare string )串比较指令串比较指令 2、SCAS (Scan string )串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:(1)当当(CX)=0,结束结束REPNZ,(2)执行执行REPNZ下一条指令。下一条指令。(2)当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPNZ后的串指令。后的串指令。(3)当当ZF=0,返回返回(1);当当ZF0,则结束则结束REPNZ,(4)执行执行REPNZ下一条指令。下一条指令。注意:注意:(CX)减1操作不影响标志 ZF标志由串操作决定 当(CX)=0或ZF=1时退出循环R

38、EPNZ执行流程执行流程1 1、CMPSCMPS(Compare string )Compare string )串比较指令串比较指令串比较指令串比较指令 (SI)作为源串地址,(作为源串地址,(DI)目的串地址目的串地址串比较指令串比较指令串比较指令串比较指令有有有有3 3种格式:种格式:种格式:种格式:(1)CMPS dest,src;(ES):(DI)-(DS):(SI),结果不存,结果不存,结果不存,结果不存,置标志置标志置标志置标志(2)CMPS B(字节)字节);(SI)(SI)1,(DI)(DI)1(3)CMPS W(字);字);(SI)(SI)2,(DI)(DI)2执行操作:执

39、行操作:(ES):(DI)-(DS):(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI)(SI)1,(DI)(DI)1字操作:字操作:(SI)(SI)2,(DI)(DI)2注意:注意:注意:注意:两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它操作规定与其它操作规定与其它操作规定与其它操作规定与MOVSMOVS同。同。同。同。学习学习REPZ CMPSB指令指令例:利用例:利用CMPS指令对指令对STRING1和和STRING2二个字符串进行二个字符串进行 比较,比较结果

40、相同在比较,比较结果相同在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 OUTPTOUTPT:MOV RESULTMOV RESULT,ALAL HLT HLT2 2、SCASSCAS (Scan

41、string )串扫描指令,搜索指令串扫描指令,搜索指令串扫描指令,搜索指令串扫描指令,搜索指令 (DI)字符串起始地址,(AL)或(AX)关键字 串扫描指令有3种格式:格式:格式:SCAS dest SCASB(字节);(字节);(AL)-(ES):():(DI),(),(DI)(DI)1 SCASW(字);(字);(AX)-(ES):():(DI),(),(DI)(DI)2注意:注意:注意:注意:(AL)或(或(AX)-目的串目的串两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它特性与其它特性与MOVS同。同。REP NE SCASB指令应用。例:要搜索的关键字

42、 放在(AL)或(AX)中,搜索某一数据块或字符串中有无关 键字,若有,且记录关键字地址;若判断结果为0转出,表示找到关键字;若计数器为0,表示没有要搜索的关键字。MOV DI,0FFSET BLOCK;设置数据块地址指针 MOV CX,COUNT ;设置数据块长度CLD MOV AL,CHAR ;关键字送入AL或AXREP NE SCASB ;(CX)0,Z=0 继续SCASB JZ FOUND ;Z1,结果为,结果为0,表示比较相等,找到关键字,表示比较相等,找到关键字 JMP DONE ;此处是没有找到必须完成的工作。;此处是没有找到必须完成的工作。HLT应用举例:例:一个数据块由大小写

43、英文字母、数字、其他符号组成,用CR(ASCII码0DH)结束。数据块首地址为BLOCK1。将其传送到BLOCK2为首地址的内存区,并将英文中小写英文字母(az)转换成大写英文字母(AZ),其余不变。分析:大小写英文字母中相应ASCII码的关系:az相应ASCII码为:61H7AHAZ相应ASCII码为:41H5AH英文中小写英文字母(az)转换成大写英文字母(AZ):只要将小写的ASCII码减去20H即可。程序和流程图如下:程序程序:LEA SI,BLOCK1LEA DI,BLOCK2CLDNEXT:LODSBCMP AL,0DH,0DHJZ DONECMP AL,61H61HJC OKCM

44、P AL,7BH7BHJNC OKSUB AL,20HSUB AL,20HOK:STOSBSTOSBJMP NEXTDONE:HLT流程图流程图小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针指令指令重复重复前缀前缀操作数操作数地址指针寄存器地址指针寄存器MOVSREP源,目标源,目标(DS):(SI),(ES):(DI)CMPSREPE/REPNE源,目标源,目标(DS):(SI),(ES):(DI)SCASREPE/REPNE目标目标(ES):(DI)LODS无无源源(DS):(SI)STOSREP目标目标(ES):(DI)作业:作业:1.继续上次作业继续上次作业 2.内存中有一个首地址为内存中有一个首地址为BLOCK单字节补码表示的单字节补码表示的有符号数的数据块。有符号数的数据块。要求将正、负数分开,分别存于二个要求将正、负数分开,分别存于二个缓冲区缓冲区:存放正数的缓冲区首址为存放正数的缓冲区首址为PUOS-DATA,存放负数的缓冲区首址为存放负数的缓冲区首址为MINUS-DATA。预习内容:复习控制转移指令和处理器控制指令预习内容:复习控制转移指令和处理器控制指令

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 教学课件 > PPT综合课件

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922