zoukankan      html  css  js  c++  java
  • 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集成MyBatis
    UpdatePanel的简单用法(转)
    updatePanel导致JS失效的解决办法(转)
    sql面试题(学生表_课程表_成绩表_教师表)
    javascript深入理解js闭包
    T-SQL利用Case When Then多条件判断
    T-SQL排名函数
    DataTable字符串类型的数字,按照数字类型排序
    Sql 行转列问题总结
    行转列:SQL SERVER PIVOT与用法解释
  • 原文地址:https://www.cnblogs.com/wangshuo/p/1997685.html
Copyright © 2011-2022 走看看