汇编语言EXTERN伪指令:调用外部过程

调用当前模块之外的过程时使用EXTERN伪指令,它确定过程名和堆栈帧大小。下面的示例程序调用了 sub1,它在一个外部模块中:
INCLUDE Irvine32.inc
EXTERN sub1@0:PROC
.code
main PROC
    call subl@0
    exit
main ENDP
END main
当汇编器在源文件中发现一个缺失的过程时(由 CALL 指令指定),默认情况下它会产生错误消息。但是,EXTERN 伪指令告诉汇编器为该过程新建一个空地址。在链接器生成程序的可执行文件时再来确定这个空地址。

过程名的后缀 @n 确定了已声明参数占用的堆栈空间总量。如果使用的是基本 PROC 伪指令,没有声明参数,那么 EXTERN 中的每个过程名后缀都为 @0。若用扩展 PROC 伪指令声明一个过程,则每个参数占用 4 字节。假设现在声明的 AddTwo 带有两个双字参数:

AddTwo PROC,
    val1:DWORD,
    val2:DWORD
    ...
AddTwo ENDP

则相应的 EXTERN 伪指令为 EXTERN AddTwo@8 : PROC。或者,也可以用 PROTO 伪指令来代替 EXTERN:

AddTwo PROTO,
    val1:DWORD,
    val2:DWORD

爱面试的程序媛,一个分享面试经验的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,定时分享程序员面试的那点事。

面试如何造火箭?工作如何拧螺丝?都在这个公号哦。

扫描二维码关注公众号,免费领取价值 1000 元的求职面试资料(限时免费)!

当你决定关注「爱面试的程序媛」,你已然超越了90%的程序员!

爱面试的程序媛二维码
微信扫描二维码关注