masm汇编之——过程与宏的区别

定义方法

宏格式:

宏指令名    MACRO 形参
        ·
        ·
        ·
        (宏定义体)
        ENDM

调用 宏名[形参]
作用:MASM.EXE会将调用到宏的地方用宏定义体完全替换。定义宏的地方不会生成机器码。
过程格式:

过程名 PROC [NEAR/FAR]
        ·
        ·
        ·
        RET
        ·
        ·
        ·
过程名     ENDP

调用:call 过程名
注:过程不能传递参数
作用:定义过程的地方会生成机器码。

来个实例

拿9号功能调用来做一个对比。

9号功能调用

作用>
输出一串字符
实例>
a.asm

;9号功能调用演示
data    segment
        str db "this is a string.$"
data    ends
code    segment
assume  cs:code,ds:data
start:
    mov ax,data
    mov ds,ax

    lea dx,str
    mov ah,9
    int 21h

    mov ah,4ch
    int 21h

code    ends
    end start

执行结果

a.EXE
this is a string.

定义一个打印字符的过程

;函数
data    segment
    str1 db "this is str1$"
    str2 db 0ah, 0dh, "this is str2$"
    str3 db 0ah, 0dh, "this is str3$"
data    ends
code    segment
assume cs:code, ds:data
start:  mov ax, data
    mov ds, ax

    lea dx, str1
    call printf

    lea dx, str2
    call printf

    lea dx, str3
    call printf

    mov ah, 4ch
    int 21h

printf  proc
    mov ah, 9
    int 21h
    ret
printf  endp    

code    ends
    end start

定义一个打印的宏

;宏
printf  macro x
    lea dx, x
    mov ah, 9
    int 21h
    endm    

data    segment
    str1 db "this is str1$"
    str2 db 0ah, 0dh, "this is str2$"
    str3 db 0ah, 0dh, "this is str3$"
data    ends
code    segment
assume cs:code, ds:data
start:  mov ax, data
    mov ds, ax

    printf str1
    printf str2
    printf str3

    mov ah, 4ch
    int 21h
code    ends
    end start

区别

汇编代码
很明显,使用宏要比使用过程简洁的多。
但实际上:
生成的可执行文件:宏>过程
由于宏在每次使用时先替换,再生成机器码。
而过程生成一次机器码,每次使用只是进行跳转
程序运行速度:宏>过程
因为没有跳转,所以宏运行的快。

所以说,宏是一种以空间换时间的做法。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值