版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。23:28:13,23:28:19
作者By-----溺心与沉浮----博客园

STOS指令:讲Al/AX/EAX的值存储到[EDI]指定的内存单元

  STOS BYTE PTR ES:[EDI]       简写为STOSB

  STOS WORD PTR ES:[EDI]           简写为STOSW

  STOS DWORD PTR ES:[EDI]     简写为STOSD

具体是AL/AX/EAX那就要看具体的宽度是多少,STOS指令同样受D位的影响(Direction Flag),当D位为1的时候,EDI的值会减,当D位为0时,EDI的值会加,前面的博文中有讲过,MOVS指令也是受D位影响

之前在往内存地址中写入东西时,都是用的DS:,这里用到EDI时,统一使用ES,段寄存器,还没涉及,暂且就先这样记住

  MOV EAX,12345678

  MOV EDI,18FF8C

  STOS DWORD PTR ES:[EDI]

  STOS WORD PTR ES:[EDI]

  STOS BYTE PTR ES:[EDI]

按下F8,执行STOSD指令,仔细观察EDI的值

可以看到,在执行完STOSD指令后,EAX里的值往EDI所代表的地址编号里头写入后,EDI的值减去了4,再来看看STOSW,STOSB

可以看到,执行完STOSW指令后,EAX里的低16位往EDI所代表的内存编号中的低16位写入后,EDI的值减去了2,由于我们代码是连续执行的,这一步的EDI的值用的是上一步EDI的值减4后的值,也即0x18FF88

再来看看STOSB指令,接着按F8代码往下走

这里可以看到,EDI的值0x18FF86减去一个字节后变为0x18FF85,再将AL里的值写入EDI中

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。23:28:13,23:28:19
作者By-----溺心与沉浮----博客园

我们将Direction Flag的值更改为0,在执行下述代码

  MOV EAX,12345678

   MOV EDI,12FFC4

  STOS BYTE PTR ES:[EDI]

   STOS WORD PTR ES:[EDI]

  STOS DWORD PTR ES:[EDI]

执行第一步,第二步代码后如下:

执行前不要忘记将D位置成0,我添加代码的时候忘记了,执行STOSB的时候更改回来了,接着执行STOSB,仔细观察如下:

通过观察,我们看到EDI的值加1,AL的值被写入到0x18FF70中,注意:只有低8位被写入!!!

执行STOSW

观察得知,EDI的值从0x18FF71加2之后,变为0x18FF73,观察内存区域的0x18FF70,可以看到,0x18FF71,0x18FF72中写入了,56,78两个值

执行STOSD指令

EDI的值从0x18FF73加上4之后变为0x18FF77,如果读者你不懂为什么写入的形式是图中所示的形式,我建议你把内存拆分开来,用一个字节一个字节去看,然后画个图,相信你就明白了,你可以已0x18FF73为开始起点,4字节4字节的自己重新画个图,这时候,后面的内存编号就会是0x18FF77,0x18FF7B,0x18FF7F

REP指令:按计数寄存器 (ECX) 中指定的次数重复执行字符串指令

  REP指令会根据计数寄存器ECX中的值来指定次数,重复执行指令,注意:下面代码里MOV ECX,10,   10所代表的的十六进制的10,是十进制中的16

   MOV ECX,10

   REP MOVSD

   REP STOSD

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。23:28:13,23:28:19
作者By-----溺心与沉浮----博客园

执行前两步代码后如下:

执行REP STOSD

执行完REP STOSD之后,ECX里的值归0了,因为每执行一次,ECX里的值都会减1直至为0,观察图中内存区域,数一下,一共是写入了16次0x12345678,EDI的值也变为了EDI + ECX * 4。

接着看REP MOVSD

执行前两步代码如下

执行REP MOVSD,啊哦,有点尬,还剩3次执行完的时候,我堆栈已经走到底了,,,

我重新打开一遍0D,执行一下REP MOVSD

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。23:28:13,23:28:19
作者By-----溺心与沉浮----博客园

执行REP MOVSD指令

