Board logo

标题: [原创] 汇编基础一日一学习11 [打印本页]

作者: 柔肠寸断    时间: 2009-5-27 09:54     标题: 汇编基础一日一学习11

汇编基础一日一学习11
    大家好,今天我们来学习下XCHG(Exchange Instruction)指令。它是交换指令。
   
    交换指令XCHG是两个寄存器,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同。其指令格式如下:

   XCHG OPRD1,OPRD2
   其中的OPRD1为目的操作数,OPRD2为源操作数 .

   注意:XCHG不能交换段寄存器且它是不影响标志位的。

   该指令的功能和MOV指令不同,后者是一个操作数的内容被修改,而前者是两个操作数都会发生改变。寄存器不能是段寄存器,两个操作数也不能同时为内存变量。

XCHG指令,我们在写壳的时候用的比较多点。那么上面我们已经说了 XCHG指令它的格式是和两个操作数或者是内存单元来进行数据交换。那么我们就来实例的讲解下。。


  例如此时eax = 00403020h    ebx = 00102033h
   
   XCHG eax, ebx   
   
此时因为XCHG是两个操作数都发生改变,所以此时eax = 00102033h     ebx = 00403020h

  其实非常好理解的 。。 XCHG还可以使寄存器和内存到单元的数据交换。。 举例

  此时eax = 00403020h ,   00403011h中的数据为 30h 00h 30h 00h  那么执行

  XCHG dword ptr [00403011h], eax

  执行指令后00403011h的内存单元数据为 20h 30h 40h 00h  , eax = 00300030h

  就是这么简单。

  好今天因为有事情,可能要晚点上。


  小作业:

    1.假如此时eax = 00302050h ,  ebx = 00403000h
    xchg ax, bx
    问 此时 ax = ? bx = ?


    2.假如[00403000h]内存单元数据为 00h 20h 30h 40h ,eax = 00304050h
    xchg dword ptr [00403000h], eax
    问 此时 eax = ?   [00403000]内存单元的数据等于多少?

作者: plantseth    时间: 2009-5-30 16:29

ax=3000h bx=2050h
eax=00203040h  [00403000]=00304050h
作者: zclzhao    时间: 2009-8-14 17:39

跟着学汇编的人越来越少了,看来大家的热情已经过去了。
作者: renzhexiang741    时间: 2009-8-20 13:20

看看。。。。。。。。。。。。。
作者: hkhs615    时间: 2009-12-17 16:21

学习.................
作者: hanchaotzjz    时间: 2010-4-21 19:53

新人报到
不会汇编
想学可是....
作者: hanchaotzjz    时间: 2010-4-21 20:01

我也有点懂了
AX  BX是高八位吧
作业明白了
可是[00403000h]内存单元数据为 00h 20h 30h 40h ,eax = 00304050h
这两个数是内在地址呀还是具体的数呀




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2