汇编指令之STOS、REP
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。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的更多相关文章
- 常用的汇编指令 movs stos
movsb 把寄存机esi所存的地址的数据以字节复制到edi movsw 把寄存机esi所存的地址的数据以word复制到edi movsd 把寄存机esi所存的地址的数据以dword复制到e ...
- Windows内核 基本汇编指令
1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
- 汇编 指令lodsb,lodsw,lodsd
知识点: 汇编指令 lodsb,lodsw,lodsd 一.汇编指令LODSB //scasb scasw scasd //stosb stosw stosd 1. __asm lodsb //作用 ...
- ARM汇编指令调试方法
学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...
- 学习linux内核时常碰到的汇编指令(1)
转载:http://blog.sina.com.cn/s/blog_4be6adec01007xvg.html 80X86 汇编指令符号大全 +.-.*./∶算术运算符. &∶宏处理操作符. ...
- 常用ARM汇编指令
常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区 作者:xuyuanfan77 [字体:大 中 小] 在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...
- Objdump-查看汇编指令
作用 Objdump可以用来看汇编指令 查看汇编指令 测试文件 编译指令 gcc -g -o objtest 1.8.c objdump -S objtest |more /main 查看结果
- ARM汇编指令(未完待续)
ARM指令自己在看的时候,看完之后就忘了,根本记不住,而且有些ARM汇编指令在平常的时候可能根本就用不到,所以也没必要把所有的ARM指令都去记忆,所以自己就想着不去一遍一遍的复习ARM指令,而是在平常 ...
随机推荐
- Linux文件传输协议2019-7-9
FTP(file transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口,其中端口20(数据端口)用于数据传输,端口21(命令端口)用 ...
- CodeForces - 1257E (思维)
题意 https://vjudge.net/problem/CodeForces-1257E 三个人,每个人有一些数字,组合起来是1~n,每个人可以给另一个人一个拥有的数字,问最小操作数,使得第一个人 ...
- JSON理解(一篇就够了)
可以看看视频讲解,视频几十分钟就结束了 JSON 1.什么是json 其实是一种数据格式的规范,与开发的语言无关,轻量级的数据格式 全称JavaScript Object Notation 2.优点: ...
- 6.2 DataFrame
一.DataFrame概述 在Spark SQL中,DataFrame就是它的数据抽象,对DataFrame进行转换操作. DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅 ...
- python名片 项目
---恢复内容开始--- 综合应用 —— 名片管理系统 目标 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎界面,并显示功能菜单 ...
- Docker 简单发布dotnet core项目 图文版
原文:https://www.cnblogs.com/chuankang/p/9474591.html docker发布dotnet core简单流程 需要结合这个版本看哈 地址:https://ww ...
- 安装Rtools
1.好多工具需要安装Rtools install.packages("installr") install.packages("stringr") ###依赖包 ...
- Python爬取糗事百科示例代码
参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...
- 物联网架构成长之路(40)-Bladex开发框架入门
0. 前言 前一小节,讲了如何入门,这里就简单讲一下如何自定义查询和权限控制配置. 1. 配置多租户 如果要启用该表的多租户功能,需要在application.yml 这里配置. 2. 配置模糊匹配 ...
- Python 文件readlines()方法
原文连接:https://www.runoob.com/python/file-readlines.html readlines()方法用于读取所有行(直到结束符EOF)并返回列表,该列表可以由pyt ...