只是一个简单的问题:
我们说我有以下两个装配程序:
add10:
add eax, 10
ret
;call add5 from other file
add5:
add eax, 5
ret
;call add10 from other file
我可以从第二个文件中调用add10
(在第一个文件中声明),反之亦然?如果是这样,怎么办呢? (即使它不可行)
注意:这将在裸机上运行,而不是在任何花哨的NT呼叫上运行!
感谢。
编辑:我在Windows上使用NASM。
答案 0 :(得分:2)
两个文件:
BITS 32
GLOBAL add5
section .code
add5:
add eax, 5
ret
BITS 32
EXTERN add5
EXTERN printf
EXTERN ExitProcess
section .data
fmt db `eax=%u\n`
section .code
add10:
add eax, 5
call add5
ret
_main:
mov eax, 87
call add10
push eax
push fmt
call printf
add esp, 8
push 0
call ExitProcess
组装&将它们联系在一起我用作链接器GoLink,其他链接器类似:
nasm.exe -fwin32 -o add5.obj add5.asm
nasm.exe -fwin32 -o add10.obj add10.asm
GoLink.exe /ENTRY:_main /console /fo add10.exe add5.obj add10.obj kernel32.dll msvcrt.dll
我将源名称为“add5.asm”和“add10.asm”。汇编程序生成“add5.obj”和“add10.obj”。链接器使用“add5.obj”和“add10.obj”以及一些系统库(用于'printf'和'ExitProcess')。结果是可执行文件“add10.exe”。查看命令行以获取这些名称的顺序。名字是任意的。
HTH
答案 1 :(得分:1)
如果两个文件都链接到同一个可执行文件,则为是。查找EXTERN或EXTRN。