ESI与EDI都增加了ECX * 4,64个字节0x40,大家有兴趣可以将D位更改为1,尝试一下,REP STOSD,REP STOSW,REP STOSB, REP MOVSD,REP MOVSW,REP MOVSB指令

1、用MOVS指令分别移动5个字节、5个字、5个双字

2、用STOS指令分别存储5个字节、5个字、5个双字

3、使用REP指令重写第1、2题

嗯,这些都是本节将的指令相关内容,这三个题,博文中也有写,只不过,最多就写了2次,3次,大家可以用MOVS,STOS多写写,代替REP,等到写吐了,也就理解了REP了,这三题就不写了。

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。23:28:13,23:28:19
作者By-----溺心与沉浮----博客园

汇编指令之STOS、REP的更多相关文章

  1. 常用的汇编指令 movs stos

    movsb   把寄存机esi所存的地址的数据以字节复制到edi movsw  把寄存机esi所存的地址的数据以word复制到edi movsd   把寄存机esi所存的地址的数据以dword复制到e ...

  2. Windows内核 基本汇编指令

    1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...

  3. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  4. 汇编 指令lodsb,lodsw,lodsd

    知识点: 汇编指令 lodsb,lodsw,lodsd 一.汇编指令LODSB //scasb scasw scasd //stosb stosw stosd 1. __asm lodsb //作用 ...

  5. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  6. 学习linux内核时常碰到的汇编指令(1)

     转载:http://blog.sina.com.cn/s/blog_4be6adec01007xvg.html 80X86 汇编指令符号大全 +.-.*./∶算术运算符. &∶宏处理操作符. ...

  7. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  8. Objdump-查看汇编指令

    作用 Objdump可以用来看汇编指令 查看汇编指令 测试文件 编译指令 gcc -g -o objtest 1.8.c objdump -S objtest |more /main 查看结果

  9. ARM汇编指令(未完待续)

    ARM指令自己在看的时候,看完之后就忘了,根本记不住,而且有些ARM汇编指令在平常的时候可能根本就用不到,所以也没必要把所有的ARM指令都去记忆,所以自己就想着不去一遍一遍的复习ARM指令,而是在平常 ...

随机推荐

  1. Linux文件传输协议2019-7-9

    FTP(file transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口,其中端口20(数据端口)用于数据传输,端口21(命令端口)用 ...

  2. CodeForces - 1257E (思维)

    题意 https://vjudge.net/problem/CodeForces-1257E 三个人,每个人有一些数字,组合起来是1~n,每个人可以给另一个人一个拥有的数字,问最小操作数,使得第一个人 ...

  3. JSON理解(一篇就够了)

    可以看看视频讲解,视频几十分钟就结束了 JSON 1.什么是json 其实是一种数据格式的规范,与开发的语言无关,轻量级的数据格式 全称JavaScript Object Notation 2.优点: ...

  4. 6.2 DataFrame

    一.DataFrame概述 在Spark SQL中,DataFrame就是它的数据抽象,对DataFrame进行转换操作. DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅 ...

  5. python名片 项目

    ---恢复内容开始--- 综合应用 —— 名片管理系统 目标 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎界面,并显示功能菜单 ...

  6. Docker 简单发布dotnet core项目 图文版

    原文:https://www.cnblogs.com/chuankang/p/9474591.html docker发布dotnet core简单流程 需要结合这个版本看哈 地址:https://ww ...

  7. 安装Rtools

    1.好多工具需要安装Rtools install.packages("installr") install.packages("stringr") ###依赖包 ...

  8. Python爬取糗事百科示例代码

    参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...

  9. 物联网架构成长之路(40)-Bladex开发框架入门

    0. 前言 前一小节,讲了如何入门,这里就简单讲一下如何自定义查询和权限控制配置. 1. 配置多租户 如果要启用该表的多租户功能,需要在application.yml 这里配置. 2. 配置模糊匹配 ...

  10. Python 文件readlines()方法

    原文连接:https://www.runoob.com/python/file-readlines.html readlines()方法用于读取所有行(直到结束符EOF)并返回列表,该列表可以由pyt ...