大家好,欢迎来到IT知识分享网。
目录
指令包括:MOVS,LODS,STOS,CMPS,SCAS,REP
串的概念
串是连续存放再内存中的字节块或字块。每个串有一个起始地址和长度, 待操作的数据串称为源串,目的地址称为目标串
串指令操作的特点
4.数据块长度值有CX指定
串传送指令:MOVS
作用:把字节/子操作数从主存的源地址传送至目的地址
;使用格式,指令包括MOVSB,MOVSW movsb ;字节串传送 ES:[DI]<-DS:[SI] ;DF==0 ,SI<-SI+1,DI<-DI+1, ;DF==1 ,SI<-SI-1,DI<-DI-1 movsw ;字串传送 ES:[DI]<-DS:[SI] ;DF==0 ,SI<-SI+2,DI<-DI+2 ;DF==1 ,SI<-SI-2,DI<-DI-2
egl.
mov si,offset source ;获取源偏移地址 mov di,offset destination ;获取目的偏移地址 mov cx,100 ;cx<-传送次数 cld ;置DC=0,地址增加 again:movsb ;传送一个字节 dec cx ;传送次数减1 jnz again ;判断传送次数cx是否为0,不为0则到 again位置执行指令,否则结束
在使用串操作指令前,需要提前将DS,ES,SI,DI, CX, DF设置好
串存储指令STOS
作用:把AL或AX的数据传送至目的地址
;使用格式,指令包括 STOSB,STOSW STOSB ;字节串存储:ES:[DI]<-AL ;DI<-DI+1 STOSW ;字串存储: ES:[DI]<-AX ;DI<-DI+2
egl.
mov ax,0 mov di,0 mov cx,8000h ;cx<-传送次数(32x1024) cld ;DF=0,地址增加 again: stosw ;传送一个字 dec cx ;传送次数减1 jnz again ; 传送次数cx是否为0
串读取指令LODS
作用:将字节/字从数据段中读取出来保存在AL或者AX中
;使用格式,指令包括LODSB,LODSW LODSB ;字节串存储:AL<-DS:[SI] ;SI<-SI+-1 LODSW ;字串存储:AX<-DS:[SI] ;SI<-SI+-2
mov si , offset block mov di , offset dplus mov bx , offset dminus mov ax , ds mov es , ax ;数据都在一个段中,所以设置 es = ds mov cx , count ; cx <﹣字节数 cld go _ on : lodsb ;从 block 取出一个数据 test al ,80h ;检测符号位,判断是正是负 jnz minus ;符号位为1,是负数,转向 minus stosb ;符号位为0,是正数,存入 dplus jmp again ;程序转移到 again 处继续执行 jnz go _ on ;完成正负数据分离
串比较指令CMPS
作用: 将主存中的源操作数减去目的操作数,以便设置标志,进而比较两操作数之间的关系
;使用格式,指令包括 CMPSB,CMPSW CMPSB ;字节串比较:DS:[SI]-ES:[DI] ;SI<-SI+-1,DI<-DI+-1 CMPSW ;字串比较 DS:[SI]-ES:[DI] ;SI<-SI+-2,DI<-DI+-2
串扫描指令SCAS
;使用格式,指令包括SCASB,SCASW SCASB ;字节串比较 AL-ES:[DI] ;DI<-DI+-1 SCASW ;字串比较 AX-ES:[DI] ;DI<-DI+-2
egl.
mov di,offset string mov al,20h ;空格对应的ASCII码为20 mov cx,count cld again scasb ;搜索 jz found ;为0(ZF=1),发现空格 dec cx ;不是空格 jnz again ;搜索下一个字符 found: .... ;不含空格,则继续执行
重复前缀指令REP
重复前缀REP可以加到串传送操作指令。REP前缀是每次执行串指令后CX-1,CX-1后,重复执行串指令,知道CX值为0时,指令才终止。
;使用示例 REP,REPZ,REPNZ,REPE,REPNE rep movsx ;无条件重复直到cx==0 repz cmpsx ;无条件重复直到cx==0 / ZF==0 repnz cmpsx ;无条件重复直到cx==0 /zf==1 repe cmpsx ;不断比较,直到cx==0 / zf==0 repne cmpsx ;不断比较,直到cx==0 / zf==1
egl.
mov si,offset source mov di,offset destination mov cx,100 ;cx<-传送次数 cld rep movsb ;____________$$$_____________ mov si,offset string1 mov di,offset string2 mov cx,count cld repz cmpsb ;重复比较前两个字符 jnz unmat ;字符串不等,转移到unmat mov al,0 ;字符串相等,设置00h jmp output ;跳转到output unamt: mov al,0ffh ;设置ffh,被jnz跳转到 output: mov result,al ;输出结果标记,被jmp跳转到
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110280.html