汇编 调用外部子过程的ASM文件

来源:百度知道 编辑:UC知道 时间:2024/04/28 14:29:25
请问调用外部(其它)ASM文件里面的子过程应该怎么调?
子过程单独写成一个ASM,主程序也单独写成一个ASM

如果是宏单独写成一个文件的话。直接在主程序文件里面用
include ***.asm 就可以了,但是子过程不行啊

总是会出现连接的时候老出现:外部的符号 子过程名 未解决
在主程序文件中加上 extern 来声明为外部可用
需要把子过程编译么?然后在一起连接?那么在主程序文件中是否还需要加上include 子过程.asm 呢?

主程序调用写在其他asm中的子过程的方法
主程序文件名 main.asm
子过程文件名 sub.asm
子过程名 fun1

方法有:
1:
(1)在main.asm 文件中 在call fun1 之前的任意位置,(即使在.data中也可以) include sub.asm
(2)在 sub.asm的子过程之前可以使用 .code和.data 也可以不加
列如:
.data
n1 DWORD 2
.code
fun1 PROC NEAR32
add eax ,n1
ret
fun1 ENDP
或者:
fun1 PROC NEAR32
add eax ,eax
ret
fun1 ENDP
(3)直接编译main.asm,连接main.obj 即可
注: sub.asm 最后一定不能有END

2:(1)在main.asm 文件中 的.data 之前 EXTRN fun1:NEAR32 ,也可以用 fun1 PROTO NEAR32 声明函数
(2)在sub.asm 的fun1 PROC NEAR32之前,或者fun1 ENDP 之后 PUBLIC fun1
sub.asm 末尾需要 END
例如:

.386
.MODEL FLAT
PUBLIC fun1
.data
n1 dword 2
.code
fun1 PROC NEAR32
add eax ,n1
ret
fun1 ENDP
end
(3)分别编译main.asm,sub.asm。连接连接main.obj和sub.obj

总结,若是其他asm文件中的是宏,则在主文件,或者子过程文件中 直接 include 宏name.asm 即可
若是这些工作做得没