汇编语言讲解第6章 串操作.ppt
文本预览下载声明
第6章 串操作 课本P.59-63 课本P.203-208 串操作指令 “串”:在存储器中连续排列的一组数据,称为数据串;对数据串进行操作的指令称为串操作指令。 1. 串传送指令 2. 串存储指令 3. 串读取指令 4. 串比较指令 5. 串扫描指令 6. 重复前缀指令 串操作(1)传送 1.串传送指令 MOVSB;字节传送:ES:[DI]←DS:[SI] ;SI ←SI±1,DI ←DI±1 MOVSW;字传送:ES:[DI]←DS:[SI] ;SI ←SI±2,DI ←DI±2 注 释: 1)源数据串可以段跨越,目的串不可。 2)DF=0,地址指针+1或+2,DF=1,指针-1或-2。 3)一般不使用格式 MOVS 目的串名,源串名。 4)不影响标志。 串操作(2) 例1:将数据段source指示的100个字节传送到本段dest指示的区域。 mov ax,ds mov es,ax;使ES和DS指向同一个段 mov si,offset source mov di,offset dest mov cx,100 cld Loopm:movsb dec cx jnz loopm 串操作(3) 传送方向: 1)可正向,也可反向。 2)只能正向。 3)只能反向(如右图)。 串操作(4)存串 2.串存储指令 STOSB;ES:[DI] ←AL ,DI ←DI ±1 STOSW;ES:[DI] ←AX ,DI ←DI ±2 注释:1)经常用来初始化一段内存区域。 2)串为目的操作数。 3)不影响标志。 例2:将附加段64KB全部清为0。 mov ax,0 mov di,0 mov cx,8000h ;32K cld Lop:stosw dec cx jnz lop 串操作(5)读串、比较 3.串读取指令 LODSB; AL← DS:[SI] ,SI ←SI ±1 LODSW; AX← DS:[SI] ,SI ←SI ±2 注释:数据串为源操作数;不影响标志。 4.串比较指令 CMPSB;DS:[SI]-ES:[DI],SI←SI±1,DI←DI±1 CMPSW;DS:[SI]-ES:[DI],SI←SI±2,DI←DI±2 注释:1)比较两个数据串是否相等。 2)按减法设置标志。 5.串扫描指令 SCASB; AL-ES:[DI] ,DI ←DI ±1 SCASW; AX-ES:[DI] ,DI ←DI ±2 注释:1)从数据串中搜索一个数据,被搜索的数据称为关键字,放入AL或AX寄存器。 2)按减法规律设置标志。 6.重复前缀指令 (不能单独使用,只能附加在串操作指令前面,使串操作重复执行) 三个重复前缀,分为两类: 1)REP 2)REPZ/REPE 和REPNZ/REPNE 串操作(7)REP 1)REP; 与MOVS、STOS、LODS配合使用。 (REP MOVSB/REP STOSW) 指令操作: 如CX=0,退出串操作,CX≠0,做下一步 CX←CX-1 执行后跟的串操作指令 回到第一步 重复次数由CX控制 串操作(8)REPZ/REPNZ 2)REPZ/REPE,REPNZ/REPNE 两条都与CMPS、SCAS配合使用(REPZ/REPNZ CMPSB) 串操作(9)前缀注释 注 释: 1)REPZ指令中的“Z”表示的是“ZF=1”,而且“ZF=1”是重复串操作的必要条件;REPNZ中的“NZ”表示的是“ZF=0”,而且“ZF=0”是重复串操作的必要条件。 2)REP指令使串操作重复CX规定的次数,REPZ、REPNZ使串操作的重复可能提前结束(观察ZF)。 3)注意重复前缀和循环控制指令的差别: LOOP先做CX减1,后判断;REP先判断,后减1。 串操作(10)例题 例2: 比较字符串STR1和STR2,字符串长度为20,如果相等AL置0,不相等AL置FFH MOV SI, OFFSET STR1 MOV DI, OFFSET STR2 MOV CX, 20 CLD AGN: REPZ CM
显示全部