• Macro和Procedure的比较(汇编中的宏与函数)


    Technorati 标签: 汇编,Macro,Procedure

    一、相同之处

             Macro和Procedure都是一个程序段。

    二、不同之处:

             Macro是由一对符号表示的:%MACRO Label #(#表示这个Macro需要几个参数,有0,1,2…,在使用的时候用%1, %2…代替相应)

                                                    %ENDMACRO(注意是在最后一行单独显示)

             Procedure也是由一对符号表示,CALL和RET,不过CALL是由caller使用的,RET在Procedure中末尾。实际上Procedure是由label和RET标记的。

             Macro只能有一个entry point,而Procedure可以有多个entry point。实际上,Procedure中的每个global labe都可以作为一个entry point。对于local label,可以用大lable和小label连接的方式来使用(比如WriteStr中有.poke,那么在这个procedure之外就可以使用WriteStr.poke来直接访问)。

             Macro在程序中是直接替换的。比如在这个程序中使用了某个Macro,那么在编译的时候,assembler就会到磁盘上找这个Macro的文件,然后在我这个程序汇中直接把引用的部分用实际的Macro替换。这个和C语言中宏的使用是相同的。注意这只是在内存中发生的替换,磁盘中的源文件没有变化。

             而Procedure则不同,它是“hook(Procedure)”和“eyelet(socket,In my program)”的结合。相当于C中的函数调用。

             调用Procedure的时候需要使用CALL Procedure。

             而使用Macro的时候只需要把Macro的名字放上去就可以了,后面跟着相应的参数:GotoXY 1,23

             在Procedure中,local label的标志是以句号开头,如.poke,后面跟冒号。NASM对它的标识是大lable加上小label,比如WriteStr.poke(WriteStr是Procedure名)

             在Macro中,local label的标志是以两个百分号开头,如%%IsLC,后面跟冒号。NASM对它的标识是..@1771.IsLC,1771是一个随机的四位数字,每次运行时由NASM指定,不一定相同。

  • 相关阅读:
    常见协议及默认的端口号
    超级简单的防止表单重复提交
    Spring的IOC和AOP的作用
    通向财富自由之路一
    AngularJS2.0的特性
    Charles设置断点
    JMeter参数化之csv data set config常见的错误
    Jmeter的几种参数化方式
    java中关于String对象的解析
    题目2:数组中重复的数字
  • 原文地址:https://www.cnblogs.com/wangshuo/p/1997685.html
Copyright © 2020-2023  润新知