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

  介绍完这些基础指令,后面就讲到汇编JCC指令了,我觉得介绍指令不应该只是简简单单的就介绍怎么用,汇编它其实也是高级语言,相信你读完我前面的文章就可以看到,我介绍PUSH、POP那节,都是用其他指令去执行PUSH、POP的过程,汇编它也由基础指令,高级指令构成,基础指令可以还原高级指令,加深对指令的理解,使得在分析程序时不再那么难受,还要想一想这个是什么过程,多练习练习,使其成为一种自然反射,久而久之就成一个熟悉过程了。

ADC指令:带进位加法

  格式:ADC  R/M,R/M/IMM   两边不能同时为内存  宽度要一样(R为register,M为memory,IMM为immediate operand)

  ADC AL,CL

  ADC BYTE PTR DS:[18FF8C],2

  ADC BYTE PTR DS:[18FF8C],AL

ADC其实与ADD差别不大,只不过ADC它是带进位的加法,我们来看OD中操作的过程,我们先将C位,置位1,添加左上角的代码

按F8执行代码至下图所示,EAX里的值为1,ECX里的值为2

我们再次执行ADC AL,CL这行代码,F8往下走

我们执行ADC BYTE PTR DS:[18FF8C],2

按F8执行完上述代码如图所示

我们发现相加2之后   0x0018FF8C里的值从75F2338A变为75F2338D

我们再来试试与寄存器相加的情况

  MOV AL,1

  ADC BYTE PTR DS:[18FF8C],AL

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

按F8执行代码如下图所示

0x18FF8C里的值加上AL的值之后从0x75F2338D变为0x75F2338F

SBB指令:带借位减法

格式:SBB  R/M,R/M   两边不能同时为内存  宽度要一样

  SBB AL,CL

   SBB BYTE PTR DS:[12FFC4],2

   SBB BYTE PTR DS:[12FFC4],AL

执行完SBB AL,CL指令后如下所示

发现EAX里的值为0x01

  SBB BYTE PTR DS:[18FF8C],2

  SBB BYTE PTR DS:[18FF8C],AL

这两行代码请读者自行尝试,笔者这里就不贴图了,介绍后面的指令

XCHG指令:交换数据

格式:XCHG  R/M,R/M/IMM   两边不能同时为内存  宽度要一样

   XCHG AL,CL

   XCHG DWORD PTR DS:[12FFC4],EAX

  XCHG BYTE PTR DS:[12FFC4],AL

执行完代码后如下所示

MOVS指令:移动数据  内存-内存

movs指令是汇编少有的两边都可以是memory的指令,MOVS在开发中通常极有可能是一串字符串的复制

  BYTE/WORD/DWORD

  MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]        简写为:MOVSB

这行代码的意思是从ESI里头的值代表的内存编号中取一个字节的值放到EDI里的值所代表的的内存编号中,其指令可以简写为MOVSB,后面的word与dword相同

  MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]          简写为:MOVSW

  MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]          简写为:MOVSD

我们已4字节的DWORD为例:如下图所示

我们去内存区域中随便找一块地址,这里我们将0x18FFB0给到EDI,0x18FFA0给到ESI,然后在指令输入窗口输入MOVSD就行,OD就会自动转换为箭头中所指的代码

按F8代码向下执行两步

再执行一步

仔细观察红框中所标记的,我们发现,执行完代码过后,ESI所代表的地址编号里的值给到了EDI所代码的地址编号中去了,然后ESI,EDI的值加了4,,我们再来看看MOVSW,两个字节的情况,看看内存区域与寄存器区域中ESI,EDI的值得变化,这次我们重新找块内存编号

MOV ESI,0x18FFAC

MOV EDI,0x18FFC4

MOVSW(OD会自动转换为MOVS WORD PTR ES:[EDI], WORD PTR DS:[ESI])

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

执行两步代码如下所示

再执行最后一步代码如下所示

我们可以看到内存区域中0x18FFAC中的低四位写入到了0x18FFC4中的低4位,ESI与EDI中的值分别加2。

我们前面博文中讲过EFLAG寄存器中的6个,还剩下3个没讲,那3个之前就说过我们后面有用到会再列博文来讲,今天我们MOVS指令就会用到其中一个,学汇编啊,买书看的效果不好就是这个,书就是归纳总结的结晶,前面呱啦呱啦总结一大堆,你没看个明白,到后面单独章节的时候就有可能忘记了,我们学汇编,用到什么就学什么,学透用透,这样才能把整体知识融会贯通

