从另一个汇编文件调用汇编程序?

时间:2014-04-23 04:42:58

标签: assembly x86 procedure freestanding

只是一个简单的问题:

我们说我有以下两个装配程序:

1

add10:
   add eax, 10
   ret
;call add5 from other file

2:

add5:
   add eax, 5
   ret
;call add10 from other file

我可以从第二个文件中调用add10(在第一个文件中声明),反之亦然?如果是这样,怎么办呢? (即使它不可行)

注意:这将在裸机上运行,​​而不是在任何花哨的NT呼叫上运行!

感谢。

编辑:我在Windows上使用NASM。

2 个答案:

答案 0 :(得分:2)

两个文件:

1

BITS 32

GLOBAL add5

section .code
add5:
    add eax, 5
    ret

2

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。