zoukankan      html  css  js  c++  java
  • 汇编基础教程(二)——常用汇编指令之其他指令

    原文地址:http://www.tinpont.com/knowledge/assembly_instruction_others.html

    -----------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------

    最后一篇关于汇编指令的文章,介绍一下剩余的常用汇编指令。除了之前提到的指令,剩下还有三个指令,分别是nop控制令、call函数调用指令和ret函数返回指令。


    NOP控制令(no operation)


    此指令除了占用1个字节内存空间、消耗1个指令时间外,没有任何作用,通常用于修改汇编指令后的空间对齐。格式如下:
    1
    NOP    // 此指令将不会影响任何东西,占用内存空间大小为一字节



    CALL函数调用指令(call)


    此指令先将下一条指令地址先PUSH到堆栈,然后跳转到目标地址。格式如下:
    1
    CALL dst

    dst可以是寄存器、立即数和地址,此指令相当于PUSH指令与JMP指令的结合,例如:
    1
    2
    3
    0085BD30 CALL 0085BD3A    // 执行后地址0085BD35压入堆栈,ESP寄存器减四
    0085BD35 MOV EAX,1    // 此处被跳过
    0085BD3A MOV EAX,2    // 执行CALL后跳转到此处,最后EAX寄存器值为2



    RET/RETN/RETF函数返回指令(return/return near/return far)


    此指令先POP栈顶一个4字节数,然后跳转到此地址。格式如下:
    1
    RET

    此指令相当于POP指令与JMP指令的结合,例如:
    1
    2
    3
    4
    0085BD44 PUSH 0085BD4F    // 地址压栈
    0085BD49 RETN    // 先POP,再跳转到POP的地址
    0085BD4A MOV EAX,1    // 因为跳转到0x0085BD4F,所以此条指令将被跳过
    0085BD4F MOV EAX,2    // 最后执行此指令,EAX寄存器的值为2



    因为函数相关指令比较重要,所以最后我们再看一段代码熟悉一下:
    1
    2
    3
    4
    5
    6
    0085BD60 CALL 0085BD6C    // 1、执行后PUSH了0x0085BD65并且跳转到0x0085BD6C
    0085BD65 MOV EAX,1    // 4、跳转到此处后,寄存器EAX赋值为1
    0085BD6A JMP SHORT 0085BD72    // 5、代码继续执行到此处,跳转到0x0085BD72
    0085BD6C MOV EAX,2    // 2、寄存器EAX首先赋值为2
    0085BD71 RETN    // 3、执行POP,数据为刚才PUSH的0x0085BD65,跳转到此地址
    0085BD72 MOV EAX,3    // 6、最后代码运行到此处,寄存器EAX赋值为3
    -----------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------

    这一系列教程就收藏到这里,我非常喜欢这个博主的排版~~所以以后就偷偷拿来用了。。。以后学会了,我也自己做一个~

  • 相关阅读:
    C#反射概念以及实例详解【转】
    .NET(C#):使用反射来获取枚举的名称、值和特性【转】
    探求C#.Net中ArrayList与Array的区别 【转】
    C#中IList<T>与List<T>的区别感想【转】
    C# System.Guid.NewGuid() 【转】
    回车键触发按钮事件
    MVC中Json的使用:Controller中Json的处理【转】
    关于优化性能<主要是速度方面>的个人心得 【转】
    ca72a_c++_标准IO库:面向对象的标准库
    ca71a_c++_指向函数的指针_通过指针调用函数txwtech
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314757.html
Copyright © 2011-2022 走看看