我们改变EFLAG中的D位的值,将其改变为1,再来演示一下MOVSD(MOVSW,MOVSB建议读者自行测试一下,是一样的),我们前面演示的MOVSD与MOVSW呢,EFLAG中的D位的值是0。

  MOV ESI,0x18FF98

  MOV EDI,0x18FFB4

  MOVSD

按F8向下执行如下图所示

我们可以看到之前ESI所代表的的内存编号0x18FF98中的值0x77529F72给到了之前EDI所代表的内存编号0x18FFB4中,ESI与EDI的值在D位为1的情况下,减去了4字节(读者有兴趣可以试试MOVSW,MOVSB)

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

汇编指令之ADC、SBB、XCHG、MOVS指令的更多相关文章

  1. 汇编实现: C库常见函数,串操作指令作用

    目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void _ ...

  2. ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

    要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和 ...

  3. 王爽汇编第五章,[bx]和loop指令

    目录 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 例子: 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 [bx]之前我们介绍寄存器的时候,已经很详细的说明过了,b ...

  4. 汇编 sub减法指令 比较指令CMP JZ条件跳转指令

    二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格 ...

  5. WebGL 在 OpenGL ES 指令 iOS 在 C 分歧版指令分析

    WebGL 中 OpenGL ES 指令与 iOS 中 C 版指令的差异简析 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途 ...

  6. AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html

    今天用angular写table的时候,遇到了一个问题.在ng-repeat中,含有动态的html,而这些html中含有自定义指令. 因为希望实现一个能够复用的table,所以定义了一个指令mySta ...

  7. angular指令(二)--内置指令

    一.基础ng 属性指令:  ng-href ng-src ng-disabled ng-checked ng-readonly ng-selected ng-class ng-styl ...

  8. 汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)

    1.MSR和MRS指令介绍 MRS 指令:  对状态寄存器CPSR和SPSR进行读操作.通过读CPSR可以获得当前处理器的工作状态.读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有 ...

  9. 汇编,寄存器,内存,mov指令

    一.代码 和 汇编 和 二进制之间的关系 二.复习一下计算机组成原理的知识 1.寄存器 计算机中有三个存储 32位cpu提供的寄存器有三种类型8位 16位 32位 64位的只是32位的扩展 并且程序大 ...

随机推荐

  1. python pyinstaller 模块的基本使用

    作用 PyInstaller是一个压缩python文件成为可执行程序的一个软件.它会扫描你所有的Python文档,并分析所有代码从而找出所有你的代码运行所需的模块.然后,PyInstaller会将所有 ...

  2. 第十二章 WEB渗透

    Web技术发展 • 静态WEB• 动态WEB • 应用程序 • 数据库 • 每个人看到的内容不同 • 根据用户输入返回不同结果 WEB攻击面• Network• OS• WEB Server• App ...

  3. 六、CSS 选择器:BeautifulSoup4

    和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会局部遍历,而Beautiful Soup 是基 ...

  4. Day_02

    1.无参数无返回值函数的使用 package main import "fmt" //无参无返回值函数的定义 func MyFunc() { a := 666 fmt.Printl ...

  5. Vue生命周期钩子---3

    vue生命周期流程图:4张图 : 生命周期的解析和应用: Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue ...

  6. 多线程时,请求执行不是按顺序的,可添加Critical Section Controller(临界部分控制器),执行顺序是固定的,但执行一段时间后,该逻辑器下的请求不再循环,无解ing

  7. Hive 读书札记

    把数据从一个关系型数据库直接导入 Hive,使用 Sqoop.

  8. CF358D Dima and Hares

    CF358D Dima and Hares 洛谷评测传送门 题目描述 Dima liked the present he got from Inna very much. He liked the p ...

  9. [日常] 用vim的时候发现的不是很小的bug...

    前一天晚上的时候不知道搞啥了...第二天早上起来开 gnome-system-monitor 的时候发现CPU占用好像不太对头 (一直有个核是 \(100\%\)), 转到进程的时候发现使用最高的居然 ...

  10. Paper | Compression artifacts reduction by a deep convolutional network

    目录 1. 故事 2. 方法 3. 实验 这是继SRCNN(超分辨)之后,作者将CNN的战火又烧到了去压缩失真上.我们看看这篇文章有什么至今仍有启发的故事. 贡献: ARCNN. 讨论了low-lev ...