当前位置: 首页 > news >正文

串操作指令详解 MOVS,LODS,STOS,CMPS,SCAS,REP

指令包括:MOVS,LODS,STOS,CMPS,SCAS,REP
串的概念:串是连续存放再内存中的字节块或字块。每个串有一个起始地址和长度, 待操作的数据串称为源串,目的地址称为目标串

目录

串传送指令:MOVS
串存储指令STOS
串读取指令LODS
串比较指令CMPS
串扫描指令SCAS
重复前缀指令REP

串指令操作的特点:
1.源操作数用寄存器SI寻址,默认的数据段DS
中,但允许段超越:DS:[SI]
2.目的操作数用寄存器DI寻址,默认在附加段
ES中,不允许段超越:ES:[DI]
3.每执行一次串操作指令,SI和DI将自动修
改:±1(对于字节串)或±2(对于字串)

执行指令CLD后,DF=0,地址指针增加1或2
执行指令STD后,DF=1,地址指针减1或2

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    ;传送次数减1jnz    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,0mov di,0    mov cx,8000h    ;cx<-传送次数(80x1024)    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

串比较指令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 stringmov al,20h    ;空格对应的ASCII码为20mov 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    ;跳转到outputunamt: mov al,0ffh    ;设置ffh,被jnz跳转到
output: mov result,al ;输出结果标记,被jmp跳转到
http://www.lryc.cn/news/44802.html

相关文章:

  • Java实现判断素数
  • PHP初级教程------------------(2)
  • 【SQL开发实战技巧】系列(三十五):数仓报表场景☞根据条件返回不同列的数据以及Left /Full Join注意事项
  • springBoot自动配置过程介绍
  • PostgreSQL最后的救命稻草 — pg_resetwal
  • 彻底关闭Windows更新
  • Java正则表达式语法
  • 【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常
  • Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • 从redis到epoll到mmap
  • STM32CubeMX快速构造工程模板(一)
  • Java Web中的ServletContext对象
  • 回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测
  • 在小公司工作3年,从事软件测试5年了,才发现自己还是处于“初级“水平,是不是该放弃....
  • 基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
  • Book:实战Java高并发程序设计(第二版)
  • LeetCode 831. Masking Personal Information【字符串,正则表达式】中等
  • 递增三元组
  • java源码阅读 - TreeSet
  • 写毕业论文经验贴
  • 2.7 进程退出、孤儿进程、僵尸进程+2.8 wait函数+2.9 waitpid函数
  • 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店
  • 一个完整的渗透学习路线是怎样的?如何成为安全渗透工程师?
  • 刷完这60个标准库模块,成为Python骨灰级玩家
  • EasyExcel的简单使用(easyExcel和poi)
  • 命名空间 namespace
  • 我能“C”——初阶指针(上)
  • Android高级工程师工资为何让人艳羡不已
  • 什么猫猫最受欢迎?Python采集猫咪交易数据
  • 使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问