网络安全

汇编指令之ADC、SBB、XCHG、MOVS指令

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。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-----溺心与沉浮----博客园

内容来源于网络,如有侵权请联系客服删除

movsw 汇编_汇编指令之ADC、SBB、XCHG、MOVS指令相关推荐

  1. cmp 字节 汇编_汇编 常用指令 cmp jmp call ret

    cmp 指令 功能相当于减法指令 只是不保存结果 不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果 CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 ...

  2. cmp 字节 汇编_汇编 – x86 CMP指令差异

    题 以下两个x86指令之间的(非平凡)差异是什么? 39 /r CMP r/m32,r32 Compare r32 with r/m32 3B /r CMP r32,r/m32 Compare r/m ...

  3. 【汇编】流程转移——标志寄存器(ZF—零标志、PF—奇偶标志、SF—符号标志、CF—进位标志、OF—溢出标志)、adc进位加法指令、sbb借位减法指令、cmp指令、DF标志、REP指令、std、cld

    11.1 标志寄存器 8086CPU中有14个寄存器,在历来文章中已经介绍过大部分,还有一个标志寄存器,在cpu中也担任着重要的位置. 在标志寄存器中是按位来起作用的,也就是说其中每一位的0和1都有着 ...

  4. 汇编语言中xor指令_汇编各类指令用法及含义分析 - 全文

    什么是汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指 ...

  5. mo汇编指令_汇编指令大全

    一.数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器.寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字 ...

  6. mysql 访问寄存器_汇编寄存器(内存访问)基础知识之三---mov指令

    1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1) ...

  7. java 汇编_大话+图说:Java 汇编指令——只为让你懂

    原标题:大话+图说:Java 汇编指令--只为让你懂 前言 随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指 ...

  8. x86汇编_指令集大全_笔记_6

    汇编指令集太多,如果不用就会忘记,所以将intel处理器官方的指令集整理一下. ------------------------------------------ 一.数据传输指令 -------- ...

  9. 汇编jnl_汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    http://pan.baidu.com/s/1gVTSi 跳转指令分三类: 一.无条件跳转: JMP ;无条件跳转 二.根据CX.ECX寄存器的值跳转: JCXZ ;CX 为 0 则跳转 JECXZ ...

  10. Win32汇编_基础

    Win32汇编_基础 包含全部段的源程序结构: .386 .model flat, stdcall Option casemap:none ;<一些include语句> .stack [堆 ...

最新文章

  1. D~信息学/计算机专业操作
  2. Jmeter 在 beanshell 脚本中写日志
  3. 9道最佳解酒方法[转]
  4. PAT B1007 素数对猜想 (20 分)
  5. vaps 程序直接通信
  6. 低秩矩阵完备_多源域和多视角 “秩约束”
  7. Python算术运算符目录
  8. “八戒”马德华自传《悟能》首发《西游记》师徒五人再聚首
  9. 研究生量子计算机专业,量子计算机研究.PDF
  10. liteon460w服务器电源管理系统,【LITEON PS-2112-5L 1200W C6100 C6220 C6220I服务器电源】价格_厂家 - 中国供应商...
  11. 查找大于某个数的最小数
  12. Revit二次开发--为管道添加标注
  13. IIS 端口netstat -ano命令
  14. android气泡样式图片,Android实现三角形气泡效果方式汇总
  15. Intel第十代CPU集成显卡不再支持 Legacy启动 (i5-10400...)
  16. 通俗地解释下密码学中的归约证明
  17. 拷贝pdf中的表格数据
  18. java怎样找出迷宫中所有路径_Java寻找迷宫路径
  19. ad如何设置pcb板子形状_一招教你学会使用AD更改PCB板子尺寸!
  20. 如何对视频进行伪原创处理的方法

热门文章

  1. git如何查看缓存区文件内容_[暂存盘已满怎么解决]git暂存区的理解
  2. kali 安装 google 浏览器
  3. 科技论文写作之时态问题
  4. 报表分析工具有哪些?常见开源报表工具和商用报表工具介绍
  5. 【Linux】网站后台设置及管理
  6. 订单管理_01新增订单信息流程
  7. 如何使用计算机做统计,电脑如何使用Excel表格统计男女生数
  8. ASTC纹理压缩格式(Adaptive Scalable Texture Compression)
  9. 【自学Flutter】20.3 ListView.separated 的使用
  10. 从零开始学习ThingJS之创建/销毁